Giter Club home page Giter Club logo

offenesparlament.de's Introduction

OffenesParlament

OffenesParlament ist eine Webseite, welche die Arbeit des Bundestags und Bundesrats transparent und nachvollziehbar machen soll. Der Schwerpunkt liegt dabei auf den laufenden Arbeitsprozessen des Parlaments - nicht auf dem Abstimmungsverhalten einzelner Abgeordneter oder dem Inhalt der Dokumente.

Dieses README befasst sich nur mit den technischen Aspekten der Seite, für weitere inhaltliche Informationen besuche: http://offenesparlament.de.

Installation

OffenesParlament ist eine einfach Python-Anwendung auf der Basis von Flask. Systemvoraussetzungen sind daher Python, PostgreSQL sowie das Kommandozeilen-Programm pdftohtml, Teil der poppler-utils. Zudem benötigt die Anwendung eine Apache Solr-Instanz für Volltextsuche, die per HTTP angesprochen wird.

Die Installation sollte immer innerhalb eines virtualenv erfolgen:

virtualenv pyenv
source pyenv/bin/activate
git clone [email protected]:pudo/offenesparlament.git
pip install -r offenesparlament/pip-requirements.txt

Alle Einstellungen werden in einer Python-Datei abgelegt. Die Datei kann aus den Standard-Einstellungen abgeleitet werden und wird per Umgebungsvariable gesetzt:

cp offenesparlament/offenesparlament/default_settings.py settings.py
# edit the file to set relevant values like DB strings.
PARLAMENT_SETTINGS=`pwd`/settings.py
export PARLAMENT_SETTINGS

In der Konfigurationsdatei werden zwei Datenbanken benannt. Eine davon ist die Staging-Datenbank (ETL_URL), in der Daten aus den Scrapern deponiert und transformiert werden. Die andere ist die Produktivdatenbank, aus der sich das Frontend der Webseite speist. Beide Datenbanken sollten mit dem Encoding "UTF-8" angelegt werden.

Datenextraktion

Der Kern von OffenesParlament sind die unterschiedlichen Scraper, die Informationen von den Webseiten des Bundestags beziehen und miteinander verknüpfen. Die Scraper sind in mehrere Stufen unterteilt, die beim initialen Abruf der Daten ein der folgenden Reihenfolge ausgeführt werden sollten:

  • gremien lädt Informationen über die Ausschüsse des Bundestags.
  • personen extrahiert Informationen über Abgeordnete. Andere Personen, etwa Mitglieder des Bundesrats und der Regierung werden auch durch andere Stufen hinzugefügt.
  • abstimmungen extrahiert die Protokolle namentlicher Abstimmungen. Das Auslesen der PDF-Dateien erfordert pdftohtml.
  • transcripts lädt sowohl die Plenarprotokolle einzelner Bundestagssitzungen wie auch die WebTV-Aufzeichnungen der einzelnen Reden. Beide Datensätze werden verknüpft, sodass eine strukturierte Form der Protokolle bereit steht.
  • ablaeufe sind die schriftlichen Vorgänge des Bundestags und Bundesrats. Sie umfassen Anfragen, Anträge und Gesetzesentwürfe.

Jede dieser Stufen kann über das manage.py-Skript ausgeführt werden:

python offenesparlament/offenesparlament/manage.py gremien

Alle Stufen verfügen über einige Parameter:

  • -f, --force erzwingt das erneute Laden der Daten, auch wenn diese unverändert sind.
  • -t, --threaded teilt die Arbeit auf mehrere Threads auf.
  • -p, --preload vermeidet das Laden einer Referenzdatei, die kleine Operationen um einige Sekunden verzögert.
  • -u, --url vermeidet das Laden aller Daten und bezieht nur einen Eintrag, der per URL spezifiziert wird.

Der -u-Paramter kann wie folgt verwendet werden:

python [..]/manage.py persons -f -u http://www.bundestag.de/xml/mdb/A/ackermann_jens.xml

Oder:

python [..]/manage.py ablaeufe -f -u http://dipbt.bundestag.de/extrakt/ba/WP17/242/24215.html

Alle Stufen können gemeinsam durch dem update-Befehl ausgeführt werden:

python [..]/manage.py update

Einige andere Befehle stehen ebenfalls zur Verfügung.

  • dumpindex beseitigt den gesamten Solr-Index zu Debug-Zwecken.
  • aggregate generiert einige Statistiken. Es sollte nach dem Daten-Update ausgeführt werden.
  • notify liest die Abonnenten-Listen aus und verschickt E-Mails an alle zutreffenden Empfänger.

Webseite

Um die Webseite auszuführen, kann das folgende Kommando genutzt werden:

python [..]/manage.py runserver

Um einen Produktiv-Server zu betreiben sollte allerding eine andere Umgebung genutzt werden, z.B. gunicorn.

Stapeljobs

Damit die Daten auf der Webseite aktuell bleiben, müssen folgende Kommandos in regelmäßigen Intervallen ausgeführt werden. Während bei einigen Scrapern (Personen, Gremien) eine wöchtentliche Aktualisierung ausreicht, sollten die Scraper für Plenarprotokolle und Vorgänge im Parlament täglich aktualisiert werden.

::

# Basis-Infos (wöchtentlich) python offenesparlament/manage.py gremien -f python offenesparlament/manage.py persons -f python offenesparlament/manage.py abstimmungen

# tagesaktuelle Angaben python offenesparlament/manage.py ablaeufe python offenesparlament/manage.py transcripts

# nach jedem Update: python offenesparlament/manage.py aggregate python offenesparlament/manage.py notify

Kontakt

Der Code von OffenesParlament steht unter der Affero GPL v3-Lizenz. Der Text der Lizenz ist unter http://www.gnu.org/licenses/agpl.html einsehbar.

offenesparlament.de's People

Contributors

pudo avatar rgieseke avatar maliena avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.