2a06bcaee0
- 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
83 lines
3.4 KiB
Python
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")
|