Гид по технологиям

Как сокращать ссылки через Bitly с помощью Python

5 min read Разработка Обновлено 12 Apr 2026
Bitly + Python: как создавать короткие ссылки
Bitly + Python: как создавать короткие ссылки

О чём эта инструкция

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

Страница с URL в браузере

Кому это полезно

  • Разработчикам, которым нужно быстро генерировать короткие ссылки из скриптов и приложений.
  • Автоматизаторам маркетинга и аналитикам, которые хотят массово обрабатывать ссылки.
  • Операторам, которым важна безопасность и контроль токенов.

Что потребуется

  • Аккаунт Bitly (для генерации access token).
  • Python 3.6+ и пакет requests.
  • Базовые навыки командной строки.

Как получить access token в Bitly

  1. Войдите в ваш Bitly-аккаунт. Перейдите в Settings на боковой панели: Bitly Dashboard Page
  2. Слева выберите Developer settings → API: Bitly developer API settings
  3. Нажмите Generate token.
  4. Bitly выдаст вам access token. Сохраните его безопасно — возможно, потребуется ввести пароль для просмотра: Bitly generate new access token page

Важно: токен даёт доступ к вашему аккаунту 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

Как тестировать короткую ссылку в браузере

  1. Скопируйте полученную короткую ссылку из вывода скрипта.
  2. Вставьте в адресную строку браузера и перейдите по ней — вы должны быть перенаправлены на исходный длинный URL.

Command line with shortened link

Страница с короткой ссылкой в браузере

Ошибки и отладка

  • Неверный/просроченный токен → 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 для инцидента “короткие ссылки не создаются”

  1. Проверить логи приложения на статус-коды Bitly.
  2. Проверить доступность Bitly API (curl https://api-ssl.bitly.com/v4/shorten).
  3. Убедиться, что сервис секретов доступен и токен актуален.
  4. При 429 — временно замедлить трёхсекундные интервалы и оповестить команду.
  5. Если 5xx у Bitly — переключиться на резервный процесс (например, откладывать обработку и оповестить пользователей).

Сравнение популярных подходов (кратко)

  • Bitly: быстро, мощная аналитика, SaaS. Меньше контроля над данными.
  • Rebrandly: сильный фокус на брендировании доменов.
  • TinyURL: простота и бесплатность, меньше API-возможностей.
  • Self-hosted (Shlink): полный контроль, требует поддержки инфраструктуры.

Полезные советы и приёмы

  • Храните токен в переменной BITLY_TOKEN.
  • Для массовых операций используйте очередь (RabbitMQ, SQS) и rate limiter.
  • Логируйте только хэши URL, если надо отладить проблему без раскрытия приватных ссылок.

Краткое резюме

Вы получили пошаговую инструкцию: как создать токен в Bitly, как реализовать запрос к Bitly API из Python, как тестировать результат и как безопасно эксплуатировать решение. В комплекте — рекомендуемый скрипт, чек-листы, тесты и playbook на случай инцидентов.

Extras: держите секреты в безопасном хранилище, контролируйте частоту запросов и расширяйте логику обработки ошибок под требования вашей системы.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Настроить меню правого клика в Windows
Windows

Настроить меню правого клика в Windows

Группировать окна по приложениям в Mission Control
macOS

Группировать окна по приложениям в Mission Control

Google Docs для писателя: писать и форматировать книгу
Писательство

Google Docs для писателя: писать и форматировать книгу

Как создать уютный рабочий стол
Офис

Как создать уютный рабочий стол

Как скрыть синюю галочку в X (Twitter)
Социальные сети

Как скрыть синюю галочку в X (Twitter)

Фотосъёмка летающих птиц (BIF): техника и советы
Фотография

Фотосъёмка летающих птиц (BIF): техника и советы