"""AA-045-F4 Tests A-D (Bilder) mit Cockpit-HTML-Beleg."""
import sys, json, urllib.request
sys.path.insert(0, "/opt/struktur/social-media-radar")
import sqlite3
conn = sqlite3.connect("/var/lib/sma-data/signals.db")
conn.row_factory = sqlite3.Row
# A: 2 YouTube-Signale mit Thumbnail
yt = conn.execute("""SELECT signal_id, external_id, image_url FROM signals
WHERE source_type='youtube' AND image_found=1 ORDER BY created_at DESC LIMIT 2""").fetchall()
for r in yt:
with urllib.request.urlopen(f"http://127.0.0.1:8652/api/img?u={urllib.parse.quote(r['image_url'], safe='')}", timeout=15) as resp:
print(f"A YouTube {r['external_id']}: Proxy {resp.status}, {resp.headers.get('Content-Type')}, {len(resp.read())}B")
# B: Webartikel mit og:image
r = conn.execute("""SELECT signal_id, image_url FROM signals
WHERE source_type='rss' AND image_found=1 AND image_source='og:image'
AND created_at>'2026-08-16' LIMIT 1""").fetchone()
with urllib.request.urlopen(f"http://127.0.0.1:8652/api/img?u={urllib.parse.quote(r['image_url'], safe='')}", timeout=20) as resp:
print(f"B Webartikel og:image: Proxy {resp.status}, {resp.headers.get('Content-Type')}")
# C: GNews - dokumentiert nicht aufloesbar
n = conn.execute("SELECT COUNT(*) FROM signals WHERE source_name LIKE '%Google News%' AND COALESCE(final_article_url,'')!=''").fetchone()[0]
print(f"C GNews-Aufloesung: {n} aufgeloest (JS-Consent-Wall, siehe Bericht)")
# D: Fallback - Signal ohne Bild hat keinen img-Tag im Cockpit
html = open("/tmp/cp5.html").read()
print("D Cockpit geladen:", len(html) > 100000, "| onerror-Fallback vorhanden:", "onerror" in html)
# Bildquote nachher gesamt
img = conn.execute("SELECT COUNT(*), SUM(image_found) FROM signals WHERE created_at>'2026-08-16'").fetchone()
print(f"Bildquote 7T: {img[1]}/{img[0]} = {100*img[1]/img[0]:.1f}%")