Skip to main content

High-volume Bitly V4 URL shortener with memory-cache

Project description

bitlyshortener

bitlyshortener is a 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. 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.

cicd badge

Links

Requirements

Tokens

Obtaining tokens

This package doesn't include any access token. To obtain one:

  • Sign up for a new Bitly account at https://bitly.com/a/sign_up. An email address such as YourGmailUsername+SomeSuffix01@gmail.com should work.
  • When asked "How will you use your links?", select "For personal use".
  • If presented the "Your Links Are Everything" page, click "Skip this step".
  • Verify the email address by clicking the link in the confirmation email. It can on rare occasions be necessary to have the confirmation email resent.
  • Under "Profile Settings", select "Generic Access Token".
  • Enter password and click Generate Token.

Rate limits

The following have historically been the rate limits per token:

  • Per minute: 100 (presumably for status 200 or 201)
  • Per hour: 1000 (presumably for status 200 or 201)
  • Per month: 1000 (presumably for status 201 only)

Bitly sends a monthly email if if 50% of the account's usage limit for new short links is exceeded for the calendar month. If this email is received, it is suggested to immediately obtain and add additional tokens to the pool used by this package. As follows, it is preferable to stay under 50% of the usage limit by having a sufficiently big pool of tokens. It is possible to monitor the usage via the .usage() method as shown in the examples.

It is unknown what the per-IP rate limit is, if any.

Python

Python 3.7+ is required. Any older version of Python will not work due to the use of ThreadPoolExecutor with an initializer.

Usage

To install the package, run:

pip install bitlyshortener

Usage examples:

import bitlyshortener

# Setup
tokens_pool = ['9fbe2864bb8872f5027c103321ff91be90aea687', '0cbe3864bc8872f5027c103321ff91be30aea787']  # Use your own.
shortener = bitlyshortener.Shortener(tokens=tokens_pool, max_cache_size=256)

# Shorten to list
long_urls = ['https://www.amazon.com/gp/product/B07LFJMS2S/', 'https://www.cnn.com/election/2020', 'https://paperswithcode.com/sota']
shortener.shorten_urls(long_urls)
['https://amzn.to/2HcWFgV', 'https://cnn.it/3ofdpVp', 'https://j.mp/2IHwQ8P']

# Shorten to dict
long_urls = ['https://news.google.com', 'https://yahoo.com/']
shortener.shorten_urls_to_dict(long_urls)
{'https://news.google.com': 'https://j.mp/31t9qL2', 'https://yahoo.com/': 'https://yhoo.it/3ondJS2'}

# Normalize diverse preexisting Bitly links
urls = ['http://j.mp/2Bo2LVf', 'http://bit.ly/2BombJQ', 'https://cnn.it/2Ggb2ih', 'https://j.mp/websniffer']
shortener.shorten_urls(urls)
['https://j.mp/37qFvH0', 'https://j.mp/3obETLt', 'https://cnn.it/2FMI6jc', 'https://j.mp/37FmjFV']

# Show usage for tokens pool (cached for an hour)
shortener.usage()
0.4604  # Means that an average of 46% of the current calendar month's URL shortening quota has been used across all tokens.

# Show cache info
shortener.cache_info
{'Shortener._shorten_url': CacheInfo(hits=4, misses=10, maxsize=128, currsize=10)}

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bitlyshortener-0.5.0.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bitlyshortener-0.5.0-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

File details

Details for the file bitlyshortener-0.5.0.tar.gz.

File metadata

  • Download URL: bitlyshortener-0.5.0.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.0 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.6

File hashes

Hashes for bitlyshortener-0.5.0.tar.gz
Algorithm Hash digest
SHA256 f193438d091398f708c0f502c49d5317c28a889c83c47dd52ab5e81530be4b63
MD5 090b6e6170a9101ac2fb8f6e9494d106
BLAKE2b-256 479b7891ef2efe675d82dbe9bceeeddba52072434efe109e808b901856672e57

See more details on using hashes here.

File details

Details for the file bitlyshortener-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: bitlyshortener-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 21.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.0 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.6

File hashes

Hashes for bitlyshortener-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0918976597a42724de97781663ee8209ad45d8bbc30776a095817cd725d73027
MD5 7e3c2c120539f4b819549b5b4eacce5e
BLAKE2b-256 b490b74641cfb2caf03f4a5437f4b42e660b8f9c1a8368f1b8188250aafc958c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page