Lokal funktioniert alles perfekt. Aber wenn ich denselben Code für Render bereitstelle, gibt die Route /import-youtube einen 500-Fehler zurück.
Hier ist meine vereinfachte Route:
Code: Select all
@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
Die Protokolle zeigen:
Code: Select all
yt_dlp.utils.DownloadError: ERROR: [youtube] :
Sign in to confirm you’re not a bot.
Use --cookies-from-browser or --cookies for authentication.
Meine Umgebung
- Python 3.13 (Render)
- Flask
- yt_dlp 2024.x
- FFmpeg in der Render-Umgebung installiert
- Verwenden von Gunicorn: gunicorn FindSongsBackEnd.app:app
Warum erfordert yt_dlp „Anmelden, um zu bestätigen, dass Sie kein sind bot“ nur auf Render, während genau der gleiche Code lokal funktioniert?
Gibt es eine empfohlene Möglichkeit, diesen Fehler zu vermeiden, wenn yt_dlp auf Cloud-Hosting-Anbietern (Render, AWS usw.) ausgeführt wird?
Ich suche insbesondere nach:
- Ob es sich hierbei um ein IP-/Ratenbegrenzungsproblem handelt.
- Ob es eine Möglichkeit gibt, yt_dlp zu konfigurieren, um diesen Fehler zu vermeiden, ohne Browser-Cookies zu übergeben.
- Oder ob der richtige Ansatz darin besteht, DownloadError abzufangen und diesen Fall als nicht wiederherstellbare Antwort zu behandeln.
Mobile version