Bitly в Python: как сокращать ссылки через API
Что такое Bitly и зачем сокращать ссылки
Bitly — это сервис для создания коротких ссылок, которые перенаправляют на более длинные URL. Короткие ссылки удобнее делиться, их проще запомнить и отслеживать клики. Вдобавок API Bitly позволяет автоматизировать создание коротких ссылок из приложений и скриптов.
Ключевые термины
- access token — секретный ключ, который идентифицирует ваш аккаунт при вызовах API.
- endpoint — URL-адрес API, по которому отправляется запрос на сокращение.
Что вы получите из этой инструкции
- Пошагово: как создать access token в Bitly.
- Пример Python-скрипта для сокращения URL.
- Проверку результата в браузере.
- Советы по безопасности, отладке и интеграции в прод.
Как получить access token в аккаунте Bitly
- Войдите в свой аккаунт Bitly (или создайте новый).
- Откройте настройки аккаунта через боковое меню и перейдите в раздел «Settings».
- В боковой панели выберите «Developer settings», затем — «API».
- Нажмите «Generate token» (Создать токен). Для просмотра токена сервис может потребовать повторного ввода пароля.
- Скопируйте токен и сохраните его в безопасном месте. Рекомендуется хранить токен в переменных окружения или в хранилище секретов, а не прямо в коде.
Важно: не публикуйте 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
Сохраните access token, полученный ранее. Для безопасности храните его в переменной окружения, например BITLY_TOKEN.
Параметры API:
- endpoint: https://api-ssl.bitly.com/v4/shorten
- заголовки: Authorization: Bearer
, Content-Type: application/json
Пример формирования запроса и логики повторных попыток (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).
Как проверить короткую ссылку в браузере
Запустите скрипт из терминала, перейдя в каталог с файлом:
cd C:\Users\Sharl\Desktop
(или соответствующая команда в вашей ОС)Установите библиотеку requests (если она не установлена):
pip install requests- Запустите скрипт и передайте длинный URL:
python shortURL.py https://www.makeuseof.com/tag/3-ways-run-android-apps-windows/- Скопируйте сгенерированную короткую ссылку и вставьте её в адресную строку браузера. Ссылка должна перенаправить вас на исходный длинный URL.
Безопасность, приватность и соответствие
Важно:
- Никогда не публикуйте access token публично.
- Не сокращайте ссылки, которые содержат чувствительные личные данные в параметрах (PII).
- Для компаний: документируйте жизненный цикл токена, ротацию ключей и доступ команд.
Примечание по GDPR и приватности: короткая ссылка сама по себе — лишь указатель на ресурс. Если целевой URL содержит персональные данные, перед распространением убедитесь, что вы соблюдаете требования защиты данных и имеете правовую основу для передачи таких данных.
Отладка и типичные ошибки
Частые причины неуспеха:
- Неверный или просроченный access token (проверьте 401/403).
- Некорректный формат long_url (проверьте 400).
- Лимиты API или rate limits (в документации Bitly описаны лимиты на вызовы).
- Сетевые проблемы (таймауты, DNS).
Как действовать:
- Посмотрите код ответа и тело ошибки.
- Если 4xx — проверьте токен и входные данные.
- Если 5xx или таймауты — повторяйте с экспоненциальной задержкой и логируйте ошибки.
- Переходите к ручному тесту через 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.
- Обрабатывайте ошибки, используйте повторные попытки и храните секреты безопасно.
Важно: перед массовым использованием оцените риски публикации ссылок и требования по защите личных данных.
Похожие материалы
HDR в Photoshop из одного JPEG
Оттенки серого на Android: как включить и зачем
Эмуляция PS3 на Steam Deck — RPCS3 через EmuDeck
Отключить звуки уведомлений Windows 10
Добавить приложения в Быстрый запуск Windows