Hintergrund
Der Deutsche Bundestag stellt seine Tagesordnung online zur Verfügung – nur leider in keinem maschinenlesbaren Format. Da in Sitzungswochen mindestens 734 Abgeordnetenbüros händisch die Tagesordnungspunkte in ihren Kalendern aktualisieren müssen, war es Zeit für eine Alternative.
Aus diesem Grund stelle ich (ein einfacher MdB-Mitarbeiter) mithilfe eines Cloudflare-Workers diese API bereit, die die aktuelle Tagesordnung von der Website des Deutschen Bundestags scraped und in einer Key-Value-Datenbank zwischenspeichert.
Die Tagesordnungspunkte für die laufenden Sitzungswoche werden alle 15min aktualisiert. Außerdem können die Tagesordnungen vergangener Sitzungswochen oder gleich ganzer Jahre abgefragt oder heruntergeladen werden.
Falls etwas nicht funktioniert, wie es soll: Nicht wundern, das Projekt ist in der Beta-Phase. Ich freue mich über einen freundlichen Hinweis (*klick*).
Kalenderfeed abonnieren
Um die – in Sitzungswochen alle 15min aktualisiserten – Tagesordnungen des laufenden Jahres als iCal-Feed zu abonnieren, kann folgende URL verwendet werden: https://api.hutt.io/bt-to/ical
.
Neben Startzeit, TOP und Thema enthalten die Kalendereinträge außerdem aktuelle Informationen zum Status des Tagesordnungspunktes, den etwas ausführlicheren Beschreibungstext und, falls vorhanden, einen Link zum zugehörigen Artikel im bundestag.de-Textearchiv.
Aus Performance-Gründen enthält dieses Feed nicht die Tagesordnungen vergangener Kalenderjahre. Sie können mit dieser API allerdings auch abgefragt oder händisch heruntergeladen werden.
iCal-Feed-Link-Generator
Outlook (Windows)
- Öffnen Sie Ihren Outlook-Kalender, und wählen Sie auf der Registerkarte Start die Option Kalender hinzufügen > Aus dem Internet aus.
- Fügen Sie die URL
https://api.hutt.io/bt-to/ical
ein und klicken Sie auf OK. - Outlook fragt, ob Sie diesen Kalender hinzufügen und Updates abonnieren möchten. Wählen Sie Ja aus.
Thunderbird
- Öffnen Sie Thunderbird und wählen Sie Datei > Neu > Kalender…
- Wählen Sie Im Netzwerk und klicken Sie auf Weiter.
- Wählen Sie in der „Format“-Liste den Auswahlknopf iCalendar (ICS).
- Fügen Sie den Link
https://api.hutt.io/bt-to/ical
in das Feld neben „Adresse“ ein. Klicken Sie danach auf Weiter. - Klicken Sie auf Fertigstellen.
macOS Kalender-App
- Öffnen Sie die Kalender-App.
- Gehen Sie in der Menüleiste zu „Datei“ > „Neues Kalenderabonnement“.
- Fügen Sie nun den Link
https://api.hutt.io/bt-to/ical
ein und klicken Sie auf „Abonnieren“.
iOS Kalender-App
- Öffnen Sie die Kalender-App.
- Tippen Sie unten in der Mitte auf „Kalender“. Nun sollte sich eine Liste mit allen eingerichteten Kalendern öffnen.
- Tippen Sie nun unten links auf „Hinzufügen“ > „Kalenderabonnement hinzufügen“.
- Fügen Sie nun die URL
https://api.hutt.io/bt-to/ical
ein und tippen Sie dann auf „Abonnieren“. - Jetzt sollte eine Übersicht geladen werden, in der man den Kalendernamen, die Farbe und den Account auswählen kann, zu dem das Kalenderabo hinzugefügt werden soll. Bestätigen Sie mit einem letzten Tippen auf den „Hinzufügen“-Button rechts oben.
Vorhandene Daten
Hier sind die mit dieser API abrufbaren Daten inklusive Download-Links für verschiedene Formate aufgelistet. Aktuell sind Abfragen auf Datensätze ab 2015 begrenzt.
Die Kalenderwochen können mit einem Klick auf das Jahr aufgeklappt werden.
- Daten werden geladen...
API Endpoints
GET-Parameter, die für alle Abfragen genutzt werden können:
year
: Das Jahr, für das die Tagesordnungen geholt werden sollen (Integer; optional).week
: Die Kalenderwoche, für die die Tagesordnungen geholt werden sollen (Integer; optional; mityear
kombinierbar).
GET-Parameter, die nur für Abfragen an den iCal-Feed genutzt werden können:
na
: zusätzliche Kalendereinträge für Namentliche Abstimmungen erstellen (Boolean; optional; kombinierbar).naAlarm
: zusätzliche Kalendereinträge für Namentliche Abstimmungen mit Alarm 15min vor Beginn versehen (Boolean; optional; kombinierbar).showSW
: für Sitzungswochen zusätzlichen ganztägigen Termin „Sitzungswoche“ von Montag bis Freitag erstellen (Boolean; optional; kombinierbar).
Sind keine Parameter angegeben, werden die Daten für das laufende Kalenderjahr zurückgegeben. Aktuell sind Abfragen auf Datensätze ab dem Jahr 2015 begrenzt.
Beispiele
GET https://api.hutt.io/bt-to/csv?year=2023
– alle Tagesordnungspunkte des Jahres 2023 im CSV-Format.GET https://api.hutt.io/bt-to/json?week=20
– alle Tagesordnungspunkte in Kalenderwoche 20 im laufenden Jahr als Liste mit JSON-Objekten.GET https://api.hutt.io/bt-to/xml?year=2022&week=2
– alle Tagesordnungspunkte in Kalenderwoche 2 im Jahr 2022 im XML-Format.GET https://api.hutt.io/bt-to/ical?na=true
– alle Tagesordnungspunkte des laufenden Kalenderjahres inklusive zusätzlicher Termine für Namentliche Abstimmungen als iCal-Feed.GET https://api.hutt.io/bt-to/ical?showSW=true
– alle Tagesordnungspunkte des laufenden Kalenderjahres inklusive ganztägiger Termine für Sitzungswochen als iCal-Feed.
iCal / ICS
Dieser Endpoint bietet die Möglichkeit, zusätzliche Termine für Namentliche Abstimmungen zu erstellen. Diese beginnen unmittelbar nach Ende des Tagesordnungspunktes, zu dem abgestimmt werden soll und werden für eine Dauer von 15 min in den Kalender eingetragen. Um einen Feed mit solchen Einträgen zu generieren, muss der GET-Parameter na
mit dem Wert true
angehängt werden.
Beispiel-Request:
GET https://api.hutt.io/bt-to/ical
Beispiel-Antwort:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hutt.io//api.hutt.io/bt-to//
CALSCALE:GREGORIAN
X-WR-TIMEZONE:Europe/Berlin
X-WR-CALNAME:Tagesordnung Bundestag
DESCRIPTION:Dieses iCal-Feed stellt die aktuelle Tagesordnung des Plen
ums des Deutschen Bundestages zur Verfügung. Es aktualisiert sich alle
15min selbst. Zwar ist der Sitzungsverlauf auch online unter bundesta
g.de/tagesordnung einsehbar, doch leider werden diese Daten nicht in e
inem maschinenlesbaren Format zur Verfügung gestellt. Deshalb war es Z
eit, das selbst in die Hand zu nehmen. Mehr Informationen über das Pro
jekt: https://api.hutt.io/bt-to/.
SOURCE;VALUE=URI:https://api.hutt.io/bt-to/ical
COLOR:#808080
BEGIN:VTIMEZONE
TZID:Europe/Berlin
BEGIN:STANDARD
TZNAME:CET
DTSTART:19701025T030000
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
TZNAME:CEST
DTSTART:19700329T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
END:VTIMEZONE
[…]
BEGIN:VEVENT
UID:1715777400000-fragestunde-top-2@api.hutt.io
DTSTAMP:20240521T100025Z
DTSTART;TZID=Europe/Berlin:20240515T125000
DTEND;TZID=Europe/Berlin:20240515T133500
SUMMARY:TOP 2: Fragestunde
DESCRIPTION:Status: beendet
Fragestunde
Drucksache 20/11319, 20/11
340
URL:https://bundestag.de/dokumente/textarchiv/2024/kw20-de-fragestunde
-999696
END:VEVENT
BEGIN:VEVENT
UID:1715780100000-aktuelle-stunde:-kernkraft-aus---vorgänge-um-bm-habe
ck-und-bmn-lemke-zp-1@api.hutt.io
DTSTAMP:20240521T100025Z
DTSTART;TZID=Europe/Berlin:20240515T133500
DTEND;TZID=Europe/Berlin:20240515T150000
SUMMARY:ZP 1: Aktuelle Stunde: Kernkraft-Aus - Vorgänge um BM Habeck u
nd BMn Lemke
DESCRIPTION:Status: beendet
Aktuelle Stunde
auf Verlangen der Frak
tion der CDU/CSU
Kernkraft-Aus – Vorgänge um Bundesminister Habeck un
d Bundesministerin Lemke transparent aufklären
URL:https://bundestag.de/dokumente/textarchiv/2024/kw20-de-aktuelle-st
unde-kernkraft-1002698
END:VEVENT
[…]
END:VCALENDAR
JSON
Beispiel-Request:
GET https://api.hutt.io/bt-to/json
Beispiel-Antwort:
[
[…]
{
"start":"2024-05-15T14:50:00.000",
"end":"2024-05-15T15:35:00.000",
"top":"TOP 2",
"thema":"Fragestunde",
"beschreibung":"Status: beendet
Fragestunde
Drucksache 20/11319, 20/11340",
"url":"https://bundestag.de/dokumente/textarchiv/2024/kw20-de-fragestunde-999696",
"status":"beendet",
"namentliche_abstimmung": false,
"uid":"1715784600000-fragestunde-top-2@api.hutt.io",
"dtstamp":"2024-05-21T11:09:37.775Z"
},
[…]
]
XML
Beispiel-Request:
GET https://api.hutt.io/bt-to/xml
Beispiel-Antwort:
<agenda>
[…]
<event>
<start>2024-05-15T14:50:00.000</start>
<end>2024-05-15T15:35:00.000</end>
<top>TOP 2</top>
<thema>Fragestunde</thema>
<status>beendet</status>
<beschreibung>Status: beendet Fragestunde Drucksache 20/11319, 20/11340</beschreibung>
<namentliche_abstimmung>false</namentliche_abstimmung>
<url>https://bundestag.de/dokumente/textarchiv/2024/kw20-de-fragestunde-999696</url>
</event>
[…]
</agenda>
CSV
Beispiel-Request:
GET https://api.hutt.io/bt-to/csv
Beispiel-Antwort:
Start;Ende;TOP;Thema;Beschreibung;URL;Status;NA
[...]
2024-05-15T14:50:00.000;2024-05-15T15:35:00.000;TOP 2;Fragestunde;"Status: beendet
Fragestunde
Drucksache 20/11319, 20/11340";https://bundestag.de/dokumente/textarchiv/2024/kw20-de-fragestunde-999696;beendet;false
[...]
Quellcode und Weiterentwicklung
Das Projekt ist unter MIT lizensiert und damit Open Source. Wer sich den Quellcode ansehen oder dazu beitragen möchte, findet die Repository dieses Projekts auf GitHub.
Die Entwicklung weiterer Funktionen, unter anderem von Themen- bzw. Ausschusszugehörigkeits-Filtern ist geplant. Da dieses Projekt nur ein Hobby ist, kann aber nicht gesagt werden, wie schnell das geht.
Sie haben Fehler zu berichten oder Ideen für die Weiterentwicklung? Hier können Sie mich kontaktieren.
Unterstützen
In solche Projekte fließt eine Menge Zeit und meistens auch ein bisschen Geld fürs Hosting. Wenn Sie die (Weiter-)Entwicklung und den Betrieb unterstützen wollen (worüber ich mich sehr freue), können Sie mir über den Link unten einen (digitalen) Kaffee kaufen.
Vielen Dank!