Позывной → маршрут
Сопоставьте текущий позывной (позывной рейса, транслируемый по ADS-B, например BAW178) с аэропортами вылета и прибытия. Если в SkyLink есть точное совпадение позывного, ответ содержит departure_icao и arrival_icao с confidence: "high". Если точного позывного нет, API возвращает резервный список маршрутов на уровне авиакомпании в массиве routes (та же структура, что и у маршрутов аэропорта).
Требования
x-api-key в каждом запросе (прямая подписка). Подробнее →Запрос
https://data.skylinkapi.com/v3.1/routes/callsign/{callsign}| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
callsign | string | Да | Параметр пути с позывным рейса — код авиакомпании и числовой суффикс, например BAW178 |
Ответ
Пример точного совпадения:
{
"callsign": "BAW178",
"callsign_prefix": "BAW",
"airline_code": "BAW",
"departure_icao": "KJFK",
"arrival_icao": "EGLL",
"airports": ["KJFK", "EGLL"],
"confidence": "high",
"source": "vrs"
}Пример резервного ответа (строки с точным позывным нет — возвращаются маршруты на уровне авиакомпании):
{
"callsign": "BAW999",
"callsign_prefix": "BAW",
"airline_code": "BAW",
"departure_icao": null,
"arrival_icao": null,
"airports": null,
"confidence": "low",
"source": "vrs",
"routes": [
{
"departure": "LHR",
"arrival": "JFK",
"airlines": ["British Airways"],
"km": 5555,
"duration_min": 430
}
]
}| Поле | Тип | Обязательный | Null? | Описание |
|---|---|---|---|---|
callsign | string | Да | Никогда | Запрошенный позывной |
callsign_prefix | string | Да | Никогда | Префикс авиакомпании ICAO, извлечённый из позывного |
airline_code | string | Да | Никогда | Определённый код ICAO авиакомпании |
departure_icao | string | При точном совпадении | Да (резервный ответ) | Код ICAO аэропорта вылета, если известен |
arrival_icao | string | При точном совпадении | Да (резервный ответ) | Код ICAO аэропорта прибытия, если известен |
airports | array | При точном совпадении | Да (резервный ответ) | Упорядоченные коды ICAO [departure, arrival] |
confidence | string | Да | Никогда | Качество совпадения — high при точном совпадении позывного |
source | string | Да | Никогда | Непрозрачный идентификатор источника данных о маршрутах от API |
routes | array | В резервном ответе | Да (точное совпадение) | Список маршрутов на уровне авиакомпании, если строки с точным позывным нет, — та же структура элементов, что и у маршрутов аэропорта |
Важно: считайте confidence: "high" надёжной парой городов с departure_icao/arrival_icao. Если присутствует только routes[], покажите первый маршрут как предположение и дайте пользователю его подтвердить — не считайте, что первая строка соответствует текущему рейсу.
Клиентские типы
"""Route detection response models for /routes/* endpoints."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass RoutePair: departure: str arrival: str airlines: list[str] km: int duration_min: int@dataclassclass CallsignRouteResponse: """Exact callsign match from GET /routes/callsign/{callsign}.""" callsign: str callsign_prefix: str airline_code: str departure_icao: str arrival_icao: str airports: list[str] confidence: str source: str routes: list[RoutePair] | None = None@dataclassclass AirportRoutesResponse: code: str direction: str count: int routes: list[RoutePair]@dataclassclass RoutePairsResponse: count: int routes: list[RoutePair]@dataclassclass RouteGuess: """Shape returned by route_guess() helper.""" callsign: str departure: str | None arrival: str | None confidence: str source: strИнтеграция
Определяйте вероятные аэропорты вылета и прибытия по позывному ADS-B в реальном времени для слоёв на карте и карточек рейсов.
Пример ниже кэширует результаты поиска по позывному на 24 часа, поскольку назначенные маршруты меняются редко. Каждый запрос использует явные таймауты (10 s на подключение / 15 s на чтение). Вспомогательная функция приводит ответы с точным совпадением и резервные ответы к единому объекту RouteGuess для кода интерфейса.
import osimport timefrom dataclasses import dataclassimport requestsHEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3.1"CACHE: dict[str, tuple[dict, float]] = {}ROUTE_TTL = 86_400 # 24 h@dataclassclass RouteGuess: callsign: str departure: str | None arrival: str | None confidence: str source: strdef fetch_route_by_callsign(callsign: str) -> dict: callsign = callsign.upper().strip() key = f"route:callsign:{callsign}" cached = CACHE.get(key) if cached and time.time() < cached[1]: return cached[0] try: r = requests.get( f"{BASE}/routes/callsign/{callsign}", headers=HEADERS, timeout=(10, 15), ) except requests.Timeout as exc: raise RuntimeError(f"SkyLink timeout resolving route for {callsign}") from exc r.raise_for_status() data = r.json() CACHE[key] = (data, time.time() + ROUTE_TTL) return datadef route_guess(callsign: str) -> RouteGuess | None: data = fetch_route_by_callsign(callsign) dep = data.get("departure_icao") arr = data.get("arrival_icao") if not dep and not arr: routes = data.get("routes") or [] if not routes: return None top = routes[0] dep, arr = top.get("departure"), top.get("arrival") return RouteGuess( callsign=data.get("callsign", callsign), departure=dep, arrival=arr, confidence=data.get("confidence", "unknown"), source=data.get("source", "vrs"), )if __name__ == "__main__": import json from dataclasses import asdict guess = route_guess("BAW178") print(json.dumps(asdict(guess), indent=2) if guess else "Route not found")Примечания по реализации
Нормализация кодов. Переводите позывные в верхний регистр перед поиском (baw178 → BAW178). Удаляйте пробельные символы из данных потоков ADS-B.
Смешение кодов аэропортов. В зависимости от исходной строки маршруты могут использовать коды IATA или ICAO — нормализуйте их через Аэропорты перед объединением с другими наборами данных.
Ответы с ошибками
Ошибка валидации 422: см. раздел «Маршруты».
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/routes/callsign/UAL100"{
"callsign": "RYR86UK",
"callsign_prefix": "RYR",
"airline_code": "RYR",
"airline_iata": "FR",
"departure_icao": "LHBP",
"departure_iata": "BUD",
"arrival_icao": "LIME",
"arrival_iata": "BGY",
"airports": [
"LHBP",
"LIME"
],
"confidence": "high",
"source": "vrs"
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Определение маршрутов
Сопоставление позывных рейсов с парами городов, маршрутные сети аэропортов и статистика по парам маршрутов: авиакомпании, расстояние, блочное время.
Маршруты аэропорта
Все известные маршруты с вылетом из аэропорта или прилётом в него — перевозчики, расстояние и типичное блочное время для каждой пары городов.