# 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`](../cookies/README.md). Скрипты автоматического экспорта через `yt-dlp --cookies-from-browser` убраны: этот способ ломает сессию, куки после него быстро протухают. ### 2. Запуск сервиса #### Вариант 1: Через корневой docker-compose (рекомендуется) ```bash cd .. # вернуться в корень проекта docker compose up -d instagram-downloader ``` #### Вариант 2: Отдельно ```bash docker compose up -d ``` ### 3. Проверка работы ```bash # Проверка здоровья сервиса curl http://localhost:5556/health # Должен вернуть: {"status":"ok","service":"instagram-downloader"} ``` ## API Endpoints ### GET /health Проверка здоровья сервиса. **Ответ:** ```json { "status": "ok", "service": "instagram-downloader" } ``` ### POST /cookies/check Проверка, работают ли cookies прямо сейчас: делает лёгкий `extract_info` (без скачивания) по публичному тестовому ролику. Используется фоновым мониторингом в `bot.py`. **Ответ:** ```json { "cookies_present": true, "cookies_valid": false, "detail": "текст ошибки от yt-dlp" } ``` `cookies_valid: null` означает, что файл с куками не найден. Тестовый URL переопределяется переменной `INSTAGRAM_COOKIE_TEST_URL`. ### POST /download/stream Скачивание видео с Instagram. **Запрос:** ```json { "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`](../cookies/README.md). Перезапускать сервис после обновления не нужно: `yt-dlp` читает файл с диска при каждом запросе. ## Troubleshooting ### Сервис не может скачать видео 1. Проверьте состояние куков: `curl -s -X POST localhost:5556/cookies/check` 2. Проверьте наличие файла `instagram_cookies.txt` в папке `instagram-downloader/` и что в нём есть `sessionid` 3. Если `cookies_valid: false` — обновите куки по инструкции в [`cookies/README.md`](../cookies/README.md) 4. Проверьте логи: `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 # Этот файл ```