#!/usr/bin/env python3 """Generate the KW28 Fantasywelt article HTML from parsed JSON data.""" import json import html as html_mod with open('/home/hermes/workspace/fantasywelt_data/kw28_parsed.json', 'r') as f: data = json.load(f) neuheiten = data['neuheiten'] wieder_da = data['wieder_da'] vorbestellungen = data['vorbestellungen'] AFFILIATE = 'ig1UxQ0L2cNMNslzFhyr' def escape_html(text): """Escape text for HTML, but preserve existing entities.""" return html_mod.escape(text, quote=False) def build_table(items, max_items=None): """Build an HTML table from items.""" if max_items: items = items[:max_items] rows = [] for item in items: name = escape_html(item['name']) url = item['url'] price = item['price_display'] ersch = item['ersch_date'] ausverkauft = item['ausverkauft'] if ausverkauft: price_cell = f'{price} (ausverkauft)' else: price_cell = f'{price}' rows.append(f'{name}{price_cell}{ersch}') table = f''' {chr(10).join(rows)}
SpielPreisErschienen
''' return table # Build the article article = f''' Die Spiele sind nun bei FantasyWelt erstmals auf Lager oder wieder verfügbar (KW28)

8. Juli 2026

{len(neuheiten)} brandneue Brettspiele und {len(wieder_da)} Rückkehrer: Das ist neu bei Fantasywelt in der KW28.

Die Spiele sind nun bei FantasyWelt erstmals auf Lager oder wieder verfügbar (KW28)

Die Kalenderwoche 28 bringt frischen Wind in die Fantasywelt-Regale: {len(neuheiten)} brandneue Titel sind erstmals im Shop gelistet, {len(wieder_da)} weitere Spiele sind nach einer Durststrecke wieder auf Lager. Dazu kommen {len(vorbestellungen)} neue Vorbestellungen. Wir haben alle Neuheiten und Rückkehrer für euch zusammengestellt — mit Preisen, Sprache und Verfügbarkeit.

ℹ️ Hinweis: Die Verfügbarkeitsangaben entsprechen dem Stand vom 8. Juli 2026. Besonders Trading-Card-Game(TCG)-Produkte sind oft innerhalb weniger Stunden ausverkauft. „Auf Lager" bedeutet: zum Zeitpunkt der Abfrage verfügbar. Bei ausverkauften Titeln lohnt sich der Klick trotzdem — oft gibt es eine Vormerkfunktion.


Neu im Shop ({len(neuheiten)})

{build_table(neuheiten)}

Wieder auf Lager ({len(wieder_da)})

Auswahl der wichtigsten Titel. Die vollständige Liste umfasst {len(wieder_da)} Spiele.

{build_table(wieder_da)}

Neue Vorbestellungen ({len(vorbestellungen)})

{build_table(vorbestellungen)}

Quellen

Recherchestand: 8. Juli 2026. Preise und Verfügbarkeiten können sich ändern. Dieser Artikel enthält Affiliate-Links — bei einem Kauf erhalten wir eine Provision. Alle Angaben ohne Gewähr.

''' with open('/home/hermes/workspace/artikel_fantasywelt_kw28.html', 'w') as f: f.write(article) print(f"Article written to artikel_fantasywelt_kw28.html") print(f" Neuheiten: {len(neuheiten)}") print(f" Wieder da: {len(wieder_da)}") print(f" Vorbestellungen: {len(vorbestellungen)}") print(f" Total items in tables: {len(neuheiten) + len(wieder_da) + len(vorbestellungen)}")