Flugzeugsuche
Lauffähige Beispiele, um Kennzeichen und ICAO-Hexcodes in Metadaten von Luftfahrzeugen aufzulösen. Felddefinitionen und Antwortstruktur finden Sie in der vollständigen Referenz Flugzeugsuche.
| # | Frage | Verwendete Daten |
|---|---|---|
| 1 | Welcher Flugzeugtyp fliegt unter dem Kennzeichen N636JB, und wer ist der Betreiber? | /aircraft/registration/{registration} |
| 2 | Ein Foto eines Flugzeugs anhand des Kennzeichens für eine Flottenanzeige abrufen | /aircraft/registration/{registration} mit photos=true |
| 3 | Drei Kennzeichen gebündelt in Typen und Betreiber auflösen | /aircraft/registration/{registration} |
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. Kennzeichen in Flugzeugtyp und Betreiber auflösen
Frage: Welcher Flugzeugtyp ist N636JB, und wer betreibt das Flugzeug?
Registerabfragen sind der Ausgangspunkt für Analysen der Flottenzusammensetzung, Fotoanzeigen und die Verkettung mit Leistungsdaten. Das Feld found gibt Ihnen eine eindeutige Auskunft darüber, ob das Kennzeichen im SkyLink-Luftfahrzeugregister existiert.
import os
import requests
from rich.console import Console
from rich.panel import Panel
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"
REGISTRATION = "N636JB"
def fetch_aircraft(registration: str) -> dict | None:
r = requests.get(
f"{BASE}/aircraft/registration/{registration}",
headers=HEADERS,
timeout=(10, 15),
)
if r.status_code == 404:
return None
r.raise_for_status()
return r.json()
def main() -> None:
data = fetch_aircraft(REGISTRATION)
if data is None or not data.get("found"):
console.print(f"[yellow]⚠ Registration {REGISTRATION} not found in registry.[/yellow]")
return
ac = data["aircraft"]
lines = [
f"[bold]Registration:[/bold] {ac['registration']}",
f"[bold]ICAO24:[/bold] {ac['icao24']}",
f"[bold]ICAO Type:[/bold] {ac['icao_type']}",
f"[bold]Full Name:[/bold] {ac['type_name']}",
f"[bold]Operator:[/bold] {ac['owner_operator']}",
]
console.print(Panel("\n".join(lines), title=f"Aircraft — {REGISTRATION}", border_style="cyan"))
if __name__ == "__main__":
main()Ausgabe: Ein Panel mit Kennzeichen, Hexcode, ICAO-Musterkennung, vollständigem Typnamen und Betreiber.
Tipp: Speichern Sie Registerantworten bis zu 24 Stunden im Cache — Registrierungsdaten von Luftfahrzeugen ändern sich selten, und wiederholte Abfragen desselben Kennzeichens verbrauchen unnötig Kontingent.
2. Flugzeugfoto anhand des Kennzeichens abrufen
Frage: Gibt es für N636JB ein Community-Foto, das ich in einer Flottenkarte anzeigen kann?
Übergeben Sie photos=true, um das Array photos in die Antwort aufzunehmen. Fotos stammen aus der Community und sind nicht immer vorhanden — prüfen Sie vor dem Rendern die Länge des Arrays.
import os
import requests
from rich.console import Console
from rich.panel import Panel
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"
REGISTRATION = "N636JB"
def fetch_aircraft_with_photos(registration: str) -> dict | None:
r = requests.get(
f"{BASE}/aircraft/registration/{registration}",
headers=HEADERS,
params={"photos": "true"},
timeout=(10, 15),
)
if r.status_code == 404:
return None
r.raise_for_status()
return r.json()
def main() -> None:
data = fetch_aircraft_with_photos(REGISTRATION)
if data is None or not data.get("found"):
console.print(f"[yellow]⚠ Registration {REGISTRATION} not found.[/yellow]")
return
ac = data["aircraft"]
photos = ac.get("photos") or []
if not photos:
console.print(f"[yellow]No photos available for {REGISTRATION}.[/yellow]")
console.print("Photos are community-sourced and may not be present for every aircraft.")
return
first_photo = photos[0]["image"]
icao_type = ac["icao_type"]
lines = [
f"[bold]Registration:[/bold] {ac['registration']}",
f"[bold]Type:[/bold] {ac['type_name']}",
f"[bold]Operator:[/bold] {ac['owner_operator']}",
f"[bold]Photo URL:[/bold] [link={first_photo}]{first_photo}[/link]",
f"[bold]Total photos:[/bold] {len(photos)}",
]
console.print(Panel("\n".join(lines), title="Fleet Card", border_style="blue"))
console.print(
f"\n[dim]Chain to /aircraft/performance/{icao_type} for performance specs.[/dim]"
)
if __name__ == "__main__":
main()Ausgabe: Ein Panel mit der URL des ersten Fotos, dem Typ und dem Betreiber. Sind keine Fotos verfügbar, wird eine Warnung ausgegeben.
Nächster Schritt: Verketten Sie die Abfrage über das Feld
icao_typemit/aircraft/performance/{icao_type}, um zusätzlich zum Foto die Leistungsdaten abzurufen.
3. Gebündelte Abfrage: mehrere Kennzeichen in Typen auflösen
Frage: Welche Typen und Betreiber gehören zu einer Liste von Kennzeichen aus verschiedenen Registern?
Verwenden Sie ThreadPoolExecutor, um Kennzeichen parallel abzurufen. Behandeln Sie found=false für nicht registrierte oder unbekannte Luftfahrzeuge ohne Absturz.
import os
from concurrent.futures import ThreadPoolExecutor, as_completed
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"
REGISTRATIONS = ["N636JB", "G-EUUU", "D-AIBL"]
def fetch_aircraft(registration: str) -> tuple[str, dict | None]:
r = requests.get(
f"{BASE}/aircraft/registration/{registration}",
headers=HEADERS,
timeout=(10, 15),
)
if r.status_code == 404:
return registration, None
r.raise_for_status()
return registration, r.json()
def main() -> None:
results: dict[str, dict | None] = {}
with ThreadPoolExecutor(max_workers=5) as pool:
futures = {pool.submit(fetch_aircraft, reg): reg for reg in REGISTRATIONS}
for future in as_completed(futures):
reg, data = future.result()
results[reg] = data
table = Table(title="Batch Aircraft Lookup", border_style="cyan")
table.add_column("Registration", style="bold")
table.add_column("Found", justify="center")
table.add_column("ICAO Type")
table.add_column("Full Name")
table.add_column("Operator")
for reg in REGISTRATIONS:
data = results.get(reg)
if data is None or not data.get("found"):
table.add_row(reg, "[red]✗[/red]", "—", "—", "—")
else:
ac = data["aircraft"]
table.add_row(
ac["registration"],
"[green]✓[/green]",
ac["icao_type"],
ac["type_name"],
ac["owner_operator"],
)
console.print(table)
if __name__ == "__main__":
main()Ausgabe: Eine Tabelle mit einer Zeile pro Kennzeichen: Registration | Found | ICAO Type | Full Name | Operator. Nicht aufgelöste Kennzeichen zeigen ✗ und Gedankenstriche.
Flugplatzkarten
PDFs von Flugplatzkarten für 91 Länder – Quellen sowie die Kategorien GEN, GND, SID, STAR und APP mit automatischer Quellenauswahl.
Leistungsdaten
Leistungsprofile von Luftfahrzeugen integrieren — Daten nach ICAO Doc 8643 für die Planung von Reichweite, Geschwindigkeit und Wirbelschleppenkategorie.