From ed2ab1f3fc5de19f1cd2056dacb5a46a6adc46fa Mon Sep 17 00:00:00 2001 From: claude-dev Date: Sat, 18 Apr 2026 12:30:28 +0000 Subject: [PATCH] YouTube-Fallback aus Podcast-Kaskade entfernt Der geplante YouTube-Captions-Fallback (Phase 2 via yt-dlp) wird nicht umgesetzt. Begruendung: strategische Entscheidung, keinen YouTube-Scrape als Quelle zu nutzen. Geaendert: - src/feeds/transcript_extractors/__init__.py: - try/except-Import fuer youtube-Modul entfernt (nie existiert) - Modul-Docstring aktualisiert (Stufen 1+2, kein 3) - source-Enum-Kommentar: nur noch rss_native / website_scrape Konsequenz: Episoden, die weder Podcasting-2.0-Tag noch Sender-Manuskript haben (z. B. Paywall-Inhalte bei FAZ/Handelsblatt), werden dauerhaft verworfen. Fuer deutsche Qualitaetsmedien-Podcasts (Dlf, NDR, SZ, Spiegel, ZEIT wo frei) reichen die zwei aktiven Stufen. --- src/feeds/transcript_extractors/__init__.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/feeds/transcript_extractors/__init__.py b/src/feeds/transcript_extractors/__init__.py index a209131..083acf4 100644 --- a/src/feeds/transcript_extractors/__init__.py +++ b/src/feeds/transcript_extractors/__init__.py @@ -4,7 +4,9 @@ Reihenfolge der Strategien: 1. rss_native — Podcasting-2.0-Tag im Feed-Entry 2. website_* — Redaktionelles Manuskript auf der Episoden-Webseite (sender-spezifische Adapter) - 3. youtube — YouTube-Auto-Captions via yt-dlp (Phase 2, optional) + +Episoden ohne Treffer in einer der Stufen werden verworfen (kein Fehler). +YouTube-Fallback wird nicht genutzt. Jeder Adapter implementiert: def can_handle(feed_entry: dict, feed_url: str) -> bool @@ -31,11 +33,11 @@ logger = logging.getLogger("osint.podcast.extractors") class TranscriptResult: """Einheitliches Ergebnis einer Transkript-Strategie.""" text: str - source: str # "rss_native" / "website_scrape" / "youtube" + source: str # "rss_native" / "website_scrape" segments: Optional[list] = None # Optional: [{"start": sec, "end": sec, "text": "..."}] -# Reihenfolge der Kaskade: zuerst Feed-Tag, dann Senderseiten, zuletzt YouTube +# Reihenfolge der Kaskade: zuerst Feed-Tag, dann Senderseiten from . import rss_native from . import website_dlf from . import website_sz @@ -50,13 +52,6 @@ _EXTRACTORS = [ website_ndr, ] -# YouTube-Adapter ist optional — nur importieren falls vorhanden (Phase 2) -try: - from . import youtube # noqa: F401 - _EXTRACTORS.append(youtube) -except ImportError: - pass - async def fetch_transcript(feed_entry: dict, feed_url: str, episode_url: str) -> Optional[TranscriptResult]: """Versucht Kaskade durch bis eine Stufe liefert.