fix: QC-Ratings aus 7 älteren Artikeln entfernt (CHECK 10)
This commit is contained in:
@@ -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>2–3 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> </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;">2–3 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;"> </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>1–4 (am besten: 2–3)</td>\r\n</tr>\r\n<tr>\r\n<td><strong>Dauer</strong></td>\r\n<td>ca. 60–80 Minuten</td>\r\n</tr>\r\n<tr>\r\n<td><strong>Designer</strong></td>\r\n<td>Shei S. & 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;">1–4 (am besten: 2–3)</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. 60–80 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. & 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')}")
|
||||
Reference in New Issue
Block a user