Fehlerbehandlung
Caching und Monitoring: Caching & Monitoring.
Plattformweite Fehler (401, 403, 422, 429, 5xx, Wiederholungsversuche/Backoff, Rate-Limit-Header): Fehlerbehandlung.
Flugzeit: 422 — nicht erkannte Flughafencodes
GET /ml/flight-time prüft, ob sowohl from als auch to bekannten Flughäfen zugeordnet werden können. Ein unbekannter oder fehlerhafter Code liefert 422 mit einer Detailmeldung, die angibt, welcher Code fehlgeschlagen ist.
| Code | Bedeutung | Lösung |
|---|---|---|
422 | from oder to nicht erkannt | Verwenden Sie einen gültigen ICAO-Code (4 Buchstaben, z. B. KJFK) oder IATA-Code (3 Buchstaben, z. B. JFK). Auflösung über die Flughafensuche. |
404 | Keine Routendaten für dieses Paar | Dem Modell fehlen ausreichende historische Daten für dieses Städtepaar. Zeigen Sie „Schätzung nicht verfügbar.“ an. |
Hinweis: Das Ergebnis ist ein statistischer Durchschnitt auf Basis historischer Betriebsdaten — keine Echtzeitvorhersage. Wind und aktuelle Bedingungen auf der Strecke fließen nicht in das Modell ein. Weisen Sie darauf hin, wenn Sie Passagieren oder Flugplanern Schätzungen anzeigen.
import os
import requests
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_time(origin: str, destination: str, aircraft: str | None = None) -> dict | None:
"""
Fetch ML flight time estimate. Returns None on 404 (no data for pair).
Raises ValueError on 422 (invalid airport code).
"""
params: dict[str, str] = {"from": origin, "to": destination}
if aircraft:
params["aircraft"] = aircraft
r = requests.get(
f"{BASE}/ml/flight-time",
headers=HEADERS,
params=params,
timeout=(10, 15),
)
if r.status_code == 404:
return None
if r.status_code == 422:
detail = r.json().get("detail", "invalid airport code")
raise ValueError(f"422 Unprocessable: {detail}")
r.raise_for_status()
return r.json()
# Valid request — KJFK to KLAX
if __name__ == "__main__":
data = fetch_flight_time("KJFK", "KLAX", aircraft="B738")
if data:
print(
f"Estimated: {data['estimated_hours_display']} "
f"({data['min_minutes']}–{data['max_minutes']} min range)"
)
print("Statistical average — actual time varies with winds and routing.")
else:
print("No estimate available for this route.")
try:
fetch_flight_time("ZZZZ", "KLAX")
except ValueError as exc:
print(f"Caught expected error: {exc}")CO₂: 422 — fehlende Pflichtparameter
GET /carbon/estimate erfordert entweder ein Flughafenpaar (departure_icao + arrival_icao) oder ein callsign. Fehlen beide, wird 422 zurückgegeben.
| Code | Bedeutung | Lösung |
|---|---|---|
422 | Weder Flughafenpaar noch callsign angegeben | Geben Sie departure_icao + arrival_icao oder ein callsign an. |
422 | Nicht erkannter Flughafencode | Stellen Sie sicher, dass die ICAO-Codes gültige vierstellige Kennungen sind. Auflösung über die Flughafensuche. |
404 | Keine Emissionsdaten für dieses Paar | Die Route liegt außerhalb der Modellabdeckung. Zeigen Sie „Schätzung nicht verfügbar.“ an. |
RFI-Hinweispflicht: Mit include_rfi=true wird ein Multiplikator nach dem Radiative Forcing Index (~2×) auf den CO₂-Basiswert angewendet. Erscheint rfi_applied: true in der Antwort, weisen Sie in der Benutzeroberfläche darauf hin, dass der angezeigte Wert über CO₂ hinausgehende klimawirksame Effekte enthält (gemäß den Vorgaben von ICAO Doc 9988).
import os
import requests
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_carbon(
departure_icao: str | None = None,
arrival_icao: str | None = None,
callsign: str | None = None,
passengers: int = 1,
include_rfi: bool = False,
) -> dict | None:
"""
Fetch carbon estimate. Requires departure_icao+arrival_icao or callsign.
Returns None on 404. Raises ValueError on 422.
"""
params: dict[str, str | int] = {
"passengers": passengers,
"include_rfi": str(include_rfi).lower(),
}
if departure_icao:
params["departure_icao"] = departure_icao
if arrival_icao:
params["arrival_icao"] = arrival_icao
if callsign:
params["callsign"] = callsign
r = requests.get(
f"{BASE}/carbon/estimate",
headers=HEADERS,
params=params,
timeout=(10, 15),
)
if r.status_code == 404:
return None
if r.status_code == 422:
detail = r.json().get("detail", "validation error")
raise ValueError(f"422 Unprocessable: {detail}")
r.raise_for_status()
return r.json()
# 1. Attempt without required params — expect 422
if __name__ == "__main__":
try:
fetch_carbon()
except ValueError as exc:
print(f"Missing params error: {exc}")
data = fetch_carbon(departure_icao="KJFK", arrival_icao="KLAX", passengers=1)
if data:
co2 = data.get("co2_kg_per_passenger", 0.0)
rfi = data.get("rfi_applied", False)
print(f"CO₂/passenger: {co2:.1f} kg (RFI applied: {rfi})")
if rfi:
print(
"Disclosure: figure includes radiative forcing effects "
"(~2× base CO₂, ICAO Doc 9988)."
)
else:
print("No estimate available for this route.")Für vorübergehende Fehler (429, 5xx) verwenden Sie die Hilfsfunktion für Wiederholungsversuche unter Fehlerbehandlung.
Siehe auch: Flugzeit · CO₂-Emissionen · Caching & Monitoring · Fehlerbehandlung