Mit Python auf die Autobahn API zugreifen

Aktualisiert am 22. Februar 2022

Das Internet ermöglicht es uns auf zahlreiche Daten zuzugreifen. Häufig steht diesbezüglich eine API (Application Programming Interface), also eine Programmierschnittstelle zur Verfügung, über die die Daten abgerufen werden können. In diesem Artikel möchte ich zeigen, wie mit Python auf die Autobahn API zugegriffen werden kann.

Voraussetzung ist, dass requests installiert wurde:

$ pip install requests  # Windows
$ pip3 install requests # Linux, macOS

Bevor es mit dem Code losgeht, ist es erforderlich einen Blick in die jeweilige API-Dokumentation zu werfen, die in diesem Fall vom Projekt bund.dev bereitgestellt wird. In dieser Dokumentation finden wir die existierenden Endpunkte. Dabei handelt es sich im Grunde um die Adressen der zur Verfügung stehenden Daten.

Endpunkte der Autobahn API

Wie der Abbildung entnommen werden kann, lautet die Serveradresse, über die die Autobahn-Daten bereitgestellt werden, wie folgt:

https://verkehr.autobahn.de/o/autobahn

Die Liste aller verfügbaren Autobahnen kann über „/“ abgefragt werden. Für unseren Code bedeutet dies, dass wir nach dem Import von requests zunächst diese Adresse der Konstanten URL zuweisen:

URL = "https://verkehr.autobahn.de/o/autobahn/"

Es folgt eine Funktion, die die Verbindung zum Server herstellt, den Status-Code überprüft und anschließend die Daten abruft:

def fetch_autobahn_data(autobahn_url):
"""Fetch JSON data from the Autobah API

Arguments:
    autobahn_url {str} -- The API url

Returns:
    dict -- JSON data
"""

# Connect to the server
try:
    response = requests.get(autobahn_url)
except requests.Timeout as e:
    sys.exit(f"Unable to retrieve data:\n{e!r}")
except requests.ConnectionError as e:
    sys.exit(f"Unable to retrieve data:\n{e!r}")

# Check if the request is successfull
# and receive data
if response.status_code == 200:
    print("Status 200, OK")
    return response.json()
else:
    sys.exit("JSON data request not successfull!")

Der Abruf der Daten erfolgt freilich nur nach einer erfolgreichen Verbindung zum Server und beim Status-Code 200. Dieser Code bedeutet, dass die Anfrage erfolgreich war. Eine Liste mit den existierenden Status-Codes könnt Ihr übrigens in den MDN Web Docs nachlesen.

Zum Schluss wird die Funktion mit der URL als zu übergebendem Argument aufgerufen. Die Ausgabe der Daten erledigt die print()-Funktion:

# Call the function and print the JSON data
json_data = fetch_autobahn_data(URL)
print(json_data)

Die (erfolgreiche) Abfrage liefer ein Dictionary mit den Autobahnen:

{'roads': ['A1', 'A2', 'A3', 'A4', … }

Ich denke, dass damit das Prinzip klar sein sollte. Jetzt könnt Ihr einen Blick auf die anderen Endpunkte werfen und den Code entsprechend anpassen.

Auf Github findet Ihr das Projekt autobahn-api, das Euch als Ausgangspunkt für eigene Projekte dienen mag.