Scraper SL: Saarland (Eigensystem, Wahl 2027-04-18) #19
Labels
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: tobias/gwoe-antragspruefer#19
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wahltermin
2027-04-18 — Saarland (SL), aktuell 17. Wahlperiode.
Backend
Eigensystemsl17/1234Adapter-Strategie
Eigensystem — kein etablierter Adapter wiederverwendbar. Nächster Schritt: HTML-Form bzw. JSON-API der Drucksachen-Suche auf landtag-saar.de reverse-engineeren. Achtung: dokukratie-Scraper
slals Referenz, aber er nutzt evtl. Memorious-spezifische Pfade.Was zu tun ist
webapp/app/parlamente.pyimplementieren — entweder als neue Subklasse vonParlamentAdapteroder als zweiter Registry-Eintrag eines existierenden parametrisierbaren Adapters.ADAPTERS-Registry am Ende der Datei.ADAPTERS["SL"].search("Schule", limit=10)liefert echte Anträge mit Datum + Fraktionen, sortiert newest-first.Hängt mit … zusammenunten) — dieses Issue ist nur der Adapter selbst, nicht das Indexieren der Wahlprogramme oder das Frontend-aktiv-Setzen.Akzeptanzkriterien
parlamente.py::ADAPTERS["SL"]existiert und ist instanziierbarsearch(query="Schule", limit=10)liefert ≥3 echte Drucksachen mit korrektem Datum, Fraktionen, PDF-Linkget_document(drucksache)für eine reale Drucksache der laufenden WP liefert das Dokument zurückdownload_text(drucksache)extrahiert Text aus dem PDFHinweise aus dokukratie/sl.yml
Backend ist NICHT eUI/StarWeb/ParlDok, sondern ein Umbraco-CMS mit JSON-API:
https://www.landtag-saar.de/umbraco/aawSearchSurfaceController/SearchSurface/GetSearchResults//vorgaenge/{operation_id}(.//div[@class="operation-file-download"])[last()]Adapter-Empfehlung: komplett eigene Implementierung, nicht mit anderen teilbar. Ähnlichste Vorlage ist der
ParLDokAdapter(#4) wegen der zweistufigen JSON-API. Pagination viaPagination.Skip/Pagination.Take.Resolved (2026-04-10) — Adapter live, Sub-D-Smoke-Test grün
Implementation in
6dfcd69. Schema-Discovery dank User-HAR-Capture (TEMP/www.landtag-saar.de.har).Endpoint
POST /umbraco/aawSearchSurfaceController/SearchSurface/GetSearchResults/
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 mit rohem JSON im Body (Kendo-Konvention von $.ajax ohne expliziten contentType — der Server akzeptiert es trotzdem).
Body-Schema (PFLICHT minimal)
Gotcha: Sections={} muss leer sein. Sobald ich Sections.Print=true etc. gesetzt habe (wie es die JS-App im Frontend macht!), antwortet der Server mit HTTP 500 und einer generischen "An error occurred while processing your request."-Meldung. Erst der HAR-Capture hat gezeigt, dass die JS-App in der echten Session ebenfalls Sections:{} schickt — die Section-Konfiguration läuft client-seitig über Kendo-Filter.
Response-Mapping
Akzeptanzkriterien
Tests + Deploy
6dfcd69)Closing.