Локально все работает отлично. Но когда я развертываю тот же код в Render, маршрут /import-youtube возвращает ошибку 500.
Вот мой упрощенный маршрут:
Код: Выделить всё
@app.route('/import-youtube', methods=['POST'])
def import_youtube():
data = request.get_json(silent=True) or {}
url = data.get("url")
ydl_opts = {
"format": "bestaudio/best",
"postprocessors": [{
"key": "FFmpegExtractAudio",
"preferredcodec": "mp3",
"preferredquality": "192",
}],
"outtmpl": os.path.join(DOWNLOADS_DIR, "%(title)s.%(ext)s"),
}
try:
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(url, download=True)
except Exception as e:
app.logger.error("YouTube import failed", exc_info=True)
return jsonify({"error": str(e)}), 500
В журналах показано:
Код: Выделить всё
yt_dlp.utils.DownloadError: ERROR: [youtube] :
Sign in to confirm you’re not a bot.
Use --cookies-from-browser or --cookies for authentication.
Моя среда
- Python 3.13 (Render)
- Flask
- yt_dlp 2024.x
- FFmpeg установлен в среде Render
- Использование Gunicorn: Gunicorn FindSongsBackEnd.app:app
Почему yt_dlp требует «Войдите в систему, чтобы подтвердить, что вы не бот» только в Render, в то время как тот же самый код работает локально?
Существует ли рекомендуемый способ избежать этой ошибки при запуске yt_dlp у провайдеров облачного хостинга (Render, AWS и т. д.)?
Я специально ищу:
- Не является ли это проблемой IP/ограничения скорости.
- Есть ли способ настроить yt_dlp, чтобы избежать этой ошибки без передачи файлов cookie браузера.
- Или правильный подход — перехватить DownloadError и обработать этот случай как невосстанавливаемый ответ.
Подробнее здесь: https://stackoverflow.com/questions/798 ... onfirm-you
Мобильная версия