Zum Inhalt

Einführung

OpenHolidays API ist ein kleines Open Data-Projekt, das öffentliche Daten zu gesetzlichen Feiertagen und Schulferien sammelt und über eine offene REST-API-Schnittstelle verfügbar macht. Unterstützt werden derzeit folgende Länder:

  • Albanien (Feiertage und Schulferien ab 2020)
  • Andorra (Feiertage und Schulferien ab 2020)
  • Belarus (Feiertage und Schulferien ab 2020)
  • Belgien (Feiertage und Schulferien ab 2020)
  • Bulgarien (Feiertage und Schulferien ab 2020)
  • Deutschland (Feiertage und Schulferien ab 2020)
  • Estland (Feiertage und Schulferien ab 2020)
  • Frankreich (Feiertage und Schulferien ab 2020)
  • Irland (Feiertage und Schulferien ab 2020)
  • Italien (Feiertage und Schulferien ab 2020)
  • Kroatien (Feiertage und Schulferien ab 2020)
  • Lettland (Feiertage und Schulferien ab 2020)
  • Liechtenstein (Feiertage und Schulferien ab 2020)
  • Litauen (Feiertage und Schulferien ab 2020)
  • Luxemburg (Feiertage und Schulferien ab 2020)
  • Malta (Feiertage und Schulferien ab 2020)
  • Moldau (Feiertage und Schulferien ab 2020)
  • Monaco (Feiertage und Schulferien ab 2020)
  • Niederlande (Feiertage und Schulferien ab 2020)
  • Polen (Feiertage und Schulferien ab 2020)
  • Portugal (Feiertage und Schulferien ab 2020)
  • Rumänien (Feiertage und Schulferien ab 2020)
  • San Marino (Feiertage und Schulferien ab 2020)
  • Schweiz (Feiertage und Schulferien ab 2020)
  • Slowakei (Feiertage und Schulferien ab 2020)
  • Slowenien (Feiertage und Schulferien ab 2020)
  • Spanien (Feiertage und Schulferien ab 2020)
  • Tschechien (Feiertage und Schulferien ab 2020)
  • Ungarn (Feiertage und Schulferien ab 2020)
  • Vatikanstadt (Feiertage ab 2020)
  • Österreich (Feiertage und Schulferien ab 2020)

Feiertage und Ferientermine werden wahlweise als JSON oder im iCal-Format zurückgeliefert.

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.

Staaten

Zunächst fragen wir ab, welche Länder von der OpenHolidays API unterstützt werden:

curl -X GET 'https://openholidaysapi.org/Countries' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openholidaysapi.org/Countries' -H 'accept: text/json' | json_pp

Die Codes der Länder entsprechen dem Standard ISO 3166-1.

Sprachen

Die Namen der Feiertage bzw. Schulferien sind mehrsprachig gespeichert. In der Regel gibt es die Übersetzungen in den jeweiligen Amtssprachen eines Landes (z.B. polnisch für Polen) sowie eine Übersetzung ins Deutsche und Englische.

Die von OpenHolidays API derzeit genutzten Sprachen lassen sich wie folgt abfragen:

curl -X GET 'https://openholidaysapi.org/Languages' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openholidaysapi.org/Languages' -H 'accept: text/json' | json_pp

Die Codes der Sprachen entsprechen dem Standard ISO 639-1.

Verwaltungseinheiten

Pro Land können die relevanten subnationale Verwaltungseinheiten (z.B. Bundesländer, Schweizer Kantone oder Ferienzonen) abgefragt werden. Es werden nur dann Verwaltungseinheiten zurückgeliefert, wenn sie relevant für die Filterung von Feiertagen und/oder Schulferien sind.

Hier eine Beispielabfrage für Deutschland (DE):

curl -X GET 'https://openholidaysapi.org/Subdivisions?countryIsoCode=DE' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openholidaysapi.org/Subdivisions?countryIsoCode=DE' -H 'accept: text/json' | json_pp

Die Codes der Verwaltungseinheiten orientieren sich an dem Standard ISO 3166-2 sowie an der Kodierliste Hierarchical administrative subdivision codes (HASC).

Feiertage

Feiertage können pro Land und für einen beliebigen Zeitraum (der nicht größer als drei Jahre sein darf) abgefragt werden. Optional können die Namen der Feiertage auf eine bestimmte Sprache eingeschränkt werden.

Hier eine Beispielabfrage für Schweizer Feiertage zwischen dem 1. Januar 2022 und dem 30. Juni 2022 mit deutscher Ausgabesprache:

curl -X GET 'https://openholidaysapi.org/PublicHolidays?countryIsoCode=CH&languageIsoCode=DE&validFrom=2022-01-01&validTo=2022-06-30' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openholidaysapi.org/PublicHolidays?countryIsoCode=CH&languageIsoCode=DE&validFrom=2022-01-01&validTo=2022-06-30' -H 'accept: text/json' | json_pp

Wer möchte, kann sich die Daten auch im iCal-Format zurückliefern lassen:

curl -X GET 'https://openholidaysapi.org/PublicHolidays?countryIsoCode=CH&languageIsoCode=DE&validFrom=2022-01-01&validTo=2022-06-30' -H 'accept: text/calendar'
curl -X GET 'https://openholidaysapi.org/PublicHolidays?countryIsoCode=CH&languageIsoCode=DE&validFrom=2022-01-01&validTo=2022-06-30' -H 'accept: text/calendar'

Schulferien

Schulferien können pro Land und Verwaltungseinheit sowie für einen beliebigen Zeitraum (der nicht größer als drei Jahre sein darf) abgefragt werden. Optional können die Namen der Schulferien auf eine bestimmte Sprache eingeschränkt werden.

Hier eine Beispielabfrage für Schulferien in Österreich zwischen dem 1. Januar 2022 und dem 31. Dezember 2022 für das Bundesland Kärnten mit englischer Ausgabesprache:

curl -X GET 'https://openholidaysapi.org/SchoolHolidays?countryIsoCode=AT&subdivisionCode=AT-KÄ&languageIsoCode=EN&validFrom=2022-01-01&validTo=2022-12-31' -H 'accept: text/json' | ConvertFrom-Json | ConvertTo-Json
curl -X GET 'https://openholidaysapi.org/SchoolHolidays?countryIsoCode=AT&subdivisionCode=AT-KÄ&languageIsoCode=EN&validFrom=2022-01-01&validTo=2022-12-31' -H 'accept: text/json' | json_pp

Auch hier können die Daten wahlweise im iCal-Format zurückgeliefert werden:

curl -X GET 'https://openholidaysapi.org/SchoolHolidays?countryIsoCode=AT&subdivisionCode=AT-KÄ&languageIsoCode=EN&validFrom=2022-01-01&validTo=2022-12-31' -H 'accept: text/calendar'
curl -X GET 'https://openholidaysapi.org/SchoolHolidays?countryIsoCode=AT&subdivisionCode=AT-KÄ&languageIsoCode=EN&validFrom=2022-01-01&validTo=2022-12-31' -H 'accept: text/calendar'

Tipps und Tricks

Um die Bildschirmausgabe von curl in eine Datei zu schreiben, kann der Parameter -o genutzt werden. Das folgende Beispiel speichert alle deutschen Feiertage für 2022 in eine iCal-Datei, die man z.B. nach Outlook importieren kann.

curl -X GET 'https://openholidaysapi.org/PublicHolidays?countryIsoCode=DE&validFrom=2022-01-01&validTo=2022-12-31' -H 'accept: text/calendar' -o 'kalendar.ics'
curl -X GET 'https://openholidaysapi.org/PublicHolidays?countryIsoCode=DE&validFrom=2022-01-01&validTo=2022-12-31' -H 'accept: text/calendar' -o 'kalendar.ics'