High-volume Bitly V4 URL shortener with memory-cache
Project description
bitlyshortener
bitlyshortener is an experimental Python 3.7 based high-volume Bitly V4 URL shortener with a memory-cache. It requires and uses one or more generic access tokens provided by Bitly which it uses semi-randomly. It is nevertheless limited by per-IP rate limits. As a disclaimer, this is an unofficial package and it has no association with Bitly.
Other Bitly operations are outside the scope of this package.
The following are the known rate limits per token:
- Per minute: 100 (presumably for status 200 or 201) [ref]
- Per hour: 1000 (presumably for status 200 or 201) [ref]
- Per month: 10000 (presumably for status 201 only) [ref] (requires login)
Links
- Code: https://github.com/impredicative/bitlyshortener/
- Release: https://pypi.org/project/bitlyshortener/
Usage
This package doesn't include any access token. To obtain one:
- Sign up for a new Bitly account.
An email address such as
YourGmailUsername+RandomSuffix@gmail.com
should work. - Verify the email address by clicking the link in the confirmation email. It can sometimes be necessary to have the confirmation email resent.
- In the account profile, navigate to Generic Access Token.
- Enter password and click Generate Token.
Python 3.7+ is required.
Any older version of Python will not work due to the use of
ThreadPoolExecutor
with an initializer.
To install the package, run:
pip install bitlyshortener
Usage examples:
from bitlyshortener import Shortener
tokens_pool = ['9fbe2864bb8872f5027c103321ff91be90aea687', '0cbe3864bc8872f5027c103321ff91be30aea787'] # Use your own.
shortener = Shortener(tokens=tokens_pool, max_cache_size=8192)
# Shorten to list
urls = ['https://paperswithcode.com/sota', 'https://arxiv.org/', 'https://arxiv.org/list/cs.LG/recent']
shortener.shorten_urls(urls)
['https://j.mp/2TuIwfz', 'https://j.mp/2t8R7cu', 'https://j.mp/2GohbIt']
# Shorten to dict
urls = {'https://news.google.com', 'https://yahoo.com/'}
shortener.shorten_urls_to_dict(urls)
{'https://news.google.com': 'https://j.mp/2TzvYnq', 'https://yahoo.com/': 'https://j.mp/2TCihE4'}
# Shorten diverse preexisting Bitly links to list
urls = ['http://j.mp/2Bo2LVf', 'http://bit.ly/2BombJQ', 'https://cnn.it/2Ggb2ih', 'https://j.mp/websniffer']
shortener.shorten_urls(urls)
['https://j.mp/2BtckCt', 'https://j.mp/2BlS1qw', 'https://j.mp/2TEVtUt', 'https://j.mp/2BmjqbZ']
# Show cache info
shortener.cache_info
{'Shortener._long_url_to_int_id': CacheInfo(hits=0, misses=9, maxsize=2048, currsize=9)}
To obtain the fastest response, URLs must be shortened together in a batch as in the examples above.
A thread pool of up to 32 concurrent requesters can be used, but no more than up to five per randomized token.
For example, if two tokens are supplied, up to 2 * 5 = 10 concurrent workers are used.
If eight tokens are supplied, then not 8 * 5 = 40, but a max of 32 concurrent workers are used.
The max limit can, if really necessary, be increased by setting config.MAX_WORKERS
before initializing the shortener.
Returned short links use the j.mp
domain with HTTPS.
Any preexisting Bitly short links are also normalized to use this domain.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for bitlyshortener-0.1.6-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c89acd659344af7d2413e8e71f25923d1100281d781393b67ded45ffbf4b5841 |
|
MD5 | 206d9c84d5779d64d4252045aa373663 |
|
BLAKE2b-256 | 50934a900400d7023da1a9dc3874c0472a33f0dd864a34ba6482e7c60d5226a0 |