Skip to content
IRC-CodingIRC-Coding
APIOpenSkyRESTFlugzeugdatenTutorialCodebeispiele

OpenSky Network API einbinden: Tutorial mit Codebeispielen

Lerne, wie Du die OpenSky Network API verwendest, Flugzeugdaten abrufst und die Daten mit JavaScript, Python und C# verarbeitest.

I

IRC-Coding Team

6 min read
OpenSky Network API Tutorial mit Flugzeugpositionsdaten

OpenSky Network API einbinden: Tutorial mit Codebeispielen

Die OpenSky Network API liefert Echtzeitdaten zu Flugzeugen aus einem weltweiten Netzwerk von ADS-B-Empfängern. In diesem OpenSky Network API Tutorial lernst Du, wie Du Flugzeugpositionen, Geschwindigkeiten und Höhen abrufst, welche Limits es gibt und wie Du die API in JavaScript, Python und C# einbindest. Die API ist kostenlos nutzbar, ohne API-Key ist der Zugriff jedoch eingeschränkt.

OpenSky Network API direkt ausprobieren

Gib im folgenden Formular eine ICAO24-Adresse ein oder lasse das Feld leer, um aktuelle Flugzeugdaten für Deutschland abzurufen. Die Demo ruft die Daten über eine serverseitige Proxy-Route ab und zeigt die wichtigsten Werte an.

OpenSky Network API direkt ausprobieren

Gib eine ICAO24-Kennung ein (6 hexadezimale Zeichen, z.B. 3c6751). Du findest ICAO24-Codes auf Flug-Tracking-Seiten wie Flightradar24. Lässt Du das Feld leer, werden aktuelle Flugzeuge über Deutschland abgerufen. Mit Weltweit nach ICAO24 suchst Du gezielt ein Flugzeug weltweit.

Beim Absenden stellt Dein Browser eine Verbindung zu unserer Server-Route her. Diese ruft die OpenSky Network API ab und überträgt dabei keine vertraulichen Daten an Dritte.

Was passiert bei dieser API-Anfrage?

  1. Die Demo nimmt die optionale ICAO24-Adresse aus dem Eingabefeld.
  2. Sie ruft die interne Route /api/opensky mit den Parametern auf.
  3. Die Server-Route validiert die Eingabe und sendet einen Request an https://opensky-network.org/api/states/all.
  4. Die OpenSky API antwortet anonym, da kein API-Key erforderlich ist.
  5. Die Antwort enthält ein Array mit Flugzeugzuständen im JSON-Format.
  6. Die Demo zeigt ICAO24, Callsign, Land, Position, Höhe und Geschwindigkeit in einer Tabelle an.

Was ist die OpenSky Network API?

Die OpenSky Network API wird vom OpenSky Network betrieben, einem Community- und Forschungsprojekt für die Erfassung von Flugzeugsignalen. Die API stellt aktuelle und historische Flugzeugpositionen bereit, die aus ADS-B-Nachrichten gesammelt werden.

Die wichtigsten Daten sind Position, Höhe, Geschwindigkeit, Richtung, Callsign und Herkunftsland. Anwendungsfälle reichen von Flugtrackern über Forschungsprojekte bis hin zu Luftverkehrsanalysen. Der API-Typ ist REST, das Antwortformat JSON. Du kannst Requests ohne Authentifizierung senden, für höhere Limits empfiehlt sich aber ein registrierter Account.

Funktionen und mögliche Einsatzgebiete

FunktionBeschreibungMöglicher Einsatz
Aktuelle FlugzeugpositionenBreite, Länge, Höhe und GeschwindigkeitFlugtracker, Karten-Visualisierung
ZustandsvektorenKompletter Datensatz pro FlugzeugLuftverkehrsanalyse, Forschung
Bounding-Box-FilterAbfrage auf ein geografisches Gebiet beschränkenRegionale Überwachung
Historische DatenAbfragen zu einem bestimmten ZeitpunktStatistiken und Berichte
ICAO24-FilterAbfrage eines bestimmten FlugzeugsFokus auf einzelne Flüge

Voraussetzungen

Für die Codebeispiele benötigst Du:

  • Eine Internetverbindung
  • Eine aktuelle Version von Node.js für JavaScript-Beispiele
  • Python 3.10 oder neuer für die Python-Beispiele
  • .NET 6 oder neuer für die C#-Beispiele
  • Grundkenntnisse in REST und JSON
  • Ein OpenSky-Account empfohlen, aber nicht zwingend erforderlich

Ist die OpenSky Network API kostenlos?

Ja, die OpenSky Network API ist grundsätzlich kostenlos nutzbar. Ohne Anmeldung gelten jedoch Einschränkungen bei der Datenaktualität und den abrufbaren Datenfeldern. Registrierte Nutzer erhalten höhere Rate-Limits und aktuellere Daten. Für die Codebeispiele in diesem Tutorial reicht der kostenlose anonyme Zugriff aus.

OpenSky Network API ohne API-Key verwenden

Du kannst die meisten Endpunkte ohne API-Key nutzen. Die Rückgabe ist auf 15 Sekunden verzögert und bestimmte Felder wie geo_altitude oder squawk sind möglicherweise eingeschränkt. Für produktive Anwendungen solltest Du Dich registrieren und die Zugangsdaten über Umgebungsvariablen laden.

Basis-URL, Endpunkte und HTTP-Methoden

ZweckHTTP-MethodeEndpunktAuthentifizierung
Aktuelle ZustandsvektorenGEThttps://opensky-network.org/api/states/allOptional
Eigenen EmpfangsstatistikGEThttps://opensky-network.org/api/sensors/own/statesAPI-Key
Historische ZuständeGEThttps://opensky-network.org/api/states/ownAPI-Key

In diesem Tutorial verwenden wir states/all, da er ohne Authentifizierung funktioniert.

Wichtige Parameter

ParameterErforderlichDatentypBeschreibungBeispiel
laminNeinFloatSüdlicher Breitengrad der Bounding-Box47.0
lamaxNeinFloatNördlicher Breitengrad der Bounding-Box55.0
lominNeinFloatWestlicher Längengrad der Bounding-Box5.0
lomaxNeinFloatÖstlicher Längengrad der Bounding-Box15.0
icao24NeinStringHexadezimale ICAO24-Adresse3c6751
timeNeinIntegerUnix-Zeitstempel für historische Daten1699123200

Wenn Du lamin, lamax, lomin und lomax kombinierst, erhältst Du nur Flugzeuge innerhalb der definierten Bounding-Box.

Ersten API-Request senden

Ein minimaler curl-Request für Flugzeuge über Deutschland sieht so aus:

curl --request GET \
  --url "https://opensky-network.org/api/states/all?lamin=47.0&lamax=55.0&lomin=5.0&lomax=15.0" \
  --header "Accept: application/json"

Der Endpunkt states/all liefert ein JSON-Objekt mit dem Zeitstempel time und dem Array states. Jedes Element in states ist ein Array mit 17 Werten.

Antwort der API verstehen

Eine gekürzte Antwort kann so aussehen:

{
  "time": 1699123456,
  "states": [
    [
      "3c6751",
      "DLH1AB  ",
      "Germany",
      1699123454,
      1699123455,
      8.6789,
      50.1234,
      9753.6,
      false,
      232.5,
      84.3,
      0.0,
      null,
      9800.1,
      "3552",
      false,
      0
    ]
  ]
}
JSON-FeldIndexDatentypBedeutung
icao240StringEindeutige hexadezimale Flugzeugkennung
callsign1StringRufzeichen des Fluges
origin_country2StringRegistrierungsland
longitude5FloatLängengrad
latitude6FloatBreitengrad
baro_altitude7FloatBarometrische Höhe in Metern
velocity9FloatGeschwindigkeit in m/s
vertical_rate11FloatSteigrate in m/s

OpenSky Network API mit JavaScript verwenden

async function fetchFlights() {
  const url = new URL('https://opensky-network.org/api/states/all');
  url.searchParams.set('lamin', '47.0');
  url.searchParams.set('lamax', '55.0');
  url.searchParams.set('lomin', '5.0');
  url.searchParams.set('lomax', '15.0');

  try {
    const response = await fetch(url.toString(), {
      headers: { Accept: 'application/json' },
    });

    if (!response.ok) {
      throw new Error(`HTTP-Fehler: ${response.status}`);
    }

    const data = await response.json();

    if (!data.states || data.states.length === 0) {
      console.log('Keine Flugzeugdaten verfügbar.');
      return;
    }

    const [icao24, callsign, originCountry, , , longitude, latitude, baroAltitude, , velocity] = data.states[0];

    console.log(`Flugzeug: ${callsign} (${icao24})`);
    console.log(`Land: ${originCountry}`);
    console.log(`Position: ${latitude}, ${longitude}`);
    console.log(`Höhe: ${baroAltitude} m`);
    console.log(`Geschwindigkeit: ${velocity} m/s`);
  } catch (error) {
    console.error('Fehler beim Abrufen:', error.message);
  }
}

fetchFlights();

OpenSky Network API mit Python verwenden

import requests


def fetch_flights():
    url = "https://opensky-network.org/api/states/all"
    params = {
        "lamin": "47.0",
        "lamax": "55.0",
        "lomin": "5.0",
        "lomax": "15.0",
    }

    try:
        response = requests.get(url, params=params, timeout=10)
        response.raise_for_status()
        data = response.json()

        if not data.get("states"):
            print("Keine Flugzeugdaten verfügbar.")
            return

        row = data["states"][0]
        icao24 = row[0]
        callsign = row[1]
        origin_country = row[2]
        longitude = row[5]
        latitude = row[6]
        baro_altitude = row[7]
        velocity = row[9]

        print(f"Flugzeug: {callsign} ({icao24})")
        print(f"Land: {origin_country}")
        print(f"Position: {latitude}, {longitude}")
        print(f"Höhe: {baro_altitude} m")
        print(f"Geschwindigkeit: {velocity} m/s")
    except requests.exceptions.RequestException as error:
        print(f"Fehler beim Abrufen: {error}")


fetch_flights()

OpenSky Network API mit C# verwenden

using System;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;

class OpenSkyExample
{
    static async Task Main()
    {
        using var client = new HttpClient();

        var url = "https://opensky-network.org/api/states/all?lamin=47.0&lamax=55.0&lomin=5.0&lomax=15.0";
        client.DefaultRequestHeaders.Add("Accept", "application/json");

        try
        {
            var response = await client.GetAsync(url);
            response.EnsureSuccessStatusCode();

            var json = await response.Content.ReadAsStringAsync();
            var data = JsonSerializer.Deserialize<JsonElement>(json);

            if (!data.TryGetProperty("states", out var states) || states.GetArrayLength() == 0)
            {
                Console.WriteLine("Keine Flugzeugdaten verfügbar.");
                return;
            }

            var first = states[0];
            string icao24 = first[0].GetString();
            string callsign = first[1].GetString();
            string originCountry = first[2].GetString();
            double longitude = first[5].GetDouble();
            double latitude = first[6].GetDouble();
            double baroAltitude = first[7].GetDouble();
            double velocity = first[9].GetDouble();

            Console.WriteLine($"Flugzeug: {callsign} ({icao24})");
            Console.WriteLine($"Land: {originCountry}");
            Console.WriteLine($"Position: {latitude}, {longitude}");
            Console.WriteLine($"Höhe: {baroAltitude} m");
            Console.WriteLine($"Geschwindigkeit: {velocity} m/s");
        }
        catch (HttpRequestException error)
        {
            Console.WriteLine($"Fehler beim Abrufen: {error.Message}");
        }
    }
}

Typische Fehler und Lösungen

Fehler oder StatuscodeMögliche UrsacheLösung
400 Bad RequestUngültige Parameter oder Bounding-BoxPrüfe die Werte für lamin, lamax, lomin, lomax
401 UnauthorizedAPI-Key fehlt oder ungültigAPI-Key in Header überprüfen
403 ForbiddenZugriff auf geschützten EndpunktEndpunkt oder Berechtigungen prüfen
429 Too Many RequestsRate-Limit überschrittenWartezeit einbauen oder Account registrieren
500 Internal Server ErrorServerseitiges ProblemSpäter erneut versuchen

Rate-Limits und zuverlässige Fehlerbehandlung

Die OpenSky Network API erlaubt anonymen Nutzern nur wenige Requests pro Zeiteinheit. Implementiere deshalb Wartezeiten, Caching und ein robustes Retry-Verhalten. Ein einfaches exponentielles Backoff in Python sieht so aus:

import time
import requests


def fetch_with_retry(url, params, max_retries=3):
    for attempt in range(max_retries):
        try:
            response = requests.get(url, params=params, timeout=10)
            if response.status_code == 429:
                wait = 2 ** attempt
                print(f"Rate-Limit, warte {wait} Sekunden...")
                time.sleep(wait)
                continue
            response.raise_for_status()
            return response.json()
        except requests.exceptions.RequestException:
            if attempt == max_retries - 1:
                raise
            time.sleep(2 ** attempt)
    return None

Achte darauf, API-Keys niemals im Quellcode zu speichern. Lade sie stattdessen aus Umgebungsvariablen oder einer sicheren Konfiguration.

Datenschutz, Lizenz und kommerzielle Nutzung

Bei der Verwendung der OpenSky Network API werden Daten an den Betreiber übertragen. Dazu gehört Deine IP-Adresse und die angefragten Parameter. Die gelieferten Flugzeugdaten unterliegen den Nutzungsbedingungen von OpenSky. Für kommerzielle Nutzung prüfe bitte die offiziellen Lizenzbedingungen. Diese Seite stellt keine Rechtsberatung dar.

Wann eignet sich die OpenSky Network API?

Die API eignet sich für Projekte, die öffentliche Flugbewegungen anzeigen oder analysieren möchten. Sie ist weniger geeignet, wenn Du Echtzeitdaten ohne Verzögerung benötigst oder kommerzielle Anwendungen mit hohen Anforderungen planst. In solchen Fällen kann ein kostenpflichtiger Flugdaten-Dienst die bessere Wahl sein.

Häufige Fragen zur OpenSky Network API

Ist die OpenSky Network API kostenlos?

Ja, der Basizugriff ist kostenlos. Für höhere Limits und aktuellere Daten ist ein registrierter Account empfohlen.

Benötige ich einen API-Key?

Für states/all nicht. Für erweiterte Endpunkte und höhere Limits ist ein API-Key nötig.

Welche Programmiersprachen kann ich verwenden?

Du kannst jede Sprache mit HTTP-Client verwenden. In diesem Tutorial findest Du Beispiele für JavaScript, Python und C#.

Welches Datenformat liefert die API?

Die API liefert JSON.

Wie hoch ist das Rate-Limit?

Für anonyme Nutzer ist das Limit sehr gering. Die genauen Werte findest Du in der offiziellen Dokumentation.

Darf ich die API kommerziell verwenden?

Das hängt von den Nutzungsbedingungen ab. Prüfe diese vor einer kommerziellen Verwendung.

Was bedeutet der Statuscode 429?

Statuscode 429 bedeutet, dass Du das Rate-Limit überschritten hast. Warte einen Moment oder reduziere die Anfragefrequenz.

Gibt es eine offizielle Dokumentation?

Ja, die offizielle Dokumentation findest Du unter OpenSky Network REST API.

Weiterführende Dokumentation und Quellen

Letzter inhaltlicher Prüfstand: 2026-07-23

Zurück zum Blog
Share:

Ähnliche Beiträge