Die API des RKI COVID-19 Dashboard kann für eigene Datenanalysen genutzt werden. Wir zeigen, wie es geht und worauf geachtet werden sollte.
Seit Beginn der COVID-19 Pandemie betreiben wir als Esri Deutschland im Auftrag des Robert Koch-Instituts das Dashboard, welches unter https://corona.rki.de zu erreichen ist. In diesem Blogpost wollen wir die Hintergründe dieses Betriebs erläutern, sowie aufzeigen, welche Datensätze von uns bereitgestellt werden und wie die Öffentlichkeit die von uns aufbereiteten Datensätze bestmöglich abrufen kann.
Jede Nacht übermittelt das RKI uns eine Rohdatentabelle, die sämtliche Meldungen der Gesundheitsämter des Landes seit Beginn der Meldungen enthält. Diese Tabelle umfasst derzeit rund 1,8 Millionen Datensätze, wobei jeder Datensatz mehrere Fälle beschreiben kann. Diese Daten werden dann durch ein Skript aufbereitet und bis auf Landkreisebene aggregiert, so dass die aus dem Dashboard hinlänglich bekannten Indikatoren abgebildet werden können.
Die Daten werden daraufhin neben der Verwendung im Dashboard auch auf dem COVID-19 Datenhub (arcgis.com) zum Download bereitgestellt.
Öffentliche REST-API
Neben der Bereitstellung zum manuellen Download können die Daten auch über eine REST API abgerufen werden. Zum Abruf eignen sich insbesondere folgende Datensätze bzw. API-URLs:
RKI Key Data (Beschreibung / REST-Service)
Die Schlüsseldaten liefern tagesaktuelle Informationen wie 7-Tages-Inzidenz, Fallzahl oder Genesungen.
RKI Altersgruppen (Beschreibung / REST-Service)
In diesem Datensatz sind die Fallzahlen nach Altersgruppe und Geschlecht gruppiert.
RKI History (Beschreibung / REST-Service)
Der historische Datensatz ist Grundlage für die Verlaufsgraphiken im Dashboard.
RKI AdmUnit (Beschreibung / REST-Service)
Auflistung aller genutzten “Administrative Units”.
Service Status API
Vor der Nutzung der API’s sollte jedoch der Datenstand überprüft werden:
RKI Service Status (Beschreibung / REST-Service)
Statusinformationen zu o.g. Datendiensten.
Regelmäßige Updates
Die bereitgestellten Daten werden einmal in den frühen Morgenstunden aktualisiert. Um zu erfahren, ob aktuelle Daten verfübar sind, nutzen Sie die Status-API:
import requests, json
url = "https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/rki_key_data_v/FeatureServer/0/query?"
parameter = {
'referer':'https://www.mywebapp.com',
'user-agent':'python-requests/2.9.1',
'where': '1=1', # Alle Status-Datensätze
'outFields': '*', # Rückgabe aller Felder
'returnGeometry': False, # Keine Geometrien
'f':'json', # Rückgabeformat, hier JSON
'cacheHint': True # Zugriff über CDN anfragen
}
result = requests.get(url=url, params=parameter) #Anfrage absetzen
resultjson = json.loads(result.text) # Das Ergebnis JSON als Python Dictionary laden
print(resultjson['features'])
Timestamp: | 4/25/2021 2:21:32 AM |
Datum: | 4/24/2021 11:00:00 PM |
Timestamp_txt: | 25.04.2021, 03:21 Uhr |
Datum_txt: | 25.04.2021 |
Url: | https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_COVID19/FeatureServer/0 |
Status: | OK |
NoOfRows: | 1482303 |
DataHash: | |
ObjectId: | 1 |
Nutzer der API sollten so vorgehen, dass sie zunächst die Status-API abfragen und nur dann auf die Daten-APIs gehen, wenn neue Daten zur Verfügung stehen. Die Status-API sollte nicht häufiger als in 5 Minuten Intervallen abgefragt werden.
Bei der Nutzung der API sollte beachtet werden, auch die HTTP-Header “referer” und “user-agent” zu nutzen.
Der Service Status erhält zu jeder öffentlichen URL (entspricht REST-Service) einen Datensatz. Jeder Datensatz beschreibt den Zeitpunkt der letzten Aktualisierung sowie den Status “OK”, “Updating” oder “Fehler”.
Beispielimplementierung zur Nutzung der API
Die Daten selbst sollten nur einmal täglich über die API abgefragt werden, ein dichteres Abfrageintervall bietet keinen Mehrwert.
Die oben beschriebenen APIs können beispielsweise mit Python wie folgt genutzt werden:
import requests, json
url = "https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/rki_key_data_v/FeatureServer/0/query?"
lk_id = 5566 # ID für den Kreis Steinfurt gemäß AdmUnit Tabelle
parameter = {
'referer':'https://www.mywebapp.com',
'user-agent':'python-requests/2.9.1',
'where': f'AdmUnitId = {lk_id}', # Welche landkreise sollen zurück gegeben werden
'outFields': '*', # Rückgabe aller Felder
'returnGeometry': False, # Keine Geometrien
'f':'json', # Rückgabeformat, hier JSON
'cacheHint': True # Zugriff über CDN anfragen
}
result = requests.get(url=url, params=parameter) #Anfrage absetzen
resultjson = json.loads(result.text) # Das Ergebnis JSON als Python Dictionary laden
print(resultjson['features'][0]['attributes']) # Wir erwarten genau einen Datensatz, Ausgabe aller Attribute