← zurück zu Daten

Daten · selbst abrufen

Das Archiv selbst nutzen — wie du /data/ programmatisch abrufst

Das offene JSON-Archiv dieser Seite liegt unter /data/. Es ist ohne Schlüssel, ohne Anmeldung und von jeder fremden Seite aus per fetch abrufbar. Diese Seite zeigt konkret, wie — mit curl, JavaScript und Python. Was im Archiv steht und wie es entsteht, beschreibt Daten; hier geht es um den Abruf.

Kurz: was da liegt

Ein JSON-Schnappschuss alle sechs Stunden für 25 deutsche Städte: die Tageshöchsttemperatur-Vorhersage von elf Wettermodellen und die echte DWD-Stationsmessung als Gegenprobe. Alles als statische Dateien — kein Backend, keine Datenbank, keine Abfrage-Parameter. Für den Einstieg reichen die ersten drei Dateien; die übrigen kommen dazu, wenn du mehr willst:

Die Details (Herkunft, Aktualisierung, wie Vorhersage und Messung zusammenpassen) stehen auf Daten. Die Modellherkunft und die Grenzen erklärt Methodik & Quellen.

Die URLs

Alles liegt unter https://wetter.kaipfstr.de/data/. Es gibt kein Verzeichnis-Listing — welche Vorhersage-Dateien existieren, steht in index.json. Maßgeblich ist das Feld snapshots: eine Liste von Objekten {file, date, utc} (Dateiname, Ausgabetag, UTC-Zeit des Laufs). Daraus baust du die URL /data/forecasts/<file>. Zusätzlich gibt es forecasts — die distinkten Ausgabetage — für einfache Fälle.

Beispiele zum Abrufen

Drei Wege, dieselben Dateien zu laden. Die Beispiele spiegeln die reale Struktur wider — etwa cities.berlin.tmax in measured.json. Der Slug einer Stadt (z. B. berlin, muenchen, koeln) steht in index.json unter cities[].slug.

curl (Kommandozeile)

# Verzeichnis holen und ansehen
curl -s https://wetter.kaipfstr.de/data/index.json

# gemessene Tageshöchstwerte fuer Berlin herausziehen (mit jq)
curl -s https://wetter.kaipfstr.de/data/measured.json \
  | jq '.cities.berlin.tmax'

# den juengsten Vorhersage-Schnappschuss laden: erst den Dateinamen aus dem
# Verzeichnis holen, dann die Datei. Nicht selbst aus einem Datum zusammenbauen --
# die Namen tragen die Uhrzeit des Laufs.
DATEI=$(curl -s https://wetter.kaipfstr.de/data/index.json | jq -r '.snapshots[-1].file')
curl -s "https://wetter.kaipfstr.de/data/forecasts/$DATEI" \
  | jq '.cities.berlin.tmax.icon_seamless'

JavaScript (fetch, im Browser oder in Node)

const basis = "https://wetter.kaipfstr.de/data";

const res = await fetch(`${basis}/measured.json`);
const daten = await res.json();

const berlin = daten.cities.berlin;
console.log(berlin.station.name);            // z.B. "Berlin-Friedrichshain/Spree"
console.log(berlin.tmax["2026-07-16"]);      // gemessener Tageshöchstwert in Grad C

// CORS ist offen (Access-Control-Allow-Origin: *) — dieser fetch
// funktioniert auch von einer beliebigen fremden Seite aus.

Python (requests)

import requests

basis = "https://wetter.kaipfstr.de/data"

# 1. Verzeichnis: welcher Vorhersage-Schnappschuss ist da?
index = requests.get(f"{basis}/index.json").json()
datei = index["snapshots"][-1]["file"]       # juengster Lauf, MIT Uhrzeit im Namen

# 2. Diesen Schnappschuss laden
fc = requests.get(f"{basis}/forecasts/{datei}").json()
berlin = fc["cities"]["berlin"]
tage = berlin["dates"]                        # Zieltage, zu denen die Reihen passen

for modell, reihe in berlin["tmax"].items():
    for tag, wert in zip(tage, reihe):
        if wert is not None:                  # fehlende Werte sind null / None
            print(modell, tag, wert)

Die Code-Blöcke sind reiner Anzeigetext — diese Seite führt nichts davon aus. Kopiere sie in deine eigene Umgebung.

Schema der drei Dateitypen

Jede Datei trägt ihre Schema-Version im Feld schema. Ändert sich das Format grundlegend, ändert sich diese Kennung — darauf kannst du prüfen. Die folgenden Felder stammen direkt aus den ausgelieferten Dateien.

index.json — Schema wetter.kaipfstr.de/index/1

FeldTypBedeutung
schemaStringSchema-Kennung, hier wetter.kaipfstr.de/index/1.
updated_utcStringZeitpunkt der letzten Aktualisierung, ISO 8601 in UTC.
citiesArrayListe der Städte. Je Eintrag: slug, name, lat, lon.
cities[].slugStringKurzname der Stadt, zugleich der Schlüssel in measured.json und in den Vorhersagen (z. B. berlin, muenchen).
cities[].nameStringAnzeigename der Stadt.
cities[].latZahlBreitengrad.
cities[].lonZahlLängengrad.
modelsArray StringKennungen der einbezogenen Wettermodelle (z. B. icon_seamless, ecmwf_ifs025).
forecastsArray StringDie distinkten Ausgabetage JJJJ-MM-TT, rückwärtskompatibel. Nicht zum Bauen von Datei-URLs geeignet — an einem Tag gibt es mehrere Läufe, und die Dateinamen tragen die Uhrzeit. Dafür ist snapshots da.
snapshotsArray ObjektJeder einzelne Lauf mit file (der Dateiname, den du an /data/forecasts/ anhängst), date (Ausgabetag) und utc (Zeit des Laufs). Das ist das Feld, aus dem die URLs kommen.
measuredStringPfad zur Messdatei, /data/measured.json.
licenseStringLizenzhinweis, wie in der Datei hinterlegt (siehe unten).

measured.json — Schema wetter.kaipfstr.de/measured/1

FeldTypBedeutung
schemaStringSchema-Kennung, hier wetter.kaipfstr.de/measured/1.
updated_utcStringZeitpunkt der letzten Aktualisierung, ISO 8601 in UTC.
sourceStringHerkunft der Messung, hier Bright Sky (DWD historical).
citiesObjektNach Stadt-Slug geschlüsselt: cities.<slug>.
cities.<slug>.nameStringAnzeigename der Stadt.
cities.<slug>.stationObjektDie DWD-Station des zuletzt abgerufenen Tages: name, dwd_station_id, distance_km. Nicht zwingend die Quelle aller Werte dieser Stadt — siehe stationen.
cities.<slug>.stationenArray ObjektAlle Stationen, die im Lauf der Zeit für diese Stadt geliefert haben, gleiche Felder wie oben. Bright Sky wählt je Tag die nächste Station mit Daten; fällt sie aus, ist es am nächsten Tag eine andere. Steht hier mehr als ein Eintrag, stammen die Werte des Archivs nicht alle von derselben Station.
….station.nameStringStationsname (z. B. Berlin-Friedrichshain/Spree).
….station.dwd_station_idStringDWD-Stationskennung.
….station.distance_kmZahlEntfernung der Station vom Stadtpunkt in Kilometern.
cities.<slug>.tmaxObjektNach Datum geschlüsselt: tmax.<JJJJ-MM-TT> = gemessener Tageshöchstwert in Grad Celsius.

forecasts/<datum>.json — Schema wetter.kaipfstr.de/forecasts/1

FeldTypBedeutung
schemaStringSchema-Kennung, hier wetter.kaipfstr.de/forecasts/1.
issuedStringAusgabetag des Schnappschusses, JJJJ-MM-TT — passt zum Dateinamen.
generated_utcStringErzeugungszeitpunkt, ISO 8601 in UTC.
modelsArray StringDie Modelle, die in diesem Schnappschuss enthalten sind.
citiesObjektNach Stadt-Slug geschlüsselt: cities.<slug>.
cities.<slug>.nameStringAnzeigename der Stadt.
cities.<slug>.lat / lonZahlKoordinaten der Stadt.
cities.<slug>.datesArray StringDie Zieltage JJJJ-MM-TT, auf die sich die Vorhersagereihen beziehen (Reihenfolge = Index der tmax-Arrays).
cities.<slug>.tmaxObjektNach Modell geschlüsselt: tmax.<modell> = Array der vorhergesagten Tageshöchstwerte in Grad Celsius, in derselben Reihenfolge wie dates.
….tmax.<modell>[i]Zahl / nullVorhergesagter Wert für dates[i]; null, wenn das Modell für diesen Tag keinen Wert liefert.

Fehlende Werte sind null — nicht jedes Modell reicht gleich weit in die Zukunft. Rechne immer damit und überspringe null, statt es als Zahl zu behandeln.

Zugriff, Cache und Grenzen — ehrlich

Was gilt

CORS
Access-Control-Allow-Origin: * — jede fremde Seite darf die Dateien per fetch laden.
Cache
Cache-Control: public, max-age=3600 — eine Stunde. Ein Abruf kann also bis zu einer Stunde alt sein.
Aktualisierung
Alle sechs Stunden läuft ein neuer Schnappschuss: je eine neue Datei in forecasts/, ensemble/ und warnlage/, und index.json wird neu geschrieben. measured.json wird ebenfalls bei jedem Lauf neu geschrieben, neue Messwerte bringt es wegen des DWD-Verzugs aber nur für einen Tag je Tag: den abgeschlossenen Vortag, sobald der DWD ihn geprüft hat. Der kommt meist auf zwei Läufe verteilt an, für rund ein Drittel der Städte erst mit dem Lauf gegen Mittag deutscher Zeit; wer nur einmal am Tag abruft, holt ihn deshalb am besten am Nachmittag (Einzelheiten auf Daten). Öfter als alle sechs Stunden abzurufen bringt keine neuen Werte. Bis zum 30.09.2026 stand hier: „Die Dateien ändern sich nur einmal täglich; häufigeres Abrufen bringt keine neuen Werte.“ Das widersprach dem Abschnitt oben und galt seit dem 19.07.2026 nur noch für die Messung; wer danach nur einmal am Tag den jüngsten Lauf holte, übersprang drei von vier.
Schlüssel
Keiner. Keine Anmeldung, kein Token, keine Registrierung.
Rate-Limit
Kein zugesagtes Limit — und keine Garantie. Es ist ein privates, statisch gehostetes Nebenprojekt; sei sparsam, cache lokal, verlass dich nicht auf Dauerverfügbarkeit.
Format
Statische JSON-Dateien, keine Abfrage-Parameter, kein Verzeichnis-Listing.

Das ist kein API-Versprechen. Schema-Kennungen und URLs sind stabil gehalten, aber es gibt keine Zusicherung über Verfügbarkeit oder Antwortzeit. Wer darauf aufbaut, sollte einen eigenen Zwischenspeicher führen.

Lizenz & Quellen

Die Vorhersage stammt von Open-Meteo (Modelldaten) und steht unter CC BY 4.0. Die Messung ist eine DWD-Stationsmessung, bezogen über Bright Sky, und unterliegt der DWD GeoNutzV (Quelle: Deutscher Wetterdienst). Genau so steht es auch im Feld license von index.json: CC BY 4.0 (Open-Meteo) / DWD GeoNutzV (Messung).

Verwendest du die Daten weiter, nenne diese Quellen. Die maßgeblichen Nutzungsbedingungen liegen bei der jeweiligen Quelle — siehe die Links oben. Wie die Modelle einbezogen werden und woher jede Zahl kommt, steht unter Methodik & Quellen; was das Archiv genau enthält und wie es entsteht, unter Daten.