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.
Dieser Commit ist enthalten in:
claude-dev
2026-04-18 12:30:28 +00:00
Ursprung 5127e0a42d
Commit ed2ab1f3fc

Datei anzeigen

@@ -4,7 +4,9 @@ Reihenfolge der Strategien:
1. rss_native — Podcasting-2.0-Tag <podcast:transcript> 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.