Migration der letzten 200 Artikel inkl. Quellen-Extraktion ins neue Format #17

Closed
opened 2026-07-07 10:06:25 +02:00 by kreativmonkey · 1 comment

Der Archiv-Import soll vervollständigt werden: die restlichen ~200 Bestandsartikel aus der alten ProcessWire-Seite ins Hugo-Format bringen — inkl. Extraktion der Quellen ins strukturierte quellen-Frontmatter.

Kontext / Quelle

  • Lokale PW-Kopie: Container mta-r-db (MariaDB), Zugangsdaten in ~/mta-r-local/www/site/config.php (dbName/User/Pass d01f45e2). Read-only lesen.
  • Artikel liegen als pages + field_body, Slug = pages.name. Bereits im PoC: 7 Archiv-Artikel + 1 Republish (Zielformat als Vorlage in poc-hugo-sveltia/content/blog/*.md).
  • Zielformat pro Artikel (Frontmatter): title, date, authors: [<kuerzel>], bild (falls vorhanden), archiviert: true, body (Markdown). Quellen NICHT im Fließtext, sondern als:
    quellen:
      - text: "…"
        url: "…"   # optional
    
    Rendering übernimmt single.html (nummerierte Liste). Die [1]-Verweise im Text sollen zur Listenposition passen.

Aufgabe

  • Reproduzierbares Migrationsskript (scripts/, stdlib-orientiert wie import_pw_comments.py) das die fehlenden ~200 Artikel exportiert; HTML→Markdown sauber konvertieren; Quellen/Referenzen am Artikelende erkennen und ins quellen-Feld heben (heuristisch, verlustfrei — im Zweifel Quelle als text ohne url).
  • Autoren-Kürzel mappen (bestehende content/authors/), Bilder-Pfade wie bei den vorhandenen Archiv-Artikeln.
  • Kein Content-Verlust; Slugs = alte URLs (für Redirects #10). Kommentare docken automatisch über den Slug an (data/comments.json).

Ergebnis in diesem Issue festhalten: Skript, Anzahl migrierter Artikel, wie viele Quellen extrahiert/als Rest belassen, offene Fälle.

Bearbeitung: Hintergrund-Subagent, Modell Sonnet (hochvolumiges ETL). Branch + PR gegen poc-hugo-sveltia.

Der Archiv-Import soll vervollständigt werden: die restlichen ~200 Bestandsartikel aus der alten ProcessWire-Seite ins Hugo-Format bringen — **inkl. Extraktion der Quellen** ins strukturierte `quellen`-Frontmatter. **Kontext / Quelle** - Lokale PW-Kopie: Container `mta-r-db` (MariaDB), Zugangsdaten in `~/mta-r-local/www/site/config.php` (dbName/User/Pass `d01f45e2`). Read-only lesen. - Artikel liegen als `pages` + `field_body`, Slug = `pages.name`. Bereits im PoC: 7 Archiv-Artikel + 1 Republish (Zielformat als Vorlage in `poc-hugo-sveltia/content/blog/*.md`). - **Zielformat** pro Artikel (Frontmatter): `title`, `date`, `authors: [<kuerzel>]`, `bild` (falls vorhanden), `archiviert: true`, `body` (Markdown). Quellen NICHT im Fließtext, sondern als: ```yaml quellen: - text: "…" url: "…" # optional ``` Rendering übernimmt `single.html` (nummerierte Liste). Die `[1]`-Verweise im Text sollen zur Listenposition passen. **Aufgabe** - Reproduzierbares Migrationsskript (`scripts/`, stdlib-orientiert wie `import_pw_comments.py`) das die fehlenden ~200 Artikel exportiert; HTML→Markdown sauber konvertieren; Quellen/Referenzen am Artikelende erkennen und ins `quellen`-Feld heben (heuristisch, verlustfrei — im Zweifel Quelle als `text` ohne `url`). - Autoren-Kürzel mappen (bestehende `content/authors/`), Bilder-Pfade wie bei den vorhandenen Archiv-Artikeln. - **Kein Content-Verlust**; Slugs = alte URLs (für Redirects #10). Kommentare docken automatisch über den Slug an (`data/comments.json`). **Ergebnis in diesem Issue festhalten:** Skript, Anzahl migrierter Artikel, wie viele Quellen extrahiert/als Rest belassen, offene Fälle. _Bearbeitung: Hintergrund-Subagent, Modell Sonnet (hochvolumiges ETL). Branch + PR gegen `poc-hugo-sveltia`._
Author
Owner

Umsetzung abgeschlossen

PR: MT-R/poc-hugo-sveltia#3 — Branch feat/migrate-articles

Skript

scripts/migrate_pw_articles.py — idempotent, reproduzierbar, stdlib + pandoc.

Steuerung via Env-Variablen:

  • MTAR_LIMIT (default: 200) — Anzahl zu migrierender Artikel
  • MTAR_OFFSET — Überspringen der N neuesten Artikel
  • MTAR_DRY_RUN — nur zählen, nichts schreiben

Für alle ~721 Artikel: MTAR_LIMIT=721 nix develop --command python3 scripts/migrate_pw_articles.py

Interpretation „letzte 200 Artikel"

Die 200 neuesten noch nicht migrierten Artikel nach field_publish_date DESC (Fallback: pages.created). Das Skript kann generalisiert alle 721 Artikel verarbeiten.

Ergebnisse

Kennzahl Wert
Migrierte Artikel 200
Davon mit quellen-Frontmatter 90
Quellen inline belassen (kein Abschnitt erkannt) 110
Hugo-Build-Seiten 221
Hugo-Build-Fehler 0

Quellen-Extraktion

Heuristik: letzte 60 Zeilen des Artikels werden auf Quelle[n]:, **Quelle**, ## Quellen u. ä. geprüft. Bei Fund wird der gesamte Abschnitt aus dem Body entfernt und ins quellen-Frontmatter übertragen (je {text, url?}). Pandoc-Link-Titel werden korrekt abgeschnitten.

Einschränkungen:

  • Quellen ganz am Anfang (ungewöhnliche Struktur, z. B. aktualisierte-empfehlung-patientenschutzmittel) erscheinen sowohl im Body als auch im Frontmatter — doppelt, aber kein Verlust.
  • Sehr unstrukturierte Quellen-Verweise (z. B. nur Fließtext ohne Keyword „Quelle") bleiben inline.

Autoren-Mapping

PW-Benutzername Hugo-Kürzel Artikel Anmerkung
kszeifert kszeifert ~170 Direkt gemappt
rockpop kszeifert 16 Fallback – unbekannter Nutzer
adrianadamiok kszeifert 4 Fallback – unbekannter Nutzer
kreativmonkey kszeifert 2 Fallback – unbekannter Nutzer
ap kszeifert 1 Fallback – unbekannter Nutzer
djxray kszeifert 1 Fallback – unbekannter Nutzer
quinsten kszeifert 1 Fallback – unbekannter Nutzer

Falls weitere Hugo-Autoren-Seiten für diese Nutzer angelegt werden sollen, kann AUTHOR_MAP im Skript einfach ergänzt werden.

Offene Punkte

  • Bilder: bild-Frontmatter verweist auf /bilder/<slug>/<dateiname> — die Bilder selbst sind nicht migriert (liegen in PW unter /site/assets/files/<id>/). Inline-Bilder im Body behalten ihre PW-URLs.
  • Kommentare: Andockung über Slug aus data/comments.json funktioniert automatisch — nichts extra nötig.
  • Verbleibende 521 Artikel: mit MTAR_LIMIT=721 (oder schrittweise via OFFSET) auf denselben Stand bringen.
## Umsetzung abgeschlossen PR: MT-R/poc-hugo-sveltia#3 — Branch `feat/migrate-articles` ### Skript `scripts/migrate_pw_articles.py` — idempotent, reproduzierbar, stdlib + pandoc. Steuerung via Env-Variablen: - `MTAR_LIMIT` (default: 200) — Anzahl zu migrierender Artikel - `MTAR_OFFSET` — Überspringen der N neuesten Artikel - `MTAR_DRY_RUN` — nur zählen, nichts schreiben Für alle ~721 Artikel: `MTAR_LIMIT=721 nix develop --command python3 scripts/migrate_pw_articles.py` ### Interpretation „letzte 200 Artikel" Die 200 **neuesten** noch nicht migrierten Artikel nach `field_publish_date DESC` (Fallback: `pages.created`). Das Skript kann generalisiert alle 721 Artikel verarbeiten. ### Ergebnisse | Kennzahl | Wert | |---|---| | Migrierte Artikel | **200** | | Davon mit `quellen`-Frontmatter | **90** | | Quellen inline belassen (kein Abschnitt erkannt) | **110** | | Hugo-Build-Seiten | **221** | | Hugo-Build-Fehler | **0** | ### Quellen-Extraktion Heuristik: letzte 60 Zeilen des Artikels werden auf `Quelle[n]:`, `**Quelle**`, `## Quellen` u. ä. geprüft. Bei Fund wird der gesamte Abschnitt aus dem Body entfernt und ins `quellen`-Frontmatter übertragen (je `{text, url?}`). Pandoc-Link-Titel werden korrekt abgeschnitten. Einschränkungen: - Quellen ganz am Anfang (ungewöhnliche Struktur, z. B. `aktualisierte-empfehlung-patientenschutzmittel`) erscheinen sowohl im Body als auch im Frontmatter — doppelt, aber kein Verlust. - Sehr unstrukturierte Quellen-Verweise (z. B. nur Fließtext ohne Keyword „Quelle") bleiben inline. ### Autoren-Mapping | PW-Benutzername | Hugo-Kürzel | Artikel | Anmerkung | |---|---|---|---| | `kszeifert` | `kszeifert` | ~170 | Direkt gemappt | | `rockpop` | `kszeifert` | 16 | Fallback – unbekannter Nutzer | | `adrianadamiok` | `kszeifert` | 4 | Fallback – unbekannter Nutzer | | `kreativmonkey` | `kszeifert` | 2 | Fallback – unbekannter Nutzer | | `ap` | `kszeifert` | 1 | Fallback – unbekannter Nutzer | | `djxray` | `kszeifert` | 1 | Fallback – unbekannter Nutzer | | `quinsten` | `kszeifert` | 1 | Fallback – unbekannter Nutzer | Falls weitere Hugo-Autoren-Seiten für diese Nutzer angelegt werden sollen, kann `AUTHOR_MAP` im Skript einfach ergänzt werden. ### Offene Punkte - **Bilder**: `bild`-Frontmatter verweist auf `/bilder/<slug>/<dateiname>` — die Bilder selbst sind nicht migriert (liegen in PW unter `/site/assets/files/<id>/`). Inline-Bilder im Body behalten ihre PW-URLs. - **Kommentare**: Andockung über Slug aus `data/comments.json` funktioniert automatisch — nichts extra nötig. - **Verbleibende 521 Artikel**: mit `MTAR_LIMIT=721` (oder schrittweise via OFFSET) auf denselben Stand bringen.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
MT-R/PoC-mt-r#17
No description provided.