Save up to 17% with yearly billing

See pricing

Поиск аэропортов

Готовые к запуску примеры того, как находить аэропорты по названию или местоположению с помощью эндпоинтов поиска аэропортов: текстовое автодополнение и поиск ближайших аэропортов по координатам.

#ВопросИспользуемые данные
1Автодополнение: пользователь вводит «heathrow» — какие аэропорты подходят?/airports/search/text
2Найти три ближайших аэропорта к заданным GPS-координатам/airports/search/location

Требования

Авторизация
x-api-key в каждом запросе (прямая подписка). Подробнее →

Установка

Приведённые ниже скрипты используют requests для вызовов API и rich для вывода в терминал. Установите их один раз:

pip install requests rich

1. Текстовое автодополнение названий аэропортов

Вопрос: автодополнение — пользователь вводит «heathrow»; какие аэропорты подходят?

Эндпоинт /airports/search/text возвращает результаты, ранжированные по релевантности. Используйте ident из первого результата для вызова /airports/search?icao=, чтобы получить полные данные о ВПП, частотах и радионавигационных средствах.

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"


def search_text(query: str, limit: int = 5) -> dict | None:
    r = requests.get(
        f"{BASE}/airports/search/text",
        headers=HEADERS,
        params={"q": query, "limit": limit},
        timeout=(10, 15),
    )
    if r.status_code == 404:
        return None
    r.raise_for_status()
    return r.json()


def main() -> None:
    query = "heathrow"
    result = search_text(query, limit=5)
    if not result:
        console.print("[yellow]No results found.[/]")
        return

    airports = result.get("airports") or []
    found = result.get("airports_found", len(airports))

    table = Table(title=f'Text Search: "{query}" — {found} result(s)')
    table.add_column("ICAO", style="cyan", no_wrap=True)
    table.add_column("IATA")
    table.add_column("Name")
    table.add_column("City")
    table.add_column("Country")
    table.add_column("Relevance", justify="right")

    for apt in airports:
        table.add_row(
            apt.get("ident", "—"),
            apt.get("iata_code", "—"),
            apt.get("name", "—"),
            apt.get("municipality", "—"),
            apt.get("iso_country", "—"),
            f"{apt.get('relevance_score', 0):.2f}",
        )

    console.print(table)

    if airports:
        top_icao = airports[0].get("ident", "")
        console.print(
            f"\n[dim]Top match: [bold]{top_icao}[/bold] — fetch full details with "
            f"[bold]/airports/search?icao={top_icao}[/bold][/]"
        )


if __name__ == "__main__":
    main()

Результат: ранжированная таблица из не более чем 5 аэропортов, соответствующих «heathrow», с кодами ICAO и IATA, названием, городом, страной и оценкой релевантности. Для лучшего результата выводится команда поиска по ICAO-коду.


2. Ближайшие аэропорты к GPS-координатам

Вопрос: найти три ближайших аэропорта к заданным GPS-координатам (широта/долгота).

Эндпоинт /airports/search/location возвращает аэропорты в пределах радиуса, отсортированные по расстоянию. Передайте любой ident в /airports/search?icao=, чтобы получить полные данные о ВПП и частотах.

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"


def search_location(lat: float, lon: float, radius_km: int = 80) -> dict | None:
    r = requests.get(
        f"{BASE}/airports/search/location",
        headers=HEADERS,
        params={"lat": lat, "lon": lon, "radius_km": radius_km},
        timeout=(10, 15),
    )
    if r.status_code == 404:
        return None
    r.raise_for_status()
    return r.json()


def main() -> None:
    # Central London
    lat, lon = 51.5074, -0.1278
    result = search_location(lat, lon, radius_km=80)
    if not result:
        console.print("[yellow]No airports found in radius.[/]")
        return

    airports = result.get("airports") or []
    airports.sort(key=lambda a: a.get("distance_km") or 9999)
    nearest_three = airports[:3]

    table = Table(title=f"Nearest Airports to {lat}°N, {abs(lon)}°W (radius 80 km)")
    table.add_column("ICAO", style="cyan", no_wrap=True)
    table.add_column("Name")
    table.add_column("City")
    table.add_column("Country")
    table.add_column("Distance (km)", justify="right")

    for apt in nearest_three:
        dist = apt.get("distance_km")
        table.add_row(
            apt.get("ident", "—"),
            apt.get("name", "—"),
            apt.get("municipality", "—"),
            apt.get("iso_country", "—"),
            f"{dist:.1f}" if dist is not None else "—",
        )

    console.print(table)
    console.print(
        "\n[dim]Chain any ICAO to [bold]/airports/search?icao={ident}[/bold] "
        "for runway lengths and frequencies.[/]"
    )


if __name__ == "__main__":
    main()

Результат: три ближайших к центру Лондона аэропорта, отсортированные по расстоянию, с ICAO-кодом, названием, городом, страной и расстоянием в км.