All Projects → impredicative → bitlyshortener

impredicative / bitlyshortener

Licence: AGPL-3.0 License
High-volume Bitly V4 URL shortener with in-memory cache

Programming Languages

python
139335 projects - #7 most used programming language
Makefile
30231 projects

Projects that are alternatives of or similar to bitlyshortener

gShort
URL Shortener without all the crap
Stars: ✭ 80 (+300%)
Mutual labels:  url-shortener, bitly
YOURLS
🔗 The de facto standard self hosted URL shortener in PHP
Stars: ✭ 9,007 (+44935%)
Mutual labels:  url-shortener, bitly
laravel-bitly
Laravel package for generating bitly url
Stars: ✭ 72 (+260%)
Mutual labels:  url-shortener, bitly
ShortURL-Services-List
A list of 600+ URL shorteners (i.e goo.gl, bit.ly)
Stars: ✭ 32 (+60%)
Mutual labels:  url-shortener, bitly
gow
URL shortener for evlfctry.pro
Stars: ✭ 29 (+45%)
Mutual labels:  url-shortener
delta
A modern file uploader + URL shortner written in node for your private cloud. low memory overhead + secure
Stars: ✭ 103 (+415%)
Mutual labels:  url-shortener
FireShort
A URL Shortener made using React.JS and Google Firestore
Stars: ✭ 29 (+45%)
Mutual labels:  url-shortener
miniurl
A production-ready URL shortener microservice.
Stars: ✭ 20 (+0%)
Mutual labels:  url-shortener
purl
Purl (Petite URL) is an open source project with the goal of providing you with your own private URL shortener!
Stars: ✭ 47 (+135%)
Mutual labels:  url-shortener
gobo.icu
URL Shortener For Scratch
Stars: ✭ 14 (-30%)
Mutual labels:  url-shortener
zone
A URL shortener / note sharing service.
Stars: ✭ 18 (-10%)
Mutual labels:  url-shortener
ruby-bitly
A simple bit.ly ruby client to shorten URLs, expand or get number of clicks on a bitlink.
Stars: ✭ 17 (-15%)
Mutual labels:  bitly
go-url
Url Shortener for use inside organisation
Stars: ✭ 18 (-10%)
Mutual labels:  url-shortener
1y
A template project to build a short URL manager with Eleventy
Stars: ✭ 68 (+240%)
Mutual labels:  url-shortener
supaflare
URL shortener / redirection service powered by Supabase, Cloudflare Workers, Workers KV and Cloudflare Pages.
Stars: ✭ 51 (+155%)
Mutual labels:  url-shortener
yii2-minify-url
Project on YII2 framework for create short url (url shortener)
Stars: ✭ 15 (-25%)
Mutual labels:  url-shortener
throw-me
A url shortener made with nextjs and postgresql database operated with Prisma
Stars: ✭ 34 (+70%)
Mutual labels:  url-shortener
klein
the minimalist URL shortener
Stars: ✭ 40 (+100%)
Mutual labels:  url-shortener
yaus
Deprecated URL shortener
Stars: ✭ 26 (+30%)
Mutual labels:  url-shortener
laravel-url-shortener
URL shortener for Laravel
Stars: ✭ 26 (+30%)
Mutual labels:  url-shortener

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

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 [email protected] 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

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 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=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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].