videoDownloadTGbot/youtube-downloader/get_youtube_cookies.sh

106 lines
4.3 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Скрипт для получения cookies YouTube через yt-dlp из Firefox
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
COOKIES_FILE="$SCRIPT_DIR/youtube_cookies.txt"
BROWSER="firefox"
# Если запущено с sudo, используем HOME реального пользователя
if [ -n "$SUDO_USER" ]; then
REAL_HOME=$(getent passwd "$SUDO_USER" | cut -d: -f6)
export HOME="$REAL_HOME"
echo "⚠️ Обнаружен sudo, использую домашнюю директорию пользователя: $HOME"
fi
echo "Получение cookies YouTube из Firefox..."
echo "Файл cookies будет сохранен в: $COOKIES_FILE"
# Проверяем наличие yt-dlp
if ! command -v yt-dlp &> /dev/null; then
echo ""
echo "❌ yt-dlp не найден в системе"
echo ""
echo "Установите yt-dlp одним из способов:"
echo ""
echo "1. Через pacman (Arch Linux):"
echo " sudo pacman -S yt-dlp"
echo ""
echo "2. Через pip:"
echo " pip install yt-dlp"
echo " или"
echo " pip3 install yt-dlp"
echo ""
echo "3. Через pipx (рекомендуется):"
echo " pipx install yt-dlp"
echo ""
exit 1
fi
echo "Получаю cookies..."
# Используем простой способ: извлекаем cookies из браузера и сохраняем в файл
# Используем конкретное короткое видео (не плейлист, не главную страницу)
# Таймаут 10 секунд
# --no-download - не скачивать видео
# --skip-download - пропустить скачивание
# --flat-playlist - не извлекать информацию о видео в плейлистах
# Перенаправляем весь вывод, чтобы не видеть процесс скачивания
timeout 10 yt-dlp \
--cookies-from-browser "$BROWSER" \
--cookies "$COOKIES_FILE" \
--no-download \
--skip-download \
--flat-playlist \
--quiet \
"https://www.youtube.com/watch?v=jNQXAC9IVRw" > /dev/null 2>&1 || true
EXIT_CODE=$?
# Не важно, какой код возврата - главное проверить, создался ли файл cookies
# yt-dlp может вернуть ошибку, но cookies все равно сохранить
if [ -f "$COOKIES_FILE" ]; then
# Проверяем, что файл содержит данные (не только заголовки)
COOKIE_LINES=$(grep -v '^#' "$COOKIES_FILE" | grep -v '^$' | wc -l)
if [ "$COOKIE_LINES" -gt 0 ]; then
echo ""
echo "✅ Cookies успешно сохранены в $COOKIES_FILE"
echo " Найдено строк с cookies: $COOKIE_LINES"
echo ""
echo "Теперь перезапустите youtube-downloader:"
echo " docker compose -f youtube-downloader/docker-compose.yml restart"
echo ""
echo "Или перезапустите все сервисы:"
echo " ./stop_all.sh && ./start_all.sh"
else
echo ""
echo "❌ Ошибка: файл cookies создан, но не содержит данных"
rm -f "$COOKIES_FILE"
exit 1
fi
else
echo ""
echo "❌ Ошибка: файл cookies не был создан"
echo ""
echo "Возможные причины:"
echo "1. Firefox не найден или недоступен"
echo "2. Проблемы с правами доступа к файлу cookies браузера"
echo "3. Cookies не найдены в браузере"
echo ""
echo "Проверка:"
if [ -n "$SUDO_USER" ]; then
REAL_HOME=$(getent passwd "$SUDO_USER" | cut -d: -f6)
FIREFOX_DIR="$REAL_HOME/.mozilla/firefox"
else
FIREFOX_DIR="$HOME/.mozilla/firefox"
fi
if [ -d "$FIREFOX_DIR" ]; then
echo " ✓ Директория Firefox найдена: $FIREFOX_DIR"
else
echo " ✗ Директория Firefox не найдена: $FIREFOX_DIR"
echo " Попробуйте запустить скрипт БЕЗ sudo: ./get_youtube_cookies.sh"
fi
exit 1
fi