fix(downloaders): Deno runtime, свежий yt-dlp, честный health-check, смоук-тест
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 2m36s
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 2m36s
Возрастные YouTube-видео не скачивались: с cookies yt-dlp отбрасывает клиент
android и остаётся web, которому нужно решить n-challenge, а в образе стоял
Node 20 при требуемом минимуме 22 ("JS runtimes: node-20.19.2 (unsupported)").
Ставим Deno — рекомендованный yt-dlp рантайм и один статический бинарник.
Instagram падал с "empty media response" одинаково с cookies и без них —
дело было не в сессии, а в устаревшем экстракторе: слой pip был закеширован
на yt-dlp 2026.06.09. Поднимаем нижнюю границу до 2026.7.4.
/cookies/check помечал проблемой с cookies ЛЮБОЙ сбой, из-за чего на поломку
JS-рантайма прилетел алерт про протухшие cookies и увёл разбор не туда.
Теперь ответ содержит status: ok | cookies_invalid | extraction_failed |
no_cookies, и админ-бот шлёт разные сообщения. Разбор ответа в bot.py
сохраняет совместимость со старым форматом без поля status.
Добавлен smoke_test.py — гоняет реальные ссылки (включая обе регрессии выше)
через запущенные сервисы и печатает таблицу. Запускать после каждой правки.
Схема получения cookies переведена с крона на разовый ручной экспорт:
cookies-cron/ -> cookies/, удалены скрипты с анти-паттерном
`--cookies-from-browser BROWSER --cookies FILE`, который wiki yt-dlp прямо
запрещает и который сам ломал YouTube-сессию ротацией. Ключевые cookies живут
около года, поэтому обновление по расписанию не нужно — триггером служит алерт
health-check. deliver_cookies.sh только доставляет файлы по scp.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
5092d882e5
commit
d597a5e1c5
19 changed files with 373 additions and 733 deletions
|
|
@ -1,111 +0,0 @@
|
|||
#!/bin/bash
|
||||
# Скрипт для обновления cookies Instagram и YouTube через cron
|
||||
# Запускает скрипты получения cookies и копирует их на удаленный хост
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Определяем директорию скрипта
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# Настройки
|
||||
INSTAGRAM_SCRIPT="$SCRIPT_DIR/get_instagram_cookies.sh"
|
||||
YOUTUBE_SCRIPT="$SCRIPT_DIR/get_youtube_cookies.sh"
|
||||
INSTAGRAM_COOKIES="$SCRIPT_DIR/instagram_cookies.txt"
|
||||
YOUTUBE_COOKIES="$SCRIPT_DIR/youtube_cookies.txt"
|
||||
REMOTE_HOST="germany"
|
||||
REMOTE_INSTAGRAM_PATH="/root/services/videoDownloadTGbot/instagram_cookies.txt"
|
||||
REMOTE_YOUTUBE_PATH="/root/services/videoDownloadTGbot/youtube_cookies.txt"
|
||||
DEV_HOST="hermesDev"
|
||||
DEV_INSTAGRAM_PATH="services/videoDownloadTGbot/instagram-downloader/instagram_cookies.txt"
|
||||
DEV_YOUTUBE_PATH="services/videoDownloadTGbot/youtube-downloader/youtube_cookies.txt"
|
||||
LOG_FILE="$SCRIPT_DIR/cron.log"
|
||||
|
||||
# Функция логирования
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
# Функция обработки ошибок
|
||||
error_exit() {
|
||||
log "ОШИБКА: $*"
|
||||
exit 1
|
||||
}
|
||||
|
||||
log "=== Начало обновления cookies ==="
|
||||
|
||||
# Проверяем наличие скриптов
|
||||
if [ ! -f "$INSTAGRAM_SCRIPT" ]; then
|
||||
error_exit "Скрипт не найден: $INSTAGRAM_SCRIPT"
|
||||
fi
|
||||
|
||||
if [ ! -f "$YOUTUBE_SCRIPT" ]; then
|
||||
error_exit "Скрипт не найден: $YOUTUBE_SCRIPT"
|
||||
fi
|
||||
|
||||
# Проверяем, что скрипты исполняемые
|
||||
chmod +x "$INSTAGRAM_SCRIPT" "$YOUTUBE_SCRIPT"
|
||||
|
||||
# Получаем cookies Instagram
|
||||
log "Получение cookies Instagram..."
|
||||
if bash "$INSTAGRAM_SCRIPT" >> "$LOG_FILE" 2>&1; then
|
||||
if [ -f "$INSTAGRAM_COOKIES" ]; then
|
||||
log "✅ Cookies Instagram успешно получены"
|
||||
else
|
||||
error_exit "Файл cookies Instagram не был создан"
|
||||
fi
|
||||
else
|
||||
error_exit "Ошибка при получении cookies Instagram (код возврата: $?)"
|
||||
fi
|
||||
|
||||
# Получаем cookies YouTube
|
||||
log "Получение cookies YouTube..."
|
||||
if bash "$YOUTUBE_SCRIPT" >> "$LOG_FILE" 2>&1; then
|
||||
if [ -f "$YOUTUBE_COOKIES" ]; then
|
||||
log "✅ Cookies YouTube успешно получены"
|
||||
else
|
||||
error_exit "Файл cookies YouTube не был создан"
|
||||
fi
|
||||
else
|
||||
# YouTube скрипт может завершиться с кодом 0, даже если новый файл не создан (использует старый)
|
||||
if [ -f "$YOUTUBE_COOKIES" ]; then
|
||||
log "✅ Cookies YouTube (возможно использован старый файл)"
|
||||
else
|
||||
error_exit "Файл cookies YouTube не найден"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Копируем cookies на удаленный хост (прод)
|
||||
log "Копирование cookies на удаленный хост $REMOTE_HOST..."
|
||||
|
||||
# Копируем Instagram cookies
|
||||
if scp -q "$INSTAGRAM_COOKIES" "${REMOTE_HOST}:${REMOTE_INSTAGRAM_PATH}" 2>>"$LOG_FILE"; then
|
||||
log "✅ Instagram cookies скопированы на $REMOTE_HOST"
|
||||
else
|
||||
error_exit "Ошибка при копировании Instagram cookies (код возврата: $?)"
|
||||
fi
|
||||
|
||||
# Копируем YouTube cookies
|
||||
if scp -q "$YOUTUBE_COOKIES" "${REMOTE_HOST}:${REMOTE_YOUTUBE_PATH}" 2>>"$LOG_FILE"; then
|
||||
log "✅ YouTube cookies скопированы на $REMOTE_HOST"
|
||||
else
|
||||
error_exit "Ошибка при копировании YouTube cookies (код возврата: $?)"
|
||||
fi
|
||||
|
||||
# Копируем cookies на тестовый стенд (не блокируем прод-доставку, если стенд недоступен)
|
||||
log "Копирование cookies на тестовый стенд $DEV_HOST..."
|
||||
|
||||
if scp -q "$INSTAGRAM_COOKIES" "${DEV_HOST}:${DEV_INSTAGRAM_PATH}" 2>>"$LOG_FILE"; then
|
||||
log "✅ Instagram cookies скопированы на $DEV_HOST"
|
||||
else
|
||||
log "⚠️ Не удалось скопировать Instagram cookies на $DEV_HOST (продолжаем)"
|
||||
fi
|
||||
|
||||
if scp -q "$YOUTUBE_COOKIES" "${DEV_HOST}:${DEV_YOUTUBE_PATH}" 2>>"$LOG_FILE"; then
|
||||
log "✅ YouTube cookies скопированы на $DEV_HOST"
|
||||
else
|
||||
log "⚠️ Не удалось скопировать YouTube cookies на $DEV_HOST (продолжаем)"
|
||||
fi
|
||||
|
||||
log "=== Обновление cookies завершено успешно ==="
|
||||
exit 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue