Update .env.example with new admin bot token, modify Docker configuration for Instagram downloader to use host network mode, and enhance YouTube downloader with improved cookie validation and error handling for video downloads.
This commit is contained in:
parent
e6c6734768
commit
5c8456de96
4 changed files with 138 additions and 11 deletions
|
|
@ -182,8 +182,16 @@ def download_youtube_video(url: str, max_retries: int = 3) -> Path:
|
|||
logger.info(f"YouTube: попытка {attempt + 1}/{max_retries}, стратегия: {strategy['name']}")
|
||||
|
||||
# Получаем информацию о видео
|
||||
with yt_dlp.YoutubeDL(strategy['opts'].copy()) as ydl:
|
||||
info = ydl.extract_info(url, download=False)
|
||||
try:
|
||||
with yt_dlp.YoutubeDL(strategy['opts'].copy()) as ydl:
|
||||
info = ydl.extract_info(url, download=False)
|
||||
except Exception as info_error:
|
||||
error_str = str(info_error).lower()
|
||||
logger.warning(f"YouTube: ошибка при получении информации о видео: {str(info_error)[:200]}")
|
||||
# Если ошибка связана с куками - пробуем следующую стратегию
|
||||
if any(keyword in error_str for keyword in ['bot', 'sign in', 'cookies', 'private', 'unavailable']):
|
||||
continue
|
||||
raise
|
||||
|
||||
video_title = info.get('title', 'video') if info else 'video'
|
||||
logger.info(f"YouTube: получена информация о видео: {video_title}")
|
||||
|
|
@ -260,7 +268,28 @@ def download_youtube_video(url: str, max_retries: int = 3) -> Path:
|
|||
@app.route('/health', methods=['GET'])
|
||||
def health():
|
||||
"""Health check endpoint"""
|
||||
return jsonify({'status': 'ok', 'service': 'youtube-downloader'}), 200
|
||||
cookies_file = os.getenv('YOUTUBE_COOKIES_FILE', 'youtube_cookies.txt')
|
||||
cookies_file_path = Path(cookies_file)
|
||||
cookies_status = 'not_found'
|
||||
cookies_valid = False
|
||||
|
||||
if cookies_file_path.exists():
|
||||
cookies_status = 'found'
|
||||
cookies_valid = _is_valid_cookies_file(cookies_file_path)
|
||||
if cookies_valid:
|
||||
cookies_status = 'valid'
|
||||
else:
|
||||
cookies_status = 'invalid'
|
||||
|
||||
return jsonify({
|
||||
'status': 'ok',
|
||||
'service': 'youtube-downloader',
|
||||
'cookies': {
|
||||
'file': str(cookies_file_path),
|
||||
'status': cookies_status,
|
||||
'valid': cookies_valid
|
||||
}
|
||||
}), 200
|
||||
|
||||
|
||||
@app.route('/download/stream', methods=['POST'])
|
||||
|
|
@ -308,7 +337,10 @@ def download_stream():
|
|||
|
||||
except Exception as e:
|
||||
error_str = str(e)
|
||||
import traceback
|
||||
error_traceback = traceback.format_exc()
|
||||
logger.error(f"Ошибка при скачивании: {error_str}")
|
||||
logger.error(f"Traceback: {error_traceback}")
|
||||
|
||||
# Улучшаем сообщение об ошибке
|
||||
error_msg = error_str
|
||||
|
|
@ -318,6 +350,14 @@ def download_stream():
|
|||
"💡 Совет: YouTube требует авторизацию для этого видео (18+, приватное и т.д.). "
|
||||
"Попробуйте открыть видео в браузере, авторизоваться, затем повторить запрос."
|
||||
)
|
||||
elif 'unable to download' in error_str.lower() or 'http error' in error_str.lower():
|
||||
error_msg = (
|
||||
f"{error_str}\n\n"
|
||||
"💡 Возможные причины:\n"
|
||||
"1. Видео недоступно или удалено\n"
|
||||
"2. Проблемы с сетью или доступом к YouTube\n"
|
||||
"3. Куки устарели - обновите файл youtube_cookies.txt"
|
||||
)
|
||||
|
||||
return jsonify({'error': error_msg}), 500
|
||||
|
||||
|
|
@ -325,6 +365,21 @@ def download_stream():
|
|||
if __name__ == '__main__':
|
||||
port = int(os.getenv('PORT', 5000)) # Внутренний порт контейнера
|
||||
host = os.getenv('HOST', '0.0.0.0')
|
||||
|
||||
# Проверяем куки при старте
|
||||
cookies_file = os.getenv('YOUTUBE_COOKIES_FILE', 'youtube_cookies.txt')
|
||||
cookies_file_path = Path(cookies_file)
|
||||
if cookies_file_path.exists():
|
||||
cookies_valid = _is_valid_cookies_file(cookies_file_path)
|
||||
if cookies_valid:
|
||||
logger.info(f"YouTube: файл куков найден и валиден: {cookies_file_path}")
|
||||
else:
|
||||
logger.warning(f"YouTube: файл куков найден, но не валиден: {cookies_file_path}")
|
||||
logger.warning("YouTube: сервис будет работать, но может потребоваться обновление куков")
|
||||
else:
|
||||
logger.warning(f"YouTube: файл куков не найден: {cookies_file_path}")
|
||||
logger.warning("YouTube: сервис будет работать без куков (может не работать для 18+ и приватных видео)")
|
||||
|
||||
logger.info(f"Запуск YouTube Downloader сервиса на {host}:{port}")
|
||||
app.run(host=host, port=port, debug=False)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue