Wir stellen unsere Datenbank mit Wahlumfragen als API über eine JSON-Datei im Rahmen von Open Data unter der ODC Open Database License (ODC-ODbL) der Allgemeinheit zur Verfügung.
Freie Datenbank für Wahlumfragen, API mit JSON-Datei (Open Data, ODbL)
Inhalt der freien Datenbank
Diese JSON-Datei beinhaltet Informationen einer jeden Wahlumfrage über:
- Parlament, Institut und Auftraggeber
- Umfrageergebnisse für die einzelnen Parteien
- Tag der Veröffentlichung
- Befragungszeitraum
- Anzahl der Befragten
- Befragungsmethode [Datenfeld am 23.11.2022 hinzugefügt mit Werten ab November 2018]
Unsere API wird bei Eintragung einer neuen Wahlumfrage in unsere Datenbank automatisch aktualisiert und ist so stets auf dem gleichen Stand wie unsere SQL-Datenbank. Die API enthält Wahlumfragen zu Bundes- und Landtagswahlen ab 2017.
Aufbau der JSON-Datei
Die JSON-Datei setzt sich aus sechs Blöcken zusammen:
- Database: Informationen über die Datenbank
- License: lange (Name) und kurze (Shortcut) Bezeichnung der Lizenz mit Adresse der Website (Link)
- Publisher: Domain unserer Seite
- Author: Ersteller der Datenbank
- Last_Update: letzte Aktualisierung der Datenbank (Format DateTime::W3C) / identisch mit dem Inhalt der last_update.txt
- Parliaments: IDs und Bezeichnungen
- Shortcut: Bundesland / Bundestag
- Name: Bezeichnung des Parlaments
- Election: Bezeichnung der Wahl
- Institutes: IDs und Bezeichnung der Institute (Name)
- Taskers: IDs und Bezeichnungen der Auftraggeber (Name)
- Methods: IDs und Bezeichnungen der Befragungsmethoden (Name)
- Parties: IDs und Bezeichnungen
- Shortcut: Abkürzung der Partei
- Name: vollständige Bezeichnung der Partei
- Surveys: IDs und Details zu Wahlumfragen
- Parliament_ID, Institute_ID, Tasker_ID, Method_ID
- Results: Partei-ID mit Umfrageergebnis
- Date: Veröffentlichungsdatum (in ISO 8601)
- Survey_Period: Befragungszeitraum mit Date_Start und Date_End
- Surveyed_Persons: Anzahl der Befragten
Nutzungsbedingungen für die freie Datenbank (Lizenz)
Unsere Datenbank mit den einzelnen Wahlumfragen, die über unsere API verfügbar ist, kann im Rahmen der Lizenz ODC-ODbL verwendet werden. Jede Verwendung der Datenbank setzt insbesondere die Nennung und Verlinkung unserer Seite sowie die Beibehaltung, Nennung und Verlinkung der Lizenz ODC-ODbL voraus. Dies ist auch bei allen Inhalten erforderlich, die auf Grundlage der Daten unserer Datenbank entstanden sind.
Beispielsweise könnte der Verweis auf die Verwendung der Datenbank lauten:
Daten von dawum.de (Lizenz: ODC-ODbL)
Kompakte Version der Datenbank
Wer nur die jeweils neuesten Wahlumfragen jedes Instituts zu jedem Parlament benötigt, sollte besser die dafür angepasste JSON-Datei verwenden, die wesentlich kleiner als die Datei mit allen Wahlumfragen ist und damit auch schneller geladen werden kann.
Einbindung der Datenbank-API
Prüfung der Aktualität
Zur einfachen Überprüfung der Aktualität der übertragenen Datenbank auf Ihrem Server mit der aktuellen Version bei DAWUM kann der Wert für Last_Update in Database bei Ihrer kopierten Datenbank mit dem Inhalt der Textdatei last_update.txt abgeglichen werden.
Einbindung mit JavaScript und TypeScript
Für die Einbindung der Datenbank für Wahlumfragen hat der Github-Nutzer Clemens Rustemeier ein kostenloses NPM Package für JavaScript und TypeScript mit dem Namen German Election Polls zur Verfügung gestellt. Mit diesem NPM Package kann unsere Datenbank-API einfach in jedem JavaScript- oder TypeScript-Projekt verwendet werden. Dabei können mit einem einzigen Befehl die Daten aktualisiert und mit einem weiteren das Ergebnis gefiltert oder sortiert werden. Alles Weitere kann im Wiki nachgelesen werden. Sollten Bugs oder ähnliches auftreten, empfiehlt der Autor, ein neues Issue zu eröffnen. Darüber hinaus bittet Clemens Rustemeier bei Fragen, Feedback, Ideen und der Mitwirkung am NPM Package um eine Nachricht an folgende E-Mail-Adresse:
moc.duolci@reiemetsursnemelc
Die Nutzung des NPM Package kann beispielsweise wie folgt aussehen:
const query = polls.select([
Query.include([DataType.Surveys]),
Query.Survey.Tasker.ID.isNot([4, 6]),
Query.Survey.Release.isGreater(new Date('2021-11-21')),
Query.Survey.Parliament.Shortcut.is(['Nordrhein-Westfalen (NRW)', 'Baden-Württemberg']),
Query.Survey.Sort.byParticipants(Order.Asc),
Query.Survey.Sort.allResults(Order.Desc),
]);
Das Beispiel gibt Folgendes aus: (1) Nur Wahlumfragen, (2) deren Auftraggeber die ID 4 oder 6 haben, (3) nach dem 21.11.2021 veröffentlicht wurden, (4) für die Landtagswahlen in Nordrhein-Westfalen oder Baden-Württemberg sind und hinsichtlich (5) der Wahlumfragen in aufsteigender Reihenfolge und hinsichtlich (6) der Umfragewerte in absteigender Reihenfolge sortiert werden.
Einbindung mit Python
Für die Einbindung der Datenbank-API mit Python ist auf GitHub vom Nutzer lichtbaer eine Python Library mit dem Namen German election poll data (gepd) veröffentlicht worden.
Außerdem hat der Github-Nutzer Kevin Kennell hat ein Python-Skript entwickelt, mit deren Hilfe unsere JSON-Datenbank in ein CSV-Format umgewandelt werden kann.
Einbindung mit PHP
Um unsere Datenbank-API mit PHP einzubinden, kann beispielsweise folgender Code verwendet werden. Mit diesem lässt sich eine Tabelle über Wahlumfragen durch Erstellen und Aktualisieren einer eigenen JSON-Datei einfach realisieren:
// Auslesen und Aktualisierung der eigenen JSON-Datei
$API_File_Last_Update = file_get_contents('https://api.dawum.de/last_update.txt');
$MyFile = 'myfile.json';
// Auslesen der eigenen JSON-Datei
if (file_exists($MyFile)) {
$MyFile_Content = file_get_contents($MyFile);
$PHP_Array = json_decode($MyFile_Content, true);
}
// Aktualisieren / Neuschreiben sowie (Neu)Auslesen der eigenen JSON-Datei
if (!file_exists($MyFile) OR ($PHP_Array['Database']['Last_Update'] != $API_File_Last_Update)) {
$API_File_Content = file_get_contents('https://api.dawum.de/');
file_put_contents($MyFile, $API_File_Content);
$MyFile_Content = file_get_contents($MyFile);
$PHP_Array = json_decode($MyFile_Content, true);
}
// Sortierung der Parteien (ID) nach den Umfragewerten
foreach ($PHP_Array['Surveys'] AS $Surveys) {
foreach ($Surveys['Results'] AS $Party_ID => $Result) {
$Parties_Sum[$Party_ID] += $Result;
$Parties_Count[$Party_ID] += 1;
}
}
// Bildung des Durchschnitts je Partei
foreach ($Parties_Sum AS $Party_ID => $Party_Sum) {
$Parties_Average[$Party_ID] = ($Party_Sum/$Parties_Count[$Party_ID]);
}
arsort($Parties_Average);
// Ausgabe des Tabellenkopfes
echo '<table><thead><td>Datum</td><td>Parlament</td><td>Institut</td><td>Auftraggeber</td>';
foreach ($Parties_Average AS $Party_ID => $Party_Average) {
echo '<td title="'.$PHP_Array['Parties'][$Party_ID]['Name'].'">'.$PHP_Array['Parties'][$Party_ID]['Shortcut'].'</td>';
}
echo '</thead>';
// Ausgabe des Tabellenkörpers
foreach ($PHP_Array['Surveys'] AS $Content) {
echo '<tr><td>'.$Content['Date'].'</td><td>'.$PHP_Array['Parliaments'][$Content['Parliament_ID']]['Name'].'</td><td>'.$PHP_Array['Institutes'][$Content['Institute_ID']]['Name'].'</td><td>'.$PHP_Array['Taskers'][$Content['Tasker_ID']]['Name'].'</td>';
// Ausgabe der Parteien/Umfragewerte in der Reihenfolge des Tabellenkopfes
foreach ($Parties_Average AS $Party_ID => $Party_Average) {
echo '<td>'.$Content['Results'][$Party_ID].'</td>';
}
echo '</tr>';
}
echo '</table>';
Die Ausgabe dieses Codes kann man sich hier anschauen.
Fragen zur Einbindung
Bei Fragen zur Einbindung unserer Datenbank-API zu Wahlumfragen können Sie sich gerne an uns wenden.
API-nutzende Projekte und Apps
Mithilfe unserer Datenbank-API hat bisher insbesondere Manuel Gutsche mit PolitPro eine Website und Apps für Android und iOS realisiert, die aus den Daten von DAWUM täglich aktuelle Wahltrends berechnet und visualisiert sowie Wahlumfragen analysiert und bewertet.
Darüber hinaus erstellte Henning Tillmann mithilfe unserer Datenbank 2018 einen iOS-Kurzbefehl, mit welchem man sich von Siri die aktuellen Umfragewerte ausgeben lassen kann, sowie 2020 ein iOS-Widget, das auf dem Homescreen des iPhone oder iPad die aktuellen Wahlumfragen und einen Durchschnitt zur Bundestagswahl anzeigen kann.
Seit November 2019 nutzt auch Polittalk, ein Discord-Server zum Diskutieren, Austauschen und Debattieren über aktuelle Ereignisse mit Diskussionsräumen und einem Newsfeed, unsere API zum Abrufen und zur Ausgabe der jeweils neuesten Wahlumfrage zur Bundestagswahl, zu den Landtagswahlen und zur Europawahl.