Scraper RP: Rheinland-Pfalz (StarWeb, Wahl 2031-03-22) #30

Closed
opened 2026-04-08 22:22:12 +02:00 by tobias · 2 comments
Owner

Wahltermin

2031-03-22 — Rheinland-Pfalz (RP), aktuell 18. Wahlperiode.

Backend

Feld Wert
Doku-System StarWeb
Base-URL https://opal.rlp.de
dokukratie-Scraper rp
Drucksachen-Format 18/12345

Adapter-Strategie

StarWeb (6/6) — Wiederverwendung. Achtung: opal.rlp.de hat denselben Markennamen wie NRW OPAL, ist aber eine andere Implementierung (StarWeb-basiert). Nicht den NRWAdapter wiederverwenden.

Was zu tun ist

  1. Live-Backend anschauen — falls SPA, HAR-Trace einer realen Suche aus DevTools ziehen (siehe Vorgehen in #12 für ParlDok bzw. #13 für eUI).
  2. Adapter in webapp/app/parlamente.py implementieren — entweder als neue Subklasse von ParlamentAdapter oder als zweiter Registry-Eintrag eines existierenden parametrisierbaren Adapters.
  3. Eintrag in der ADAPTERS-Registry am Ende der Datei.
  4. Smoke-Test lokal: ADAPTERS["RP"].search("Schule", limit=10) liefert echte Anträge mit Datum + Fraktionen, sortiert newest-first.
  5. Aktivierung via Folge-Issue (siehe Hängt mit … zusammen unten) — dieses Issue ist nur der Adapter selbst, nicht das Indexieren der Wahlprogramme oder das Frontend-aktiv-Setzen.

Akzeptanzkriterien

  • parlamente.py::ADAPTERS["RP"] existiert und ist instanziierbar
  • search(query="Schule", limit=10) liefert ≥3 echte Drucksachen mit korrektem Datum, Fraktionen, PDF-Link
  • get_document(drucksache) für eine reale Drucksache der laufenden WP liefert das Dokument zurück
  • download_text(drucksache) extrahiert Text aus dem PDF
  • Folge-Issue für Frontend-Aktivierung verlinkt
## Wahltermin **2031-03-22** — Rheinland-Pfalz (RP), aktuell 18. Wahlperiode. ## Backend | Feld | Wert | |---|---| | Doku-System | `StarWeb` | | Base-URL | https://opal.rlp.de | | dokukratie-Scraper | `rp` | | Drucksachen-Format | `18/12345` | ## Adapter-Strategie **StarWeb (6/6)** — Wiederverwendung. Achtung: `opal.rlp.de` hat denselben Markennamen wie NRW OPAL, ist aber eine andere Implementierung (StarWeb-basiert). Nicht den NRWAdapter wiederverwenden. ## Was zu tun ist 1. Live-Backend anschauen — falls SPA, HAR-Trace einer realen Suche aus DevTools ziehen (siehe Vorgehen in #12 für ParlDok bzw. #13 für eUI). 2. Adapter in `webapp/app/parlamente.py` implementieren — entweder als neue Subklasse von `ParlamentAdapter` oder als zweiter Registry-Eintrag eines existierenden parametrisierbaren Adapters. 3. Eintrag in der `ADAPTERS`-Registry am Ende der Datei. 4. Smoke-Test lokal: `ADAPTERS["RP"].search("Schule", limit=10)` liefert echte Anträge mit Datum + Fraktionen, sortiert newest-first. 5. Aktivierung via Folge-Issue (siehe `Hängt mit … zusammen` unten) — dieses Issue ist nur der Adapter selbst, nicht das Indexieren der Wahlprogramme oder das Frontend-aktiv-Setzen. ## Akzeptanzkriterien - [ ] `parlamente.py::ADAPTERS["RP"]` existiert und ist instanziierbar - [ ] `search(query="Schule", limit=10)` liefert ≥3 echte Drucksachen mit korrektem Datum, Fraktionen, PDF-Link - [ ] `get_document(drucksache)` für eine reale Drucksache der laufenden WP liefert das Dokument zurück - [ ] `download_text(drucksache)` extrahiert Text aus dem PDF - [ ] Folge-Issue für Frontend-Aktivierung verlinkt
Author
Owner

Hinweise aus dokukratie/rp.yml

StarWeb-Servlet (OPAL_extern — nicht zu verwechseln mit NRW OPAL!):

  • Endpoint: https://opal.rlp.de/starweb/OPAL_extern/servlet.starweb?path=OPAL_extern/PDOKU.web
  • Start-URL: https://opal.rlp.de/starweb/OPAL_extern/index.htm
  • Form-Felder:
    • 02_PDOKU_WP
    • 05_PDOKU_DTYP
    • 06_PDOKU_FASTDATV / 07_PDOKU_FASTDATB
    • 03_PDOKU_DART=D
    • __action=21,52
  • Items: .//tbody[@name="RecordRepeater"]
  • Title: .//tr[@name="Repeat_WHET"]/td/b
  • PDF: .//tr[@name="Repeat_Fund"]//div[@class="fundstelle"]//a[@title="Gesamtdokument"]/@href
  • Pagination: .//div[@id="seitenzahl"]//span[@name="NextRecsConditional"]
  • Schlagworte: .//a[@name="ThesaurusLink"]/text()

Synergie: Wiederverwendung StarWebAdapter aus #27. RP nutzt _PDOKU_*-Field-Präfixe statt _LISSH_* von BB/HB — Field-Map im Adapter konfigurierbar machen.

Achtung: RP opal.rlp.de darf nicht mit dem NRW OPAL verwechselt werden — Markenname ist gleich, aber das eine ist StarWeb-basiert (RP), das andere eine eigene OPAL-Implementation (NRW). Den NRWAdapter NICHT für RP wiederverwenden.

## Hinweise aus dokukratie/rp.yml **StarWeb-Servlet** (OPAL_extern — nicht zu verwechseln mit NRW OPAL!): - Endpoint: `https://opal.rlp.de/starweb/OPAL_extern/servlet.starweb?path=OPAL_extern/PDOKU.web` - Start-URL: `https://opal.rlp.de/starweb/OPAL_extern/index.htm` - Form-Felder: - `02_PDOKU_WP` - `05_PDOKU_DTYP` - `06_PDOKU_FASTDATV` / `07_PDOKU_FASTDATB` - `03_PDOKU_DART=D` - `__action=21,52` - Items: `.//tbody[@name="RecordRepeater"]` - Title: `.//tr[@name="Repeat_WHET"]/td/b` - PDF: `.//tr[@name="Repeat_Fund"]//div[@class="fundstelle"]//a[@title="Gesamtdokument"]/@href` - Pagination: `.//div[@id="seitenzahl"]//span[@name="NextRecsConditional"]` - Schlagworte: `.//a[@name="ThesaurusLink"]/text()` **Synergie:** Wiederverwendung `StarWebAdapter` aus #27. RP nutzt `_PDOKU_*`-Field-Präfixe statt `_LISSH_*` von BB/HB — Field-Map im Adapter konfigurierbar machen. **Achtung:** RP `opal.rlp.de` darf nicht mit dem **NRW OPAL** verwechselt werden — Markenname ist gleich, aber das eine ist StarWeb-basiert (RP), das andere eine eigene OPAL-Implementation (NRW). Den `NRWAdapter` NICHT für RP wiederverwenden.
tobias added the
phase-2
scraper
labels 2026-04-08 23:16:38 +02:00
Author
Owner

Erledigt in 02ff142.

Riesige Überraschung aus dem HAR-Trace: RP ist NICHT StarWeb wie in dokukratie und bundeslaender.py klassifiziert, sondern läuft auf dem portala/eUI-Backend (gleich wie LSA/BE/BW). Endpoint /portal/browse.tt.json mit db_id=rlp.lissh. Das alte StarWeb-Frontend ist nur Legacy.

Damit ist der vermeintliche "StarWebAdapter-Template"-Ansatz hinfällig — der existierende PortalaAdapter aus #2/#3 ist mit ein paar zusätzlichen Konstruktor-Parametern (nichts für RP, ein paar mehr für HE) direkt wiederverwendbar.

Adapter-Erweiterungen

Im PortalaAdapter zwei neue Konstruktor-Parameter mit backward-kompatiblen Defaults:

  • typ_filter: Optional[str] = "DOKDBE" — wenn None, wird die TYP-Klausel weggelassen (HE rejected DOKDBE)
  • omit_date_filter: bool = False — wenn True, kein DAT/DDAT/SDAT-Term (HE braucht das)

Plus _RE_BE_DATUM erweitert: vorher nur vom DD.MM.YYYY, jetzt fallback auf plain Datum (BB schreibt das Datum vor der Drucksachen-Nummer ohne 'vom'-Marker).

Smoke-Test

RP q="":       5–6 hits in ~5s
RP q="Schule": 5–6 hits, alle echt schul-bezogen

Akzeptanzkriterien

  • parlamente.py::ADAPTERS["RP"] existiert
  • search(query="Schule", limit=10) liefert echte Drucksachen mit Datum, Fraktionen, PDF-Link
  • Folge-Issue #42 für Frontend-Aktivierung verlinkt

Phase-2-Status (#49)

  • #27 BB (02ff142) — portala statt StarWeb, PortalaAdapter-reuse
  • #20 SH (f82c60e) — StarFinderCGIAdapter, eigenständig
  • #30 RP (02ff142) — analog BB
  • #21 HB — kein /portal/-Endpoint, bleibt StarWeb-Servlet, braucht eigenen HAR-Trace
  • #22 NI — nilas/portal ist Login-protected, deferred
  • #24 HE — portala-Backend erreichbar, aber HE-Card-Layout ist anders (Title direkt im h3, kein span-Wrapper, kein span.h6 für Meta), eigener Parser-Pfad nötig
Erledigt in 02ff142. Riesige Überraschung aus dem HAR-Trace: RP ist NICHT StarWeb wie in dokukratie und bundeslaender.py klassifiziert, sondern läuft auf dem **portala/eUI-Backend** (gleich wie LSA/BE/BW). Endpoint `/portal/browse.tt.json` mit `db_id=rlp.lissh`. Das alte StarWeb-Frontend ist nur Legacy. Damit ist der vermeintliche "StarWebAdapter-Template"-Ansatz hinfällig — der existierende **PortalaAdapter** aus #2/#3 ist mit ein paar zusätzlichen Konstruktor-Parametern (nichts für RP, ein paar mehr für HE) direkt wiederverwendbar. ## Adapter-Erweiterungen Im PortalaAdapter zwei neue Konstruktor-Parameter mit backward-kompatiblen Defaults: - `typ_filter: Optional[str] = "DOKDBE"` — wenn None, wird die TYP-Klausel weggelassen (HE rejected DOKDBE) - `omit_date_filter: bool = False` — wenn True, kein DAT/DDAT/SDAT-Term (HE braucht das) Plus _RE_BE_DATUM erweitert: vorher nur `vom DD.MM.YYYY`, jetzt fallback auf plain Datum (BB schreibt das Datum vor der Drucksachen-Nummer ohne 'vom'-Marker). ## Smoke-Test ``` RP q="": 5–6 hits in ~5s RP q="Schule": 5–6 hits, alle echt schul-bezogen ``` ## Akzeptanzkriterien - [x] `parlamente.py::ADAPTERS["RP"]` existiert - [x] `search(query="Schule", limit=10)` liefert echte Drucksachen mit Datum, Fraktionen, PDF-Link - [x] Folge-Issue #42 für Frontend-Aktivierung verlinkt ## Phase-2-Status (#49) - [x] **#27 BB** (02ff142) — portala statt StarWeb, PortalaAdapter-reuse - [x] **#20 SH** (f82c60e) — StarFinderCGIAdapter, eigenständig - [x] **#30 RP** (02ff142) — analog BB - [ ] **#21 HB** — kein /portal/-Endpoint, bleibt StarWeb-Servlet, braucht eigenen HAR-Trace - [ ] **#22 NI** — nilas/portal ist Login-protected, deferred - [ ] **#24 HE** — portala-Backend erreichbar, aber HE-Card-Layout ist anders (Title direkt im h3, kein span-Wrapper, kein span.h6 für Meta), eigener Parser-Pfad nötig
Sign in to join this conversation.
No description provided.