Авиакомпании
Ищите авиакомпанию по коду авиакомпании ICAO (трёхбуквенный указатель, например BAW для British Airways) или по коду авиакомпании IATA (двухбуквенный код, который видят пассажиры, например BA). Ответ содержит название перевозчика, радиотелефонный позывной (позывной, используемый в радиообмене с УВД, например SPEEDBIRD), страну, статус деятельности и URL логотипа, размещённого на серверах SkyLink, если он доступен. Используйте этот эндпоинт, чтобы дополнять строки расписаний и карточки статуса рейса.
Передайте ровно один код (icao или iata). Если передать оба, вернётся 400.
Важно: для неизвестных кодов возвращается HTTP 200 с пустым массивом [], а не 404. Предусмотрите в интерфейсе заглушку для отсутствующего перевозчика, а не состояние ошибки.
Запрос
Требования
x-api-key в каждом запросе (прямая подписка). Подробнее →https://data.skylinkapi.com/v3.1/airlines/search| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
icao | string | Один из icao / iata | - | Код авиакомпании ICAO (3 буквы), например AAL |
iata | string | Один из icao / iata | - | Код авиакомпании IATA (2 буквы), например AA |
Ответ
Эндпоинт возвращает массив подходящих авиакомпаний (для корректного кода обычно один элемент).
[
{
"id": 24,
"name": "American Airlines",
"alias": null,
"iata": "AA",
"icao": "AAL",
"callsign": "AMERICAN",
"country": "United States",
"active": "Y",
"logo": "https://media.skylinkapi.com/logos/AA.png"
}
]Объект авиакомпании
| Поле | Тип | Обязательный | Null? | Описание |
|---|---|---|---|---|
id | integer | Да | Никогда | Числовой идентификатор записи |
name | string | Да | Никогда | Название авиакомпании |
alias | string | null | Нет | Да | Альтернативное название, если есть |
iata | string | null | Нет | Да | Код IATA (2 буквы) |
icao | string | null | Нет | Да | Код ICAO (3 буквы) |
callsign | string | null | Нет | Да | Радиотелефонный позывной ICAO |
country | string | null | Нет | Да | Название страны на английском языке |
active | string | Да | Никогда | Y — действующая, N — неактивная или прекратившая деятельность |
logo | string | null | Нет | Да | URL логотипа на серверах SkyLink, если доступен |
Семантика «не найдено»
| HTTP-статус | Тело | Значение |
|---|---|---|
200 | [] | Подходящий перевозчик не найден — покажите заглушку |
400 | строка detail | Код не указан или переданы оба кода |
Клиентские типы
"""Airline lookup response models for /airlines/search."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass AirlineLookupRequest: """Query input for GET /airlines/search - provide one code.""" icao: str | None = None iata: str | None = None@dataclassclass AirlineRecord: id: int name: str alias: str | None iata: str | None icao: str | None callsign: str | None country: str | None active: str logo: str | None@dataclassclass AirlineSummary: """Shape returned by airline_summary() helper.""" icao: str | None iata: str | None name: str callsign: str | None country: str | None is_active: bool logo: str | NoneИнтеграция
Определите перевозчика по коду ICAO и преобразуйте его в компактную модель интерфейса для отображения расписаний.
Пример ниже кэширует результаты поиска авиакомпаний на 24 часа и использует явные тайм-ауты, чтобы медленный вызов внешнего сервиса не блокировал ваш API-воркер.
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]] = {}AIRLINE_TTL = 86_400 # 24 h@dataclassclass AirlineSummary: icao: str | None iata: str | None name: str callsign: str | None country: str | None is_active: bool logo: str | Nonedef fetch_airline(*, icao: str | None = None, iata: str | None = None) -> dict | None: if bool(icao) == bool(iata): raise ValueError("Provide exactly one of icao or iata") code = (icao or iata or "").upper() key = f"airline:{icao or ''}:{iata or ''}" cached = CACHE.get(key) if cached and time.time() < cached[1]: return cached[0] params = {"icao": code} if icao else {"iata": code} try: r = requests.get(f"{BASE}/airlines/search", headers=HEADERS, params=params, timeout=(10, 15)) except requests.Timeout as exc: raise RuntimeError(f"SkyLink timeout fetching airline {code}") from exc if r.status_code == 404: return None r.raise_for_status() items = r.json() if not items: return None airline = items[0] CACHE[key] = (airline, time.time() + AIRLINE_TTL) return airlinedef airline_summary(icao: str) -> AirlineSummary | None: airline = fetch_airline(icao=icao) if not airline: return None return AirlineSummary( icao=airline.get("icao"), iata=airline.get("iata"), name=airline["name"], callsign=airline.get("callsign"), country=airline.get("country"), is_active=airline.get("active") == "Y", logo=airline.get("logo"), )if __name__ == "__main__": import json from dataclasses import asdict summary = airline_summary("AAL") print(json.dumps(asdict(summary), indent=2) if summary else "Airline not found")Примечания по реализации
Неактивные перевозчики. Отфильтровывайте active: "N", если только вашей функции не нужны исторические рейсы.
Резервный логотип. Всегда обрабатывайте logo: null, подставляя локальное изображение-заглушку.
Выбор кода. Код ICAO стабильнее для операционных систем; код IATA лучше подходит для подписей, которые видят пассажиры.
Ответы с ошибками
Общие ошибки платформы см. в разделе Обработка ошибок. Ошибки, специфичные для эндпоинта:
400 - не указан код для поиска
{
"detail": "Either ICAO or IATA code must be provided"
}400 - указаны оба кода
{
"detail": "Provide either ICAO or IATA, not both"
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
3-letter ICAO airline code
2-letter IATA airline code
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/airlines/search"[
{
"id": 1355,
"name": "British Airways",
"iata": "BA",
"icao": "BAW",
"callsign": "SPEEDBIRD",
"country": "United Kingdom",
"active": "Y",
"logo": "https://media.skylinkapi.com/logos/BA.png"
}
]{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}См. также: Расписания · Статус рейса · Аэропорты