Save up to 17% with yearly billing

See pricing

Flugstatus

Ausführbare Beispiele für die Live-Flugverfolgung mit dem Endpoint Flugstatus. Jedes Skript beantwortet eine praktische Frage aus Disposition oder Überwachung — von der Prüfung eines einzelnen Flugs bis zum Aufbau einer Live-Abflugtafel.

#FrageVerwendete Daten
1Wie ist der aktuelle Status von Flug BA123?Flugstatus
2Hat Flug AA100 Verspätung, und wenn ja, wie viel?Flugstatus
3Mehrere Flüge für eine Abflugtafel abfragenFlugstatus

Voraussetzungen

Auth
x-api-key bei jeder Anfrage (Direktabonnement). Mehr erfahren →

Installation

Die folgenden Skripte verwenden requests für API-Aufrufe und rich für die Terminalausgabe. Einmalig installieren:

pip install requests rich

1. Übersicht des aktuellen Flugstatus

Frage: Wie ist der aktuelle Status von Flug BA123?

GET /flight_status/BA123 liefert Live-Informationen zu Abflug und Ankunft. Die Felder für Gate, Terminal und Gepäck sind oft leere Strings — das Skript behandelt diese als unbekannt.

import os

import requests
from rich.console import Console
from rich.panel import Panel
from rich.table import Table

console = Console()

HEADERS = {
    "X-RapidAPI-Key": os.getenv("RAPIDAPI_KEY", "YOUR_RAPIDAPI_KEY"),
    "X-RapidAPI-Host": "skylink-api.p.rapidapi.com",
}
BASE = "https://skylink-api.p.rapidapi.com"

STATUS_STYLE: dict[str, str] = {
    "En Route": "green",
    "Arrived": "green",
    "Departed": "green",
    "Delayed": "yellow",
    "Cancelled": "red",
    "Scheduled": "white",
    "Unknown": "white",
}


def fetch_flight_status(flight_number: str) -> dict | None:
    r = requests.get(
        f"{BASE}/flight_status/{flight_number}",
        headers=HEADERS,
        timeout=(10, 15),
    )
    if r.status_code == 404:
        return None
    r.raise_for_status()
    return r.json()


def fmt_time(scheduled: str | None, actual: str | None) -> str:
    if not scheduled:
        return "—"
    if actual and actual != scheduled:
        return f"{scheduled} (actual {actual})"
    return scheduled


def main() -> None:
    data = fetch_flight_status("BA123")
    if not data:
        console.print("[yellow]Flight BA123 not found.[/]")
        return

    status = data.get("status", "Unknown")
    style = STATUS_STYLE.get(status, "white")
    dep = data.get("departure", {})
    arr = data.get("arrival", {})

    table = Table(title=f"Flight {data.get('flight_number', 'BA123')}")
    table.add_column("Field", style="cyan", min_width=20)
    table.add_column("Value")

    table.add_row("Airline", data.get("airline", "—"))
    table.add_row("Status", f"[{style}]{status}[/]")
    table.add_row("Aircraft", data.get("aircraft_type") or "—")
    table.add_row("Departure airport", f"{dep.get('airport_name', '—')} ({dep.get('airport', '—')})")
    table.add_row("Departure time", fmt_time(dep.get("scheduled_time"), dep.get("actual_time")))
    table.add_row("Arrival airport", f"{arr.get('airport_name', '—')} ({arr.get('airport', '—')})")
    table.add_row("Arrival time", fmt_time(arr.get("scheduled_time"), arr.get("actual_time")))

    delay = data.get("delay_minutes")
    if delay:
        table.add_row("Delay", f"[yellow]{delay} min[/]")

    console.print(table)


if __name__ == "__main__":
    main()

Ausgabe: Eine Tabelle mit Fluggesellschaft, Status (farbcodiert), Flugzeugtyp, Abflug- und Zielflughafen mit planmäßigen Zeiten sowie den Verspätungsminuten, sofern diese nicht null sind. Die tatsächliche Zeit wird angezeigt, wenn sie von der planmäßigen abweicht.


2. Verspätungsprüfung für einen bestimmten Flug

Frage: Hat Flug AA100 Verspätung, und wenn ja, wie viel?

import os

import requests
from rich.console import Console
from rich.panel import Panel
from rich.table import Table

console = Console()

HEADERS = {
    "X-RapidAPI-Key": os.getenv("RAPIDAPI_KEY", "YOUR_RAPIDAPI_KEY"),
    "X-RapidAPI-Host": "skylink-api.p.rapidapi.com",
}
BASE = "https://skylink-api.p.rapidapi.com"


def fetch_flight_status(flight_number: str) -> dict | None:
    r = requests.get(
        f"{BASE}/flight_status/{flight_number}",
        headers=HEADERS,
        timeout=(10, 15),
    )
    if r.status_code == 404:
        return None
    r.raise_for_status()
    return r.json()


def main() -> None:
    data = fetch_flight_status("AA100")
    if not data:
        console.print("[yellow]Flight AA100 not found.[/]")
        return

    status = data.get("status", "Unknown")
    delay = data.get("delay_minutes") or 0
    dep = data.get("departure", {})

    gate = dep.get("gate", "") or ""
    terminal = dep.get("terminal", "") or ""
    gate_info = f"Gate {gate}" if gate else "Gate unknown"
    terminal_info = f"Terminal {terminal}" if terminal else "Terminal unknown"

    if delay > 0:
        body = (
            f"Flight {data.get('flight_number', 'AA100')} is delayed by [red bold]{delay} minutes[/].\n"
            f"Current status: {status}\n"
            f"Departure: {terminal_info}, {gate_info}"
        )
        console.print(Panel(body, title="[red]Delay Warning[/]", style="red"))
    else:
        body = (
            f"Flight {data.get('flight_number', 'AA100')} is on time.\n"
            f"Current status: {status}\n"
            f"Departure: {terminal_info}, {gate_info}"
        )
        console.print(Panel(body, title="[green]On Time[/]", style="green"))


if __name__ == "__main__":
    main()

Ausgabe: Ein farbiges Panel — rot mit den Verspätungsminuten, wenn der Flug verspätet ist, grün, wenn er pünktlich ist. Enthält den aktuellen Status sowie Abfluggate und Terminal, sofern verfügbar.


3. Live-Abflugtafel (mehrere Flüge)

Frage: Mehrere Flüge abfragen und eine kompakte Abflugtafel anzeigen.

import os

import requests
from rich.console import Console
from rich.table import Table

console = Console()

HEADERS = {
    "X-RapidAPI-Key": os.getenv("RAPIDAPI_KEY", "YOUR_RAPIDAPI_KEY"),
    "X-RapidAPI-Host": "skylink-api.p.rapidapi.com",
}
BASE = "https://skylink-api.p.rapidapi.com"

FLIGHTS = ["BA123", "AA100", "UA1"]

STATUS_STYLE: dict[str, str] = {
    "En Route": "green",
    "Arrived": "green",
    "Departed": "green",
    "Delayed": "yellow",
    "Cancelled": "red",
    "Scheduled": "white",
    "Unknown": "dim",
}


def fetch_flight_status(flight_number: str) -> dict | None:
    r = requests.get(
        f"{BASE}/flight_status/{flight_number}",
        headers=HEADERS,
        timeout=(10, 15),
    )
    if r.status_code == 404:
        return None
    r.raise_for_status()
    return r.json()


def main() -> None:
    table = Table(title="Departure Board")
    table.add_column("Flight", style="cyan")
    table.add_column("Airline")
    table.add_column("Status")
    table.add_column("Dep", min_width=5)
    table.add_column("Arr", min_width=5)
    table.add_column("Gate")

    for flight_number in FLIGHTS:
        try:
            data = fetch_flight_status(flight_number)
        except requests.HTTPError as exc:
            table.add_row(flight_number, "—", f"[red]Error {exc.response.status_code}[/]", "—", "—", "—")
            continue

        if not data:
            table.add_row(flight_number, "—", "[dim]Not found[/]", "—", "—", "—")
            continue

        status = data.get("status", "Unknown")
        style = STATUS_STYLE.get(status, "white")
        dep = data.get("departure", {})
        arr = data.get("arrival", {})
        gate = dep.get("gate", "") or "—"
        dep_time = dep.get("actual_time") or dep.get("scheduled_time") or "—"
        arr_time = arr.get("estimated_time") or arr.get("scheduled_time") or "—"

        table.add_row(
            data.get("flight_number", flight_number),
            data.get("airline", "—"),
            f"[{style}]{status}[/]",
            dep_time,
            arr_time,
            gate,
        )

    console.print(table)


if __name__ == "__main__":
    main()

Ausgabe: Eine kompakte Tabelle mit einer Zeile pro Flug, die Flugnummer, Fluggesellschaft, farbcodierten Status, Abflugzeit, Ankunftszeit und Gate zeigt. Flüge, die 404 zurückgeben, werden als „Not found“ angezeigt, ohne dass die Tafel abstürzt.