Files
BSN-Chatsystem/build_montag_artikel.py
Hermes Agent 2a06bcaee0 fix: <style>-Blöcke aus allen 24 Artikeln entfernt + Skill korrigiert
- artikel_*.html: 24 Dateien von <style>-Blöcken befreit (body, max-width zerstören Joomla)
- journalistic-article-writing SKILL.md: falsche 'AUSNAHME 09.07.' entfernt
- Ursache: Skill-Kommentar erlaubte Sub-Agenten <style> 'für Vorschau' — kein Gatekeeper existiert
2026-07-09 23:30:55 +02:00

83 lines
3.4 KiB
Python

#!/usr/bin/env python3
"""Baut aus kombi_deals.html den Joomla-Artikel-HTML."""
import re
from datetime import datetime
KOMBI_FILE = "/home/hermes/workspace/kombi_deals_2026-07-06.html"
OUTPUT = "/home/hermes/workspace/artikel_deals_montag_2026-07-06.html"
with open(KOMBI_FILE) as f:
raw = f.read()
# Extrahiere den <article>...</article> Block (ohne <article>-Tag selbst)
m = re.search(r"<article>(.*?)</article>", raw, re.DOTALL)
if not m:
print("ERROR: Kein <article> gefunden")
exit(1)
body_inner = m.group(1)
# Ersetze den Amazon-Disclaimer durch Quellen-Footer
body_inner = body_inner.replace(
'<p class="meta" style="margin-top:2rem;">Preise und Verfügbarkeit können sich schnell ändern. Über die Links (60pro05-21) kauft ihr zum gleichen Preis — Amazon zahlt eine kleine Provision.</p>',
'<p><span style="text-decoration: underline;"><strong>Quellen</strong></span><br>Amazon.de (CreatorAPI 3.2), BoardGameGeek XML API v2. Stand: 06.07.2026, 09:15 Uhr. Preise inkl. MwSt. und ggf. Versandkosten. Alle Angaben ohne Gewähr.</p>'
)
# Ersetze h1 durch Hook-Titel
body_inner = body_inner.replace(
'<h1>Brettspiel-Angebote auf Amazon</h1>',
'<h1>Jumanji, Monopoly und Evacuation: Die 30 besten Brettspiel-Deals der Woche auf Amazon</h1>'
)
# Ersetze p.meta mit Datum
body_inner = re.sub(
r'<p class="meta">.*?</p>',
'<p class="meta">Stand: 06. Juli 2026</p>',
body_inner,
count=1
)
# Entferne onerror-Attribute (nicht Joomla-kompatibel)
body_inner = re.sub(r'\s+onerror="[^"]*"', '', body_inner)
# Entferne <br><span style="color:#888">Brand</span><br> aus Non-Brettspiel-Deals
# (das sind zusätzliche Marken-Info die im Artikel stört)
body_inner = re.sub(r'<br><span style="color:#888;font-size:0\.85rem;">[^<]*</span>', '', body_inner)
# Baue Intro-Text + Read-More
intro = """<p>Der Montag bringt frische Brettspiel-Deals auf Amazon: Von Jumanji mit 67 % Rabatt über den Strategiespiel-Klassiker Risiko bis hin zu Vladimír Suchýs „Evacuation" mit 45 % Nachlass — wir haben die 30 attraktivsten Angebote der Woche zusammengestellt. Dazu wie immer die besten Deals aus sieben weiteren Kategorien.</p>
<hr id="system-readmore" />"""
# Fulltext = Intro + Rest des Body (ohne das erste h1+p.meta, die sind schon im Intro)
# Extrahiere alles NACH dem ersten p.meta (die Deal-Liste)
parts = re.split(r'<p class="meta">.*?</p>', body_inner, maxsplit=1)
if len(parts) >= 2:
fulltext = intro + "\n" + parts[1]
else:
fulltext = intro + "\n" + body_inner
# Baue den finalen Artikel-HTML
meta_desc = "Jumanji -67%, Evacuation -45%, Cascadia -32%: Die 30 besten Brettspiel-Deals der Woche auf Amazon — plus Heißluftfritteusen, Laptops, Apple & mehr."
meta_keys = "Brettspiel, Deals, Amazon, Angebote, Jumanji, Evacuation, Cascadia, Everdell, Brettspiel-Deals, reduziert"
html = f"""<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="{meta_desc}">
<meta name="keywords" content="{meta_keys}">
<meta name="author" content="Daniel Krause">
<meta name="robots" content="index, follow">
<title>Jumanji, Monopoly und Evacuation: Die 30 besten Brettspiel-Deals der Woche auf Amazon</title>
</head>
<body>
{fulltext}
</body>
</html>"""
with open(OUTPUT, "w") as f:
f.write(html)
print(f"Artikel geschrieben: {OUTPUT}")
print(f"Größe: {len(html)} Zeichen")