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

Bitly в Python: как сокращать ссылки через API

5 min read Разработка Обновлено 26 Dec 2025
Bitly в Python: сократить ссылку через API
Bitly в Python: сократить ссылку через API

Что такое Bitly и зачем сокращать ссылки

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

Ключевые термины

  • access token — секретный ключ, который идентифицирует ваш аккаунт при вызовах API.
  • endpoint — URL-адрес API, по которому отправляется запрос на сокращение.

Что вы получите из этой инструкции

  • Пошагово: как создать access token в Bitly.
  • Пример Python-скрипта для сокращения URL.
  • Проверку результата в браузере.
  • Советы по безопасности, отладке и интеграции в прод.

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

  1. Войдите в свой аккаунт Bitly (или создайте новый).
  2. Откройте настройки аккаунта через боковое меню и перейдите в раздел «Settings».

Bitly dashboard

  1. В боковой панели выберите «Developer settings», затем — «API».

Настройки разработчика Bitly: API

  1. Нажмите «Generate token» (Создать токен). Для просмотра токена сервис может потребовать повторного ввода пароля.

Создание нового access token Bitly

  1. Скопируйте токен и сохраните его в безопасном месте. Рекомендуется хранить токен в переменных окружения или в хранилище секретов, а не прямо в коде.

Важно: не публикуйте access token в открытых репозиториях.


Запрос длинного URL у пользователя в Python

Вы можете получить URL из аргументов командной строки или через ввод во время выполнения. Ниже — пример с аргументом командной строки.

Простой пример работы с аргументами:

import requests
import json
import time
import sys

# Получаем аргументы командной строки
command_line_args = sys.argv

if len(command_line_args) > 1:
    url = command_line_args[1]
else:
    print('Пожалуйста, передайте URL, который нужно сократить, как аргумент командной строки')
    sys.exit(1)

print('Генерация сокращённой ссылки...')

Комментарий: использование sys.argv удобно для простых утилит. Для более удобного интерфейса рассмотрите argparse.


Как вызвать Bitly API для сокращения URL

  1. Сохраните access token, полученный ранее. Для безопасности храните его в переменной окружения, например BITLY_TOKEN.

  2. Параметры API:

Пример формирования запроса и логики повторных попыток (retry):

import os
import requests
import json
import time
import sys

# Рекомендуется хранить токен в переменной окружения
access_token = os.getenv('BITLY_TOKEN')  # или установите явно для теста
if not access_token:
    print('Ошибка: не найден BITLY_TOKEN в окружении')
    sys.exit(1)

endpoint = 'https://api-ssl.bitly.com/v4/shorten'
headers = {
    'Authorization': f'Bearer {access_token}',
    'Content-Type': 'application/json',
}

max_retries = 3
retry_count = 0

payload = {
    'long_url': url
}

while retry_count < max_retries:
    try:
        response = requests.post(endpoint, headers=headers, data=json.dumps(payload), timeout=10)
    except requests.RequestException as e:
        print(f'Сетевая ошибка при запросе: {e}')
        retry_count += 1
        if retry_count < max_retries:
            print('Повторная попытка через 5 секунд...')
            time.sleep(5)
        continue

    if response.status_code == 200 or response.status_code == 201:
        try:
            data = response.json()
            shortened_url = data.get('link')
            if shortened_url:
                print(f'Короткая ссылка: {shortened_url}')
                break
            else:
                print('Ответ сервера не содержит поля link')
                sys.exit(1)
        except ValueError:
            print('Не удалось распарсить ответ сервера как JSON')
            sys.exit(1)
    else:
        print(f'Ошибка сервера Bitly: {response.status_code} — {response.text}')
        retry_count += 1
        if retry_count < max_retries:
            print('Повторная попытка через 5 секунд...')
            time.sleep(5)
        else:
            print('Сокращение URL не удалось после нескольких попыток')

Заметка: Bitly может возвращать разные коды статуса в зависимости от ошибки (например, 400 при неверном URL, 403 при проблемах с токеном). В логах сохраняйте только служебную информацию, не сохраняйте токен целиком.


Полный пример скрипта shortURL.py

Ниже — полный, готовый к запуску скрипт. Перед запуском экспортируйте BITLY_TOKEN в окружение.

#!/usr/bin/env python3

import os
import sys
import requests
import json
import time

def main():
    args = sys.argv
    if len(args) <= 1:
        print('Использование: python shortURL.py <длинный_URL>')
        sys.exit(1)

    long_url = args[1]
    access_token = os.getenv('BITLY_TOKEN')
    if not access_token:
        print('Ошибка: установите переменную окружения BITLY_TOKEN')
        sys.exit(1)

    endpoint = 'https://api-ssl.bitly.com/v4/shorten'
    headers = {
        'Authorization': f'Bearer {access_token}',
        'Content-Type': 'application/json'
    }

    payload = {'long_url': long_url}

    max_retries = 3
    for attempt in range(1, max_retries + 1):
        try:
            print(f'Попытка {attempt}: отправка запроса в Bitly...')
            resp = requests.post(endpoint, headers=headers, data=json.dumps(payload), timeout=10)
        except requests.RequestException as e:
            print(f'Сетевая ошибка: {e}')
            if attempt < max_retries:
                time.sleep(5)
                continue
            else:
                sys.exit(1)

        if resp.status_code in (200, 201):
            try:
                result = resp.json()
                print('Короткая ссылка:', result.get('link'))
                return
            except ValueError:
                print('Не удалось прочитать JSON-ответ')
                sys.exit(1)
        else:
            print('Bitly вернул код:', resp.status_code)
            print('Текст ответа:', resp.text)
            if attempt < max_retries:
                print('Повтор через 5 секунд...')
                time.sleep(5)
            else:
                print('Сокращение не удалось')
                sys.exit(1)

if __name__ == '__main__':
    main()

Важно: для CI/CD или сервера используйте безопасное хранилище секретов (например, vault, AWS Secrets Manager, GitHub Actions secrets).


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

  1. Запустите скрипт из терминала, перейдя в каталог с файлом:
    cd C:\Users\Sharl\Desktop
    (или соответствующая команда в вашей ОС)

  2. Установите библиотеку requests (если она не установлена):

pip install requests
  1. Запустите скрипт и передайте длинный URL:
python shortURL.py https://www.makeuseof.com/tag/3-ways-run-android-apps-windows/
  1. Скопируйте сгенерированную короткую ссылку и вставьте её в адресную строку браузера. Ссылка должна перенаправить вас на исходный длинный URL.

Командная строка с отображением короткой ссылки

Короткая ссылка открыта в браузере и перенаправляет на длинный URL


Безопасность, приватность и соответствие

Важно:

  • Никогда не публикуйте access token публично.
  • Не сокращайте ссылки, которые содержат чувствительные личные данные в параметрах (PII).
  • Для компаний: документируйте жизненный цикл токена, ротацию ключей и доступ команд.

Примечание по GDPR и приватности: короткая ссылка сама по себе — лишь указатель на ресурс. Если целевой URL содержит персональные данные, перед распространением убедитесь, что вы соблюдаете требования защиты данных и имеете правовую основу для передачи таких данных.


Отладка и типичные ошибки

Частые причины неуспеха:

  • Неверный или просроченный access token (проверьте 401/403).
  • Некорректный формат long_url (проверьте 400).
  • Лимиты API или rate limits (в документации Bitly описаны лимиты на вызовы).
  • Сетевые проблемы (таймауты, DNS).

Как действовать:

  1. Посмотрите код ответа и тело ошибки.
  2. Если 4xx — проверьте токен и входные данные.
  3. Если 5xx или таймауты — повторяйте с экспоненциальной задержкой и логируйте ошибки.
  4. Переходите к ручному тесту через cURL или Postman, чтобы исключить ошибки в коде.

Пример cURL-запроса для быстрой проверки (замените токен и URL):

curl -X POST https://api-ssl.bitly.com/v4/shorten \
  -H "Authorization: Bearer $BITLY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"long_url": "https://example.com/very/long/url"}'

Когда этот подход не подходит и альтернативы

Когда не подходит:

  • Вам нужен собственный домен для коротких ссылок и полного контроля.
  • Нужна расширенная аналитика или правила редиректа на уровне приложения.

Альтернативы:

  • Использовать кастомный сервис сокращения ссылок (на базе Nginx + Redis) с собственным доменом.
  • Другие SaaS-провайдеры коротких ссылок, у которых другие тарифы и SLA.

Чек-листы и приемочные критерии

Чек-лист для разработчика:

  • Access token хранится в безопасном месте.
  • Код обрабатывает неуспешные ответы и повторяет запросы.
  • Логи не содержат токенов и чувствительных данных.

Чек-лист для QA:

  • Короткая ссылка корректно перенаправляет на длинную.
  • Поведение при ошибках соответствует спецификации (400/401/5xx).
  • Тесты на таймаут и повторную отправку.

Критерии приёмки

  • Система возвращает короткую ссылку при корректном запросе.
  • Ошибки и таймауты обрабатываются и логируются.
  • Токен не хранится в репозитории.

Рекомендации для продакшена

  • Ротация токенов: задавайте политику ротации и процедуру отзыва ключей.
  • Ограничение доступа: минимизируйте пользователей с правом создавать токены.
  • Мониторинг: отслеживайте частоту ошибок API и время ответа (SLI/SLO в пределах вашей инфраструктуры).

Краткая сводка

  • Получите access token в разделе API Bitly.
  • Напишите скрипт, который отправляет POST-запрос на /v4/shorten с заголовком Authorization.
  • Обрабатывайте ошибки, используйте повторные попытки и храните секреты безопасно.

Важно: перед массовым использованием оцените риски публикации ссылок и требования по защите личных данных.

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

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

HDR в Photoshop из одного JPEG
Фотография

HDR в Photoshop из одного JPEG

Оттенки серого на Android: как включить и зачем
Мобильные устройства

Оттенки серого на Android: как включить и зачем

Эмуляция PS3 на Steam Deck — RPCS3 через EmuDeck
Игры

Эмуляция PS3 на Steam Deck — RPCS3 через EmuDeck

Отключить звуки уведомлений Windows 10
Windows

Отключить звуки уведомлений Windows 10

Добавить приложения в Быстрый запуск Windows
Windows

Добавить приложения в Быстрый запуск Windows

Громкость будильника на iPhone: как изменить
Гаджеты

Громкость будильника на iPhone: как изменить