Meine Stadt auf Politik bei Uns
Politik bei Uns ist eine offene Plattform, bei grundsätzlich jede Stadt online gehen kann. Das einzige, was dafür benötigt wird, ist ein funktionierender Scraper mitsamt der Konfiguration.
Der Scraper
In dem OpenRIS-Scraper Projekt hier auf Github befindet sich ein Scraper, welcher SessionNet (ASP und PHP) sowie in einer frühen Alpha auch AllRis unterstützt. Um eine Stadt mit diesen beiden Ratsinformationssystemen online zu bringen, brauchen wir also diesen Scraper, um die Konfiguration zu erstellen.
Eine Installationsanleitung mitsamt eines Installer Scriptes für Scraper und Webinterface findet sich ebenfalls auf Github. Wenn die Stadt ein anderes RIS einsetzt, muss das passende Scraper-Modul dazu erst entwickelt werden. Dort freuen wir uns auf Code!
Die Scraperkonfiguration
Die Konfiguration befindet sich in der MongoDB und kann über http://ubunturechner:23000/admin/bodies in einem Webinterface verändert werden.
Basiskonfiguration
Diese Werte müssen in jedem Fall angepasst werden.
- "county" - der Landkreis, bei einer kreisfreien Stadt die Stadt selbst.
- "base_url" - die Original URL, also z.B. bei Bochum "https://session.bochum.de/bi/"
- "type" - der Typus. Im Moment funktionieren "sessionnet-asp" und "sessionnet-php"
- "name" - Name der Stadt
- "rgs" - Regionalschlüssel der Stadt, eine 10stellige Nummer. Findet man via Google, 059110000000 für Bochum
Dereferenzierungen
Um die Daten zu vereinheitlichen, müssen einige Daten dereferenziert werden. Dies geschieht in den Variablen "result_strings", "party_alias" und "paper_type_strings".
result_strings
Diese Variable beinhaltet die Ergebnisse von einzelnen Beratungen. Städte sind recht kreativ in der Beschreibung der Ergebnisse, meist können die Beratungsergebnisse aber vereinheitlicht werden. Erwartet wird eine Liste aus Listen, welche in der ersten Position den Original-String, in der zweiten Position den abstrahierten String haben. Zum Beispiel für Bochum:
"result_strings": [
[
"Die Anfrage wird schriftlich beantwortet.",
"ANFRAGE_ANTWORT_SCHRIFTLICH"
],
[
"Die Anfrage ist schriftlich beantwortet worden.",
"ANFRAGE_BEANTWORTET_SCHRIFTLICH"
],
[
"Die Anfrage ist mündlich beantwortet worden.",
"ANFRAGE_BEANTWORTET_MUENDLICH"
],
[
"Die Anfrage ist zurückgezogen worden.",
"ANFRAGE_RUECKZUG"
],
[
"Die Mitteilung wird zur Kenntnis genommen.",
"MITTEILUNG_KENNTNIS"
],
[
"Die Vorlage wird ohne Votum weitergeleitet.",
"VORLAGE_WEITERLEITUNG"
],
[
"Die Entscheidung über die Vorlage wird zurückgestellt.",
"VORLAGE_ZUERUECKGESTELLT"
],
[
"Die Verwaltung zieht die Vorlage zurück.",
"VORLAGE_RUECKZUG_VERWALTUNG"
],
[
"Die Vorlage wird zurück überwiesen.",
"VORLAGE_UEBERWEISUNG_ZURUECK"
],
[
"Die Vorlage wird an x überwiesen.",
"VORLAGE_UEBERWEISUNG"
],
[
"Die Vorlage wird von der Tagesordnung abgesetzt.",
"VORLAGE_ABGESETZT"
],
[
"Der Antrag wird zurückgezogen.",
"ANTRAG_RUECKZUG"
],
[
"Der Antrag ist gegenstandslos, daher keine Abstimmung.",
"ANTRAG_GEGENSTANSLOS"
],
[
"kein Beratungsergebnis",
"BERATUNG_ERGEBNISLOS"
],
[
"Die Beratung der Vorlage wird zurückgestellt.",
"BERATUNG_ZUERUCKGESTELLT"
],
[
"Die Beschlussfassung wird teilweise zurückgestellt.",
"BESCHLUSS_ZURUECKGESTELLT_TEILWEISE"
],
[
"Die Abstimmung erfolgte getrennt nach Unterpunkten.",
"ABSTIMMUNG_UNTERPUNKTE"
],
[
"Abstimmungsergebnis: Einstimmig nach Beschlussvorschlag",
"BESCHLOSSEN_EINSTIMMIG"
],
[
"Abstimmungsergebnis: Einstimmig nach Ergänzung des Beschlussvorschlages",
"BESCHLOSSEN_EINSTIMMIG_ERGAENZUNG"
],
[
"Abstimmungsergebnis: Einstimmig nach Änderung des Beschlussvorschlages",
"BESCHLOSSEN_EINSTIMMIG_AENDERUNG"
],
[
"Abstimmungsergebnis: Mehrheitlich nach Beschlussvorschlag",
"BESCHLOSSEN_MEHRHEIT"
],
[
"Abstimmungsergebnis: Mehrheitlich nach Ergänzung des Beschlussvorschlages",
"BESCHLOSSEN_MEHRHEIT_ERGAENZUNG"
],
[
"Abstimmungsergebnis: Mehrheitlich nach Änderung des Beschlussvorschlages",
"BESCHLOSSEN_MEHRHEIT_AENDERUNG"
],
[
"Abstimmungsergebnis: Einstimmig gegen Beschlussvorschlag",
"ABGELEHNT_EINSTIMMIG"
],
[
"Abstimmungsergebnis: Mehrheitlich gegen Beschlussvorschlag",
"ABGELEHNT_MEHRHEIT"
],
[
"erledigt",
"ERLEDIGT"
]
],
party_alias
Manchmal verwenden RIS für eine Partei mehrere Namen. Dies kann durch die Variable party_alias wieder auf eine Partei zurückgeführt werden. Erwartet wird eine Liste aus Listen, welche in der ersten Position den zu ändernden Parteinamen, in der zweiten Position den genutzten Parteinamen haben. Ein Beispiel aus Bochum:
"party_alias": [
[
"GRU",
"Bündnis 90 / Die Grünen"
],
[
"Grüne",
"Bündnis 90 / Die Grünen"
],
paper_type_strings
Diese Variable dient dazu, die Namen der Vorlagentypen zu vereinheitlichen. Bislang wird sie aber nicht genutzt, so dass sie leer bleiben kann. Also so:
"paper_type_strings": [],
Scraperergänzungen
Manchmal haben RIS stadtspezifische Ergänzungen in den HTML-Vorlagen, so dass der Scraper nicht mehr alle Informationen bekommt und mit einem Fehler abbricht. In diesem Fall kann die globale Konfiguration ganz einfach ergänzt werden, ohne gleich alles neu schreiben zu müssen. Ein Beispiel aus Moers:
{
[...]
"config": {
[...]
"scraper": {
[...]
"sessionnet-asp": {
"xpath": {
"MEETING_DETAIL_TITLE": "//h3[@class='smc_h3']",
"PAPER_DETAIL_TITLE": "//h3[@class='smc_h3']"
}
}
},
}
}
Hier werden lediglich die xpath MEETING_DETAIL_TITLE und PAPER_DETAIL_TITLE ergänzt, weil diese in Moers anders lauten als in dem normalen SessioNet Template.
Die globale Konfiguration gibt es in http://ubunturechner:23000/admin/config bzw. als Template. Diese Vorlage wird auch nicht verändert, d.h. wenn eine Ergänzung nötig ist, so muss diese in die Stadtkonfiguration!
Die fertige Konfiguration
Du hast eine fertige Stadtkonfiguration? Perfekt! Dann lasse Sie uns zukommen - z.B. via E-Mail