fix: QC-Ratings aus 7 älteren Artikeln entfernt (CHECK 10)

This commit is contained in:
Hermes Agent
2026-06-23 23:47:51 +02:00
parent e73e0e88de
commit 4d90e4249d
656 changed files with 2602398 additions and 3 deletions
+112
View File
@@ -0,0 +1,112 @@
#!/usr/bin/env python3
"""Fetch article 15385, optimize tables with gray borders, PATCH back."""
import json, urllib.request, re
TOKEN = "c2hhMjU2Ojc5NDpjYzY0ZTQ4NmVkZGJiMmU1YTk2YTI4YmU4OTcwMzQ5MjRmNjZmMjcyMmRiMGJlM2JhYWI0MDhlNmI4MDZlMmI0"
BASE = "https://www.brettspiel-news.de/api/index.php/v1/content/articles"
# ── 1. Fetch article ──────────────────────────────────────
req = urllib.request.Request(f"{BASE}/15385", headers={
"X-Joomla-Token": TOKEN,
"Accept": "application/vnd.api+json"
})
resp = urllib.request.urlopen(req)
data = json.loads(resp.read())
text = data["data"]["attributes"]["text"]
print(f"Fetched article 15385: '{data['data']['attributes']['title']}'")
print(f"Text length: {len(text)}")
# ── 2. Patch Table 1: "Für wen ist das Spiel?" ────────────
old1 = '<h2>Für wen ist das Spiel?</h2>\r\n<table>\r\n<tbody>\r\n<tr><th>✅ Dafür geeignet</th><th>❌ Eher nicht</th></tr>\r\n<tr>\r\n<td>Strategie-Fans, die Effizienz lieben</td>\r\n<td>Casual-Runden mit 5+ Personen</td>\r\n</tr>\r\n<tr>\r\n<td>Solo-Spieler (exzellenter Solo-Modus)</td>\r\n<td>Wer epische 3-Stunden-Partien sucht</td>\r\n</tr>\r\n<tr>\r\n<td>23 Personen (spielt sich am besten)</td>\r\n<td>Wer auf Glück statt Taktik steht</td>\r\n</tr>\r\n<tr>\r\n<td>Alle, die <em>Die rote Kathedrale</em> mochten</td>\r\n<td>&nbsp;</td>\r\n</tr>\r\n</tbody>\r\n</table>'
new1 = '''<div class="bsn-infobox">
<h2>Für wen ist das Spiel?</h2>
<table style="border-collapse: collapse; width: 100%; font-size: 0.95rem;">
<tbody>
<tr style="background: #f0f4ff;"><th style="border: 1px solid #ccc; padding: 10px 14px; text-align: left; color: #20228a;">✅ Dafür geeignet</th><th style="border: 1px solid #ccc; padding: 10px 14px; text-align: left; color: #20228a;">❌ Eher nicht</th></tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px 14px;">Strategie-Fans, die Effizienz lieben</td>
<td style="border: 1px solid #ddd; padding: 8px 14px;">Casual-Runden mit 5+ Personen</td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px 14px;">Solo-Spieler (exzellenter Solo-Modus)</td>
<td style="border: 1px solid #ddd; padding: 8px 14px;">Wer epische 3-Stunden-Partien sucht</td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px 14px;">23 Personen (spielt sich am besten)</td>
<td style="border: 1px solid #ddd; padding: 8px 14px;">Wer auf Glück statt Taktik steht</td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px 14px;">Alle, die <em>Die rote Kathedrale</em> mochten</td>
<td style="border: 1px solid #ddd; padding: 8px 14px;">&nbsp;</td>
</tr>
</tbody>
</table>
</div>'''
if old1 in text:
text = text.replace(old1, new1)
print("✓ Table 1 replaced")
else:
print("✗ Table 1 NOT FOUND. Searching...")
idx = text.find('Für wen ist das Spiel')
if idx >= 0:
print(f" Found at position {idx}")
print(f" Context: {repr(text[idx:idx+300])}")
# ── 3. Patch Table 2: "Die nackten Zahlen" ────────────────
old2 = '<h2>Die nackten Zahlen</h2>\r\n<table>\r\n<tbody>\r\n<tr>\r\n<td><strong>BGG-Rating</strong></td>\r\n<td>8.1 / 10</td>\r\n</tr>\r\n<tr>\r\n<td><strong>BGG-Weight</strong></td>\r\n<td>3.06 / 5 (Kennerspiel)</td>\r\n</tr>\r\n<tr>\r\n<td><strong>Spieler</strong></td>\r\n<td>14 (am besten: 23)</td>\r\n</tr>\r\n<tr>\r\n<td><strong>Dauer</strong></td>\r\n<td>ca. 6080 Minuten</td>\r\n</tr>\r\n<tr>\r\n<td><strong>Designer</strong></td>\r\n<td>Shei S. &amp; Isra C. (auch <em>Die rote Kathedrale</em>)</td>\r\n</tr>\r\n<tr>\r\n<td><strong>Verlag</strong></td>\r\n<td>KOSMOS</td>\r\n</tr>\r\n</tbody>\r\n</table>'
new2 = '''<div class="bsn-infobox">
<h2>Die nackten Zahlen</h2>
<table style="border-collapse: collapse; width: 100%; font-size: 0.95rem;">
<tbody>
<tr style="background: #f0f4ff;">
<td style="border: 1px solid #ccc; padding: 10px 14px; font-weight: bold; color: #20228a; width: 30%;"><strong>BGG-Rating</strong></td>
<td style="border: 1px solid #ddd; padding: 10px 14px;">8.1 / 10</td>
</tr>
<tr>
<td style="border: 1px solid #ccc; padding: 10px 14px; font-weight: bold; color: #20228a;"><strong>BGG-Weight</strong></td>
<td style="border: 1px solid #ddd; padding: 10px 14px;">3.06 / 5 (Kennerspiel)</td>
</tr>
<tr>
<td style="border: 1px solid #ccc; padding: 10px 14px; font-weight: bold; color: #20228a;"><strong>Spieler</strong></td>
<td style="border: 1px solid #ddd; padding: 10px 14px;">14 (am besten: 23)</td>
</tr>
<tr>
<td style="border: 1px solid #ccc; padding: 10px 14px; font-weight: bold; color: #20228a;"><strong>Dauer</strong></td>
<td style="border: 1px solid #ddd; padding: 10px 14px;">ca. 6080 Minuten</td>
</tr>
<tr>
<td style="border: 1px solid #ccc; padding: 10px 14px; font-weight: bold; color: #20228a;"><strong>Designer</strong></td>
<td style="border: 1px solid #ddd; padding: 10px 14px;">Shei S. &amp; Isra C. (auch <em>Die rote Kathedrale</em>)</td>
</tr>
<tr>
<td style="border: 1px solid #ccc; padding: 10px 14px; font-weight: bold; color: #20228a;"><strong>Verlag</strong></td>
<td style="border: 1px solid #ddd; padding: 10px 14px;">KOSMOS</td>
</tr>
</tbody>
</table>
</div>'''
if old2 in text:
text = text.replace(old2, new2)
print("✓ Table 2 replaced")
else:
print("✗ Table 2 NOT FOUND. Searching...")
idx = text.find('Die nackten Zahlen')
if idx >= 0:
print(f" Found at position {idx}")
print(f" Context: {repr(text[idx:idx+300])}")
# ── 4. PATCH back ─────────────────────────────────────────
payload = json.dumps({"text": text}).encode()
req = urllib.request.Request(f"{BASE}/15385", data=payload, method="PATCH", headers={
"X-Joomla-Token": TOKEN,
"Accept": "application/vnd.api+json",
"Content-Type": "application/json"
})
resp = urllib.request.urlopen(req)
result = json.loads(resp.read())
print(f"PATCH status: {resp.status}")
print(f"Updated: {result.get('data',{}).get('id')}")