Skip to main content

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.

As of 2022, the maintenance of this package has been discontinued because Bitly dramatically lowered their free quota per token to just 50 URLs per month.

Other Bitly operations are outside the scope of this package.

cicd badge

Links

Caption Link
Repo https://github.com/impredicative/bitlyshortener/
Changelog https://github.com/impredicative/bitlyshortener/releases
Package https://pypi.org/project/bitlyshortener/

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.
  • On the "Let's keep this short" page, click "Skip to your homepage".
  • Verify the email address by clicking the link in the confirmation email. This is a necessary step. 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

In Nov 2022, Bitly sent an email advising that the rate limit per token was lowered to 50 per month, effective Dec 8, 2022.

The following were previously 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 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/3Inxf9V', 'https://cnn.it/3FKKZd8', 'https://bit.ly/3tLlp5w']

# Shorten to dict
>>> long_urls = ['https://news.google.com', 'https://yahoo.com/']
>>> shortener.shorten_urls_to_dict(long_urls)
{'https://news.google.com': 'https://bit.ly/3IjSObD', 'https://yahoo.com/': 'https://yhoo.it/2BiHgp8'}

# Normalize diverse preexisting Bitly links
>>> urls = ['http://bit.ly/3Ad49Hw', 'http://j.mp/2Bo2LVf', 'https://cnn.it/3FKKZd8', 'https://j.mp/websniffer']
>>> shortener.shorten_urls(urls)
['https://bit.ly/3Ad49Hw', 'https://bit.ly/3KjocZw', 'https://cnn.it/3FKKZd8', 'https://bit.ly/3nINKph']

# Show usage for tokens pool (is 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=256, 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.

Release files for bitlyshortener 0.6.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bitlyshortener 0.6.4
File Size Uploaded
bitlyshortener-0.6.4.tar.gz 22.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bitlyshortener 0.6.4
File Interpreter ABI Platform
bitlyshortener-0.6.4-py3-none-any.whl Python 3 none any Details

Total release size: 44.1 kB

Release files / bitlyshortener-0.6.4.tar.gz

Download URL bitlyshortener-0.6.4.tar.gz
Size 22.9 kB
Tags Source
SHA-256 checksum
How to use checksums
dbf24ddd3d97bfc10c36c795c46b3b884ce562aa70b6678b203fe96d5350619b
BLAKE2b-256 checksum
How to use checksums
8a31624c8366ab8f32176c7922356d2204b61b053ad098db668defced1867be2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.9

Release files / bitlyshortener-0.6.4-py3-none-any.whl

Download URL bitlyshortener-0.6.4-py3-none-any.whl
Size 21.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8f14a69644df57755041526448171bbe3b4cb4ee05b8b9fef041b19bb0082a28
BLAKE2b-256 checksum
How to use checksums
4688a9fcd4f52c1da5e31fb978737e0158d4c5b93c871bf36da4f314b73e33eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.9

Release history Release notifications | RSS feed

This release

0.6.4 This release

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page