|
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 1m0s
/cookies/check раньше тестировал только путь с cookies и при неудаче писал
cookies_invalid — даже когда реальное скачивание прекрасно работает через
app-level fallback без cookies. Теперь проверка повторяет этот же
эффективный путь: cookies path сломан известным багом yt-dlp (media/info
всегда 404 вместо редиректа на логин), но раз fallback его закрывает —
это не авария и не повод слать ложный алерт "куки протухли", который
обновление cookies всё равно не лечит. Если не работает и анонимный путь
(который cookies не использует) — это extraction_failed, а не cookies_invalid.
Отдельно: когда Instagram сам отказывает показывать контент анонимным/
несовместимым аккаунтам ("can't be seen by certain audiences") — это
легитимный отказ, а не наша поломка, и повторная попытка не поможет.
Пользователь теперь видит это прямо, а не общее "Something went wrong".
Админ по-прежнему получает полный технический текст без изменений.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| app.py | ||
| docker-compose.yml | ||
| Dockerfile | ||
| instagram_cookies.txt | ||
| INSTAGRAM_COOKIES_INSTRUCTIONS.md | ||
| README.md | ||
| requirements.txt | ||
Instagram Downloader Service
Микросервис для скачивания видео с Instagram.
Требования
- Docker и Docker Compose
- Файл с cookies Instagram (
instagram_cookies.txtв папкеinstagram-downloader/)
Быстрый старт
1. Настройка cookies
Перед запуском сервиса нужно положить instagram_cookies.txt в папку instagram-downloader/.
Куки экспортируются вручную из браузера расширением для cookies.txt — пошаговая процедура в cookies/README.md. Скрипты автоматического экспорта через yt-dlp --cookies-from-browser убраны: этот способ ломает сессию, куки после него быстро протухают.
2. Запуск сервиса
Вариант 1: Через корневой docker-compose (рекомендуется)
cd .. # вернуться в корень проекта
docker compose up -d instagram-downloader
Вариант 2: Отдельно
docker compose up -d
3. Проверка работы
# Проверка здоровья сервиса
curl http://localhost:5556/health
# Должен вернуть: {"status":"ok","service":"instagram-downloader"}
API Endpoints
GET /health
Проверка здоровья сервиса.
Ответ:
{
"status": "ok",
"service": "instagram-downloader"
}
POST /cookies/check
Проверка, работают ли cookies прямо сейчас: делает лёгкий extract_info (без скачивания) по публичному тестовому ролику. Используется фоновым мониторингом в bot.py.
Ответ:
{
"cookies_present": true,
"cookies_valid": false,
"detail": "текст ошибки от yt-dlp"
}
cookies_valid: null означает, что файл с куками не найден. Тестовый URL переопределяется переменной INSTAGRAM_COOKIE_TEST_URL.
POST /download/stream
Скачивание видео с Instagram.
Запрос:
{
"url": "https://www.instagram.com/p/..."
}
Ответ:
- Успех: бинарные данные видео (Content-Type: video/mp4)
- Ошибка: JSON с описанием ошибки
Порты
- Внешний порт: 5556
- Внутренний порт контейнера: 5000
Обновление cookies
Ключевые куки Instagram живут около года, поэтому обновлять их по расписанию не нужно. Триггер на обновление — алерт 🍪⚠️ ПРОАКТИВНАЯ ПРОВЕРКА COOKIES из админ-бота (за состоянием следит фоновая проверка в bot.py, которая раз в 30 минут дёргает POST /cookies/check).
Процедура экспорта и доставки — в cookies/README.md. Перезапускать сервис после обновления не нужно: yt-dlp читает файл с диска при каждом запросе.
Troubleshooting
Сервис не может скачать видео
- Проверьте состояние куков:
curl -s -X POST localhost:5556/cookies/check - Проверьте наличие файла
instagram_cookies.txtв папкеinstagram-downloader/и что в нём естьsessionid - Если
cookies_valid: false— обновите куки по инструкции вcookies/README.md - Проверьте логи:
docker compose logs instagram-downloader
Cookies есть и не истекли по сроку, но всё равно login required
Instagram умеет блокировать сессию на своей стороне — тогда в логах видно Main webpage is locked behind the login page при формально валидном sessionid. Лечится только повторным экспортом куков. Провоцирует такую блокировку активная автоматическая работа с аккаунтом (например, постоянно открытая вкладка Instagram, непрерывно ходящая в сеть), поэтому после экспорта браузер лучше закрывать.
Структура файлов
instagram-downloader/
├── app.py # Основной код сервиса
├── Dockerfile # Образ Docker
├── docker-compose.yml # Конфигурация для отдельного запуска
├── requirements.txt # Python зависимости
├── INSTAGRAM_COOKIES_INSTRUCTIONS.md # Отсылка к cookies/README.md
└── README.md # Этот файл