Как сокращать ссылки через Bitly с помощью Python
О чём эта инструкция
Bitly — сервис для создания коротких ссылок, которые перенаправляют на длинные URL. Короткие ссылки удобнее для обмена, запоминания и аналитики. В статье показано, как получить access token в Bitly, написать простой Python-скрипт, который вызывает Bitly API для сокращения ссылки, и как безопасно тестировать и эксплуатировать такое решение.

Кому это полезно
- Разработчикам, которым нужно быстро генерировать короткие ссылки из скриптов и приложений.
- Автоматизаторам маркетинга и аналитикам, которые хотят массово обрабатывать ссылки.
- Операторам, которым важна безопасность и контроль токенов.
Что потребуется
- Аккаунт Bitly (для генерации access token).
- Python 3.6+ и пакет requests.
- Базовые навыки командной строки.
Как получить access token в Bitly
- Войдите в ваш Bitly-аккаунт. Перейдите в Settings на боковой панели:

- Слева выберите Developer settings → API:

- Нажмите Generate token.
- Bitly выдаст вам access token. Сохраните его безопасно — возможно, потребуется ввести пароль для просмотра:

Важно: токен даёт доступ к вашему аккаунту Bitly, поэтому храните его как секрет (см. раздел Безопасность ниже).
Минимальный пример: запрос URL у пользователя через командную строку
В простейшем варианте мы читаем URL из аргумента командной строки и передаём его в Bitly. Ниже первичный набор импортов, как в исходном примере:
import requests
import json
import time
import sysЗапуск скрипта из командной строки (пример):
python shortURL.py https://www.example.com/a/made/up/urlПример получения аргумента в скрипте:
commandLineArgs = sys.argv
if len(commandLineArgs) > 1:
url = commandLineArgs[1]
else:
print('Please enter the URL you want to shorten as a command line argument')
sys.exit()
print('Generating shortened URL...')Полный, улучшенный скрипт на Python (рекомендуется)
Ниже — готовый пример, который добавляет обработку ошибок, повторные попытки, чтение токена из переменной окружения и таймауты. Сохраните в файл shortURL.py.
#!/usr/bin/env python3
import os
import sys
import time
import requests
# Короткая функция: отправляет запрос на Bitly и возвращает короткую ссылку или None
def shorten(url, token, max_retries=3, timeout=10):
endpoint = 'https://api-ssl.bitly.com/v4/shorten'
headers = {
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json',
}
payload = {
'long_url': url,
}
retry_count = 0
while retry_count < max_retries:
try:
resp = requests.post(endpoint, headers=headers, json=payload, timeout=timeout)
# успешный ответ обычно имеет код 200
if resp.status_code == 200:
data = resp.json()
return data.get('link')
else:
# Логику обработки ошибок можно расширить по коду ответа
retry_count += 1
if retry_count < max_retries:
time.sleep(5)
except requests.RequestException:
retry_count += 1
if retry_count < max_retries:
time.sleep(5)
return None
def main():
if len(sys.argv) <= 1:
print('Please enter the URL you want to shorten as a command line argument')
sys.exit(1)
url = sys.argv[1]
# Чтение токена: сначала из переменной окружения, иначе подсказка (не храните токен в коде)
access_token = os.environ.get('BITLY_TOKEN', 'YOUR_ACCESS_TOKEN')
print('Generating shortened URL...')
short = shorten(url, access_token)
if short:
print(f'Shortened URL: {short}')
else:
print('URL shortening was not successful.')
if __name__ == '__main__':
main()Советы по использованию:
- Установите requests: pip install requests
- Перед запуском экспортируйте токен: export BITLYTOKEN=’ваштокен’ (Linux/macOS) или setx BITLYTOKEN “ваштокен” (Windows PowerShell)
- Запустите: python shortURL.py https://example.com/very/long/url
Как тестировать короткую ссылку в браузере
- Скопируйте полученную короткую ссылку из вывода скрипта.
- Вставьте в адресную строку браузера и перейдите по ней — вы должны быть перенаправлены на исходный длинный URL.


Ошибки и отладка
- Неверный/просроченный токен → 401 Unauthorized. Проверьте токен и права в Bitly.
- Неправильный формат URL → Bitly вернёт 400 Bad Request. Убедитесь, что URL имеет схему (http/https).
- Сетевая ошибка → requests.RequestException; в скрипте реализованы повторные попытки.
- Ограничения по частоте запросов → Bitly может отвечать 429. Обрабатывайте такие ответы с экспоненциальной задержкой.
Important: всегда логируйте статус-коды и тело ответа при отладке (не печатайте токен).
Безопасность и конфиденциальность
- Никогда не коммитите access token в репозиторий. Используйте переменные окружения, секреты в CI/CD или менеджеры секретов (Vault, Azure Key Vault и т. п.).
- Для локальной разработки используйте .env файлы, добавленные в .gitignore.
- Если вы собираете или логируете пользовательские URL, проверьте требования GDPR/законов о конфиденциальности: храните минимум данных и удаляйте по запросу.
Альтернативные подходы
- Использовать официальный Bitly SDK (если доступен для вашего языка) вместо ручных HTTP-запросов.
- TinyURL, Rebrandly, Shlink — альтернативы с разным набором возможностей (брендинг, массовая загрузка, self-hosting).
- Самостоятельно хостить сервис сокращения ссылок (например, Shlink), если нужен полный контроль над данными.
Когда этот подход не подойдёт
- Если вам нужен корпоративный контроль над короткими ссылками и аудит данных — рассмотрите self-hosted решения.
- Если вы генерируете миллионы ссылок в минуту — оцените производительность и rate limits Bitly; возможно, нужна платная подписка или отдельное решение.
Модель принятия решений — когда использовать Bitly API
- Нужна быстрая интеграция в приложение → Bitly API
- Нужен брендированный домен → платная подписка Bitly или Rebrandly
- Полный контроль и хранение данных — самохостинг
flowchart TD
A[Нужны короткие ссылки?] --> B{Требуется контроль над данными?}
B -- Нет --> C[Использовать Bitly / Rebrandly]
B -- Да --> D[Развернуть self-hosted 'Shlink']
C --> E{Нужен брендированный домен?}
E -- Да --> F[Платные планы Bitly/Rebrandly]
E -- Нет --> G[Стандартный Bitly]Чеклист перед запуском в продакшн
- Токен хранится в секретах/переменных окружения
- Логи не содержат токенов
- Реализованы повторные попытки и таймауты
- Обработаны коды ошибок Bitly (4xx/5xx/429)
- Есть тесты, проверяющие успешное сокращение и корректное перенаправление
Роли и обязанности
- Разработчик: реализовать и покрыть тестами сокращение ссылок, не хранить токены в репозитории.
- DevOps: обеспечить безопасное хранение секретов и мониторинг API-ошибок.
- QA: написать интеграционные тесты, проверяющие ответы Bitly и редиректы.
Критерии приёмки
- Скрипт возвращает корректную короткую ссылку при валидном URL и токене.
- При неуспехе скрипт возвращает понятное сообщение и код возврата != 0.
- Время ожидания и повторы ограничены (таймауты настроены).
- Логи не содержат секретов.
Тесты и кейсы приёмки
- Позитивный кейс: валидный URL и валидный токен → получена короткая ссылка и редирект в браузере.
- Негативный кейс: отсутствует токен → скрипт завершился с ошибкой, код 1.
- Негативный кейс: битва со скоростью (симулирован 429) → применяется backoff; запросы не приводят к аварии.
- Негативный кейс: неверный URL → Bitly возвращает 400, скрипт логирует текст ошибки.
Шаблон playbook для инцидента “короткие ссылки не создаются”
- Проверить логи приложения на статус-коды Bitly.
- Проверить доступность Bitly API (curl https://api-ssl.bitly.com/v4/shorten).
- Убедиться, что сервис секретов доступен и токен актуален.
- При 429 — временно замедлить трёхсекундные интервалы и оповестить команду.
- Если 5xx у Bitly — переключиться на резервный процесс (например, откладывать обработку и оповестить пользователей).
Сравнение популярных подходов (кратко)
- Bitly: быстро, мощная аналитика, SaaS. Меньше контроля над данными.
- Rebrandly: сильный фокус на брендировании доменов.
- TinyURL: простота и бесплатность, меньше API-возможностей.
- Self-hosted (Shlink): полный контроль, требует поддержки инфраструктуры.
Полезные советы и приёмы
- Храните токен в переменной BITLY_TOKEN.
- Для массовых операций используйте очередь (RabbitMQ, SQS) и rate limiter.
- Логируйте только хэши URL, если надо отладить проблему без раскрытия приватных ссылок.
Краткое резюме
Вы получили пошаговую инструкцию: как создать токен в Bitly, как реализовать запрос к Bitly API из Python, как тестировать результат и как безопасно эксплуатировать решение. В комплекте — рекомендуемый скрипт, чек-листы, тесты и playbook на случай инцидентов.
Extras: держите секреты в безопасном хранилище, контролируйте частоту запросов и расширяйте логику обработки ошибок под требования вашей системы.
Похожие материалы
Настроить меню правого клика в Windows
Группировать окна по приложениям в Mission Control
Google Docs для писателя: писать и форматировать книгу
Как создать уютный рабочий стол
Как скрыть синюю галочку в X (Twitter)