Explorer
/tmp/aa045f4_gnews_decode.py
← Zurück ↓ Download
"""AA-045-F4: Google-News-Token-Dekodierung (rekursiv) testen."""
import sys, re, base64
sys.path.insert(0, "/opt/struktur/social-media-radar")
import sqlite3

def decode_gnews_token(token: str):
    """Dekodiert GNews-Artikel-Token (mehrfach base64/protobuf verschachtelt)."""
    urls = []
    data = token
    for _ in range(3):
        pad = data.replace('-', '+').replace('_', '/') + '=' * (-len(data) % 4)
        try:
            raw = base64.urlsafe_b64decode(pad)
        except Exception:
            break
        found = re.findall(rb'https?://[^\x00-\x1f\x22\x7f\x5c]+', raw)
        for u in found:
            s = u.decode('utf-8', 'ignore')
            if 'google' not in s and len(s) > 15:
                urls.append(s.rstrip('\\'))
        # weiter verschachteln: base64 im dekodierten Material suchen
        m = re.findall(rb'[A-Za-z0-9_\-]{40,}={0,2}', raw)
        if not m:
            break
        data = m[0].decode()
    return urls

conn = sqlite3.connect("/var/lib/sma-data/signals.db")
rows = conn.execute("SELECT source_url FROM signals WHERE source_name LIKE '%Google News%' LIMIT 5").fetchall()
for (u,) in rows:
    token = u.split("/articles/")[1].split("?")[0]
    res = decode_gnews_token(token)
    print(res[:2] if res else "keine URL")