Einführung
OpenPLZ API ist ein Open Data-Projekt, das ein öffentliches Strassenverzeichnis für Deutschland, Österreich, die Schweiz und Liechtenstein über eine offene REST-API-Schnittstelle verfügbar macht. Folgende Daten sind abrufbar:
- Deutschland:
- Straßenname
- Postleitzahl und Ort
- Gemeinde (inklusive Angaben zu Kreis, Bezirk und Bundesland)
- Österreich:
- Straßenname
- Postleitzahl und Ort
- Gemeinde (inklusive Angaben zu Bezirk und Bundesland)
- Schweiz:
- Straßenname
- Postleitzahl und Ort
- Gemeinde (inklusive Angaben zu Bezirk und Kanton)
- Liechtenstein:
- Straßenname
- Postleitzahl und Ort
- Gemeinde
Los geht's
Der einfachste Weg, die API zu nutzen, ist der Weg über die Kommandozeile. Wir werden in diesem Kapitel mit der Kommandozeilenanwendung curl arbeiten.
Unter Linux ist curl
in der Regel vorinstalliert. Unter Windows ist curl
als Alias des Cmdlet Invoke-WebRequest definiert, kann also via Powershell genutzt werden. Die hier verwendeten Befehlsfolgen variieren leicht, daher werden sie für Powershell 7 (Windows) und Bash (Linux) getrennt angegeben.
Verwaltungseinheiten
Pro Land können subnationale Verwaltungseinheiten (z.B. Bundesländer, Schweizer Kantone, Bezirke, Kreise oder Gemeinden) abgefragt werden. Grundlage für die Filterung ist stets der offizielle Schlüssel (key) der Verwaltungseinheit.
Hier eine Beispielabfrage für die Liste der deutschen Bundesländer:
curl -X GET 'https://openplzapi.org/de/FederalStates' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openplzapi.org/de/FederalStates' -H 'accept: text/json' | json_pp
Hier eine Beispielabfrage für die Liste aller österreichischen Gemeinden im Bundesland Niederösterreich (Schlüssel "3"):
curl -X GET 'https://openplzapi.org/at/FederalProvinces/3/Municipalities' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openplzapi.org/at/FederalProvinces/3/Municipalities' -H 'accept: text/json' | json_pp
Hier eine Beispielabfrage für die Liste aller schweizerischen Bezirke im Kanton Aargau (Schlüssel "19"):
curl -X GET 'https://openplzapi.org/ch/Cantons/19/Districts' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openplzapi.org/ch/Cantons/19/Districts' -H 'accept: text/json' | json_pp
Die meisten Abfragen Verwaltungseinheiten unterliegen eine Paging, d.h. das Resultat wird in adressierbaren Datenblöcken zurückgeliefert. Standardmäßig wird nur der erste Block bzw. die erste Seite mit maximal 50 Einträgen zurückgeliefert. Dies kann aber durch Angabe der optionalen Parameter page
und pageSize
beeinflusst werden.
Postleitzahlen und Orte
Orte können an Hand ihres Namens oder ihrer Postleitzahl gesucht werden. Die Suche kann sehr flexibel mittels regulären Ausdrücken gestaltet werden. Es wird der POSIX Regular Expressions Syntax unterstützt.
Hier eine Beispielabfrage für die deutsche Postleitzahl 13156:
curl -X GET 'https://openplzapi.org/de/Localities?postalCode=13156' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openplzapi.org/de/Localities?postalCode=13156' -H 'accept: text/json' | json_pp
Hier eine Beispielabfrage für alle deutschen Postleitzahlen, die mit 13 beginnen:
curl -X GET 'https://openplzapi.org/de/Localities?postalCode=^13' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openplzapi.org/de/Localities?postalCode=^13' -H 'accept: text/json' | json_pp
Ortsabfragen unterliegen einem Paging, d.h. das Resultat wird in adressierbaren Datenblöcken zurückgeliefert. Standardmäßig wird nur der erste Block bzw. die erste Seite mit maximal 50 Orte zurückgeliefert. Dies kann aber durch Angabe der optionalen Parameter page
und pageSize
beeinflusst werden.
Hier das erste Beispiel mit explizitem Paging (zweite Seite mit maximal 20 Orte):
curl -X GET 'https://openplzapi.org/de/Localities?postalCode=13156&page=2&pageSize=20' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openplzapi.org/de/Localities?postalCode=13156&page=2&pageSize=20' -H 'accept: text/json' | json_pp
Straßen
Straßen können an Hand ihres Namens, ihrer Postleitzahl oder ihres Ortsnamens gesucht werden. Die Suche kann sehr flexibel mittels regulären Ausdrücken gestaltet werden. Es wird der POSIX Regular Expressions Syntax unterstützt.
Hier eine Beispielabfrage für die deutsche Straße Grabbeallee (gibt es nur einmal in Berlin):
curl -X GET 'https://openplzapi.org/de/Streets?name=Grabbeallee' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openplzapi.org/de/Streets?name=Grabbeallee' -H 'accept: text/json' | json_pp
Hier eine Beispielabfrage für alle Straßen in Berlin, die mit G anfängt und mit allee aufhört. Der reguläre Ausruck ^G.*allee$
ist URL-kodiert:
curl -X GET 'https://openplzapi.org/de/Streets?name=%5EG.*allee%24&locality=Berlin' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openplzapi.org/de/Streets?name=%5EG.*allee%24&locality=Berlin' -H 'accept: text/json' | json_pp
Straßenabfragen unterliegen einem Paging, d.h. das Resultat wird in adressierbaren Datenblöcken zurückgeliefert. Standardmäßig wird nur der erste Block bzw. die erste Seite mit maximal 50 Straßen zurückgeliefert. Dies kann aber durch Angabe der optionalen Parameter page
und pageSize
beeinflusst werden.
Hier das erste Beispiel mit explizitem Paging (zweite Seite mit maximal 20 Straßen):
curl -X GET 'https://openplzapi.org/de/Streets?name=Grabbeallee&page=2&pageSize=20' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openplzapi.org/de/Streets?name=Grabbeallee&page=2&pageSize=20' -H 'accept: text/json' | json_pp
Volltextsuche
Für jedes Land kann eine Volltextsuche über Straßenname, Postleitzahl und Ortsname durchgeführt werden.
Hier eine Volltextsuche für Deutschland mit dem Suchbegriff Berlin, Pariser Platz
. Der Suchbegriff ist URL-kodiert:
curl -X GET 'https://localhost:44365/de/FullTextSearch?searchTerm=Berlin%2C%20Pariser%20Platz' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://localhost:44365/de/FullTextSearch?searchTerm=Berlin%2C%20Pariser%20Platz' -H 'accept: text/json' | json_pp
Hier eine Volltextsuche für Liechtenstein mit dem Suchbegriff 9490 Alte Landstrasse
. Der Suchbegriff ist URL-kodiert:
curl -X GET 'https://localhost:44365/li/FullTextSearch?searchTerm=9490%20Alte%20Landstrasse' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://localhost:44365/li/FullTextSearch?searchTerm=9490%20Alte%20Landstrasse' -H 'accept: text/json' | json_pp
Die Volltextsuche unterliegt einem Paging, d.h. das Resultat wird in adressierbaren Datenblöcken zurückgeliefert. Standardmäßig wird nur der erste Block bzw. die erste Seite mit maximal 50 Straßen zurückgeliefert. Dies kann aber durch Angabe der optionalen Parameter page
und pageSize
beeinflusst werden.
Tipps und Tricks
Um die Bildschirmausgabe von curl
in eine Datei zu schreiben, kann der Parameter -o
genutzt werden. Das folgende Beispiel speichert alle Kantone der Schweiz in eine JSON-formartierte Textdatei.
curl -X GET 'https://openplzapi.org/ch/Cantons' -H 'accept: text/json' -o 'cantons.json'
curl -X GET 'https://openplzapi.org/ch/Cantons' -H 'accept: text/json' -o 'cantons.json'