#!/usr/bin/env python3 """Spiele-Offensive Top-30: Strict AID-to-image mapping from listing pages.""" import re, urllib.request, sys from datetime import datetime UA = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" NOW = datetime.now().strftime("%d.%m.%Y %H:%M") OUT = "/home/hermes/workspace/spiele_offensive_top30.html" def fetch(url, timeout=15): req = urllib.request.Request(url, headers={"User-Agent": UA}) with urllib.request.urlopen(req, timeout=timeout) as r: raw = r.read() try: return raw.decode("utf-8") except: return raw.decode("iso-8859-1", errors="replace") # ── Build AID→image map ── aid_img = {} for page in range(10): try: h = fetch(f"https://www.spiele-offensive.de/Kat/Sonderangebote.html?sse={page}", 15) except Exception as e: print(f" p{page}: {e}", file=sys.stderr); continue for m in re.finditer( r'registerItemSelection\(dataLayer,\s*(\d+)\s*,.*?' r'
([^<]+).*?' r'
]*>([^<]+)
.*?' r'([^<]*).*?' r'([^<]+).*?' r'= 80 else ("#e63946" if rabatt >= 60 else "#cc0c39") fn = aid_img.get(aid) if fn and img_ok(aid, fn): src = img_url(aid, fn) img = ''.format(src) ok += 1 elif fn: src = img_url(aid, fn) img = ''.format(src) else: img = '
?
' cards.append("""
""" + img + """
""") html = """ Top 30 Brettspiel-Angebote \u2014 Spiele-Offensive.de

Top 30 Brettspiel-Angebote auf Spiele-Offensive.de

Stand: """ + NOW + """ · Sortiert nach Rabatt · Preise inkl. MwSt. · Affiliate-Links (PID 505) · Bilder: Spiele-Offensive

""" + "\n".join(cards) + """
""" with open(OUT, "w") as f: f.write(html) print("Done: {} deals, {} verified images, {} bytes".format(len(top30), ok, len(html)), file=sys.stderr) print("FILE:{}".format(OUT))