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.
| # | Frage | Verwendete Daten |
|---|---|---|
| 1 | Wie ist der aktuelle Status von Flug BA123? | Flugstatus |
| 2 | Hat Flug AA100 Verspätung, und wenn ja, wie viel? | Flugstatus |
| 3 | Mehrere Flüge für eine Abflugtafel abfragen | Flugstatus |
Voraussetzungen
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 rich1. Ü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.