Scraper SH: Schleswig-Holstein (StarWeb, Wahl 2027-04-18) #20
Labels
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: tobias/gwoe-antragspruefer#20
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 — Schleswig-Holstein (SH), aktuell 20. Wahlperiode.
Backend
StarWebsh20/1234Adapter-Strategie
StarWeb (1/6) — die anderen StarWeb-Bundesländer sind NI, HE, TH, BB, RP. Wenn das SH-Issue zuerst angegangen wird, soll der Adapter als generischer StarWebAdapter mit Konstruktor-Parametern (
base_url,wahlperiode,drucksache_format,db_id) entstehen, sodass die anderen 5 Bundesländer nur einen Registry-Eintrag brauchen — analog zur PortalaAdapter-Wiederverwendung für LSA+BE.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["SH"].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["SH"]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/sh.yml
Backend ist alte Starfinder-CGI (anders als die anderen 5 StarWeb-Bundesländer!):
http://lissh.lvn.parlanet.de/cgi-bin/starfinder/0?path=lisshfl.txt&id=FASTLINK&pass=&search=WP%3d{wp}+AND+dtyp%3dkleine&format=WEBKURZFLWP=20 AND dtyp=kleine(URL-encoded), FormatWEBKURZFL.//table[@class='tabcol']//tr.//td[2]/b/text()<td>-Block via Regex:Synergie-Korrektur: SH ist NICHT die richtige StarWeb-Vorlage, weil es nicht das moderne
servlet.starweb?path=...&__action=N-Schema nutzt. Die anderen 5 StarWeb-BL (BB, HE, NI, RP, HB) haben das modernere Servlet — also lieber #27 BB als StarWeb-Template nehmen, nicht SH. SH bekommt einen eigenständigenStarFinderCGIAdapter.Erledigt in
f82c60e.SH läuft auf der ältesten der vier Backend-Familien: Starfinder-CGI auf
lissh.lvn.parlanet.de. Im Gegensatz zum modernen StarWeb-Servlet (BB/HE/NI/RP/HB) ist es URL-basiert und stateless — eine GET-Anfrage genügt, kein mehrstufiges Form-POST. Eigener AdapterStarFinderCGIAdapter(analog zu PARLISAdapter aus #29 — eigenständige Klasse statt Subklasse, weil Schema fundamental anders).Endpoint
Hit-Format
Pro
<tr class="tabcol|tabcol2|tabcol3">:Edge-Cases
resp.contentexplizit alslatin-1.\bSSW\banalog zu\bAfD\b.(term)-Syntax im starfinder-search-Param wird vom Server nicht als Volltext interpretiert.Smoke-Test
Lokal:
Live auf https://gwoe.toppyr.de/api/search-landtag?q=Schule&bundesland=SH:
Akzeptanzkriterien
parlamente.py::ADAPTERS["SH"]existiert und ist instanziierbarsearch(query="Schule", limit=10)liefert echte Drucksachen mit korrektem Datum, Fraktionen, PDF-Linkget_document(drucksache)funktioniertdownload_text(drucksache)funktioniertPhase-2-Status (#49)
__action-Code-Pattern, das ohne HAR-Trace nicht klar reverse-engineerbar war (Probing mit 74/112/201/78/75/76/108 lieferte 500/leer)f82c60e) ← dieser Commit — Starfinder-CGI ist eigenständig und URL-basiertEmpfehlung: vor #27 BB einen HAR-Trace gegen die Live-Form auf
parlamentsdokumentation.brandenburg.deziehen (analog zu PARLIS in #29). Dann ist der StarWebAdapter ein 4-Stunden-Job; ohne HAR mehrere Tage Trial-and-Error.