Freie Datenbank für Wahlumfragen, API mit JSON-Datei (Open Data, ODbL)

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.

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 hat der Github-Nutzer Kevin Kennell 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.