🏛️ Politik Video Download — Bundestag-Mediathek vollautomatisch scrapen & aufbereiten

Scraped die Bundestag-Mediathek, lädt Videos in 1080p, generiert KI-Titel und Thumbnails — vollautomatische Pipeline von URL bis YouTube-ready.

PythonWeb-ScrapingOpenAI GPT-4oVideo-DownloadThumbnail-Gen

🚀 Content-Pipeline automatisieren statt manuell schneiden

Vereinbaren Sie ein unverbindliches Strategiegespräch

📞 02406 803 7603 ✉️ info@computerkumpel.de

📊 Business Value

Content-Erstellung für Politik-Kanäle ist zeitaufwändig. Diese Pipeline automatisiert den gesamten Workflow: Video finden → herunterladen → Titel generieren → Thumbnail erstellen → Metadaten in DB.

🤖
Vollautomatisch
Von der Mediathek-URL bis zum YouTube-ready-Video: kein manueller Eingriff nötig. Läuft als Cron-Job.
🎬
1080p Download
Filtert automatisch die 1920x1080-Auflösung mit kleinster Dateigröße. Optimiert für Speicher & Qualität.
🧠
KI-Titel & Fragen
OpenAI GPT-4o generiert SEO-optimierte YouTube-Titel (max 70 Zeichen) und Engagement-Fragen für Thumbnails.
🖼️
Auto-Thumbnails
Thumbnails mit Overlay-Grafik, eingebetteter Frage und benutzerdefinierter Schriftart. Klickrate-optimiert.

⚙️ Pipeline-Ablauf

1
🔍

Mediathek scrapen

HTML parsen, __NEXT_DATA__ JSON extrahieren. Regex sucht script-Tag mit strukturierten Videodaten.

2
⬇️

Video + Thumbnail downloaden

Streaming-Download via requests.iter_content (8KB Chunks). Video + Thumbnail parallel speichern.

3
🧠

KI verarbeiten

OpenAI generiert YouTube-Titel und 3-Wort-Frage aus der Videobeschreibung. Prompt-Engineering für maximale CTR.

4
🗄️

DB-Update

Metadaten (Titel, Tags, Beschreibung, Frage) in MySQL schreiben. Ready für YouTube-Upload-Pipeline.

💻 Code — Mediathek-Scraping & JSON-Extraktion

__NEXT_DATA__ JSON aus Next.js-Seite extrahieren

import re, json, requests

response = requests.get(url)
html_text = response.text
json_pattern = re.compile(
    r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>')
match = re.search(json_pattern, html_text)

if match:
    data = json.loads(match.group(1))
    resolutions = (data.get("props", {}).get("pageProps", {})
        .get("mediaItem", {}).get("videos", [])[0]
        .get("resolutions", []))
    
    # Nur 1080p, sortiert nach kleinster Dateigröße
    filtered = [r for r in resolutions 
                if r.get("resolution") == "1920x1080"]
    best = sorted(filtered, key=lambda r: r.get("size"))[0]
    
    # Metadaten extrahieren
    media_item = data["props"]["pageProps"]["mediaItem"]
    description = media_item.get("description")
    tags = media_item.get("tags")
    thumbnail_url = media_item.get("mediaThumbnailURL", {}) \
        .get("desktop", "")

💻 Code — OpenAI Titel-Generierung & DB-Update

GPT-4o: SEO-Titel (max 70 Zeichen) + Engagement-Frage

import openai

def generate_title_and_question(description):
    title_prompt = (
        f"Create a YouTube video title from this description: {description}. "
        "The title should be engaging and informative. Don't use: "
        "@, #, $, %, &, *, +, =, |, , /, {, }, [, ]. "
        "It should look like a YouTube search query, max 70 characters."
    )
    question_prompt = (
        f"Create a 3 word question that fits: {description}."
    )
    
    title = openai.ChatCompletion.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": title_prompt}
        ],
        temperature=0.7, max_tokens=1000
    ).choices[0].message['content'].strip()
    
    question = openai.ChatCompletion.create(
        model="gpt-4o",
        messages=[...]  # analog für question_prompt
    ).choices[0].message['content'].strip()
    
    return title, question

Streaming-Download mit Chunks (8KB)

def download_file(url, file_path):
    response = requests.get(url, stream=True)
    with open(file_path, 'wb') as f:
        for chunk in response.iter_content(chunk_size=8192):
            if chunk:
                f.write(chunk)

def download_video_and_thumbnail(video_url, thumb_url, 
                                  base_dir, media_business_id):
    video_path = f"{base_dir}{media_business_id}_fin.mp4"
    thumb_path = f"{base_dir}{media_business_id}.jpg"
    download_file(video_url, video_path)
    download_file(thumb_url, thumb_path)
    return video_path, thumb_path

🎯 Strategische Erkenntnisse

🔄

Content-Pipelines statt Einzelstücke

Ein Video manuell zu produzieren dauert 2-4 Stunden. Die Pipeline produziert 10+ Videos pro Stunde — skalierbar ohne Personalkosten-Skalierung.

Pipeline-Denken = Margen-Multiplikator im Content-Business.

📊

Daten strukturieren = Wiederverwenden

Die __NEXT_DATA__-Extraktion funktioniert für ALLE Next.js-Seiten. Einmal gebaut, auf hunderte Quellen anwendbar.

Generische Scraper sparen 80% Entwicklungszeit bei neuen Quellen.

🎯

SEO-Titel = mehr Views

GPT-4o optimiert Titel auf YouTube-Suchverhalten (Search-Query-Stil, max 70 Zeichen). Das steigert die organische Reichweite ohne Werbebudget.

KI-generierte Metadaten outperformen manuelle bei Such-Plattformen.

Ihre Content-Pipeline — gebaut in 1 Woche

Ich automatisiere Ihren Content-Workflow: Scraping, Download, KI-Aufbereitung, Upload. Maßgeschneidert für Ihre Quellen.

📞 Jetzt anrufen ✉️ E-Mail senden