Аэропорты
Получайте полные сведения об аэропорте по коду ICAO (4-буквенный указатель местоположения, уникальный в мире) или IATA (3-буквенный пассажирский код — не всегда уникальный). Ответ включает взлётно-посадочные полосы, радиочастоты, ближайшие радионавигационные средства (VOR, NDB, ILS и аналогичные средства радионавигации), а также разрешённые объекты страны и региона. Вызывайте этот эндпоинт после того, как пользователь выбрал аэропорт в результатах поиска, или когда код у вас уже есть и нужны данные об объекте для экранов брифинга, анализа ВПП или меток на карте.
Передавайте либо icao, либо iata в качестве query-параметра — никогда оба сразу.
Запрос
Требования
x-api-key в каждом запросе (прямая подписка). Подробнее →https://data.skylinkapi.com/v3.1/airports/search| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
icao | string | Один из icao / iata | - | 4-буквенный код ICAO, например KJFK |
iata | string | Один из icao / iata | - | 3-буквенный код IATA, например JFK |
Ответ
API возвращает один объект аэропорта (не обёрнутый в список).
{
"id": 3622,
"ident": "KJFK",
"type": "large_airport",
"name": "John F. Kennedy International Airport",
"latitude_deg": 40.639447,
"longitude_deg": -73.779317,
"elevation_ft": 13.0,
"municipality": "New York",
"iso_country": "US",
"iso_region": "US-NY",
"icao_code": "KJFK",
"iata_code": "JFK",
"scheduled_service": "yes",
"search_code": "KJFK",
"search_type": "ICAO",
"runways": [
{
"length_ft": 12079.0,
"width_ft": 200.0,
"surface": "PEM",
"le_ident": "04L",
"he_ident": "22R"
}
],
"frequencies": [
{
"type": "TWR",
"description": "JFK TOWER",
"frequency_mhz": 119.1
}
],
"navaids": [
{
"ident": "JFK",
"name": "Kennedy",
"type": "VOR-DME",
"frequency_khz": 115900,
"associated_airport": "KJFK"
}
],
"country": {
"code": "US",
"name": "United States"
},
"region": {
"code": "US-NY",
"name": "New York",
"iso_country": "US"
}
}Поля верхнего уровня
| Поле | Тип | Обязательный | Может быть null? | Описание |
|---|---|---|---|---|
id | integer | Да | Никогда | Числовой идентификатор записи |
ident | string | Да | Никогда | Основной идентификатор (обычно ICAO) |
type | string | Да | Никогда | Класс аэропорта — см. таблицу ниже |
name | string | Да | Никогда | Официальное название аэропорта |
latitude_deg | number | Да | Никогда | Широта WGS-84 |
longitude_deg | number | Да | Никогда | Долгота WGS-84 |
elevation_ft | number | null | Нет | Да | Превышение аэродрома в футах над MSL (над средним уровнем моря) |
municipality | string | null | Нет | Да | Обслуживаемый город или населённый пункт |
iso_country | string | null | Нет | Да | Код страны ISO 3166-1 alpha-2 |
iso_region | string | null | Нет | Да | Код региона ISO, например US-NY |
icao_code | string | null | Нет | Да | Указатель местоположения ICAO |
iata_code | string | null | Нет | Да | Код местоположения IATA |
scheduled_service | string | null | Нет | Да | yes / no, если известно |
search_code | string | null | Нет | Да | Запрошенный вами код (эхо) |
search_type | string | null | Нет | Да | ICAO или IATA |
runways | array | Да | Никогда | Записи о ВПП (может быть []) |
frequencies | array | Да | Никогда | Радиочастоты (может быть []) |
navaids | array | Да | Никогда | Ближайшие радионавигационные средства (может быть []) |
country | object | null | Нет | Да | Разрешённые метаданные страны |
region | object | null | Нет | Да | Разрешённые метаданные региона |
Значения type для аэропорта
| Значение | Что означает |
|---|---|
large_airport | Крупный коммерческий аэропорт |
medium_airport | Региональный коммерческий аэропорт |
small_airport | Авиация общего назначения |
heliport | Вертодром |
seaplane_base | База гидросамолётов |
closed | Закрытый объект (по-прежнему в базе данных) |
balloonport | Площадка для запуска аэростатов |
Объект ВПП (runways[])
| Поле | Тип | Обязательный | Может быть null? | Описание |
|---|---|---|---|---|
length_ft | number | null | Нет | Да | Длина ВПП в футах |
width_ft | number | null | Нет | Да | Ширина ВПП в футах |
surface | string | null | Нет | Да | Код покрытия — ASP (асфальт), PEM (твёрдое покрытие), GRS (гравий) и т. д. |
lighted | integer | null | Нет | Да | 1, если ВПП оборудована освещением |
closed | integer | null | Нет | Да | 1, если ВПП закрыта |
le_ident | string | null | Нет | Да | Обозначение торца ВПП с меньшим номером (low end) |
he_ident | string | null | Нет | Да | Обозначение торца ВПП с большим номером (high end) |
Объект частоты (frequencies[])
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
type | string | Да | Тип службы — ATIS (автоматическая передача метеоинформации), GND (руление), TWR (вышка), APP (подход), DEP (вылет) и т. д. |
description | string | null | Нет | Понятная человеку метка |
frequency_mhz | number | Да | Частота в MHz |
Объект радионавигационного средства (navaids[])
| Поле | Тип | Обязательный | Может быть null? | Описание |
|---|---|---|---|---|
ident | string | Да | Никогда | Идентификатор средства |
name | string | Да | Никогда | Название средства |
type | string | Да | Никогда | Например, VOR, VOR-DME, NDB |
frequency_khz | integer | null | Нет | Да | Частота в kHz |
latitude_deg | number | Да | Никогда | Широта средства |
longitude_deg | number | Да | Никогда | Долгота средства |
associated_airport | string | null | Нет | Да | Код ICAO связанного аэропорта, если известен |
Клиентские типы
"""Airport lookup response types - matches airports.mdx field tables."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass AirportLookupRequest: """Query input for GET /airports/search - provide icao or iata, not both.""" icao: str | None = None iata: str | None = None@dataclassclass Runway: id: int airport_ident: str length_ft: float | None width_ft: float | None surface: str | None lighted: int | None closed: int | None le_ident: str | None he_ident: str | None@dataclassclass Frequency: id: int type: str description: str | None frequency_mhz: float airport_ref: int@dataclassclass Navaid: ident: str name: str type: str frequency_khz: int | None latitude_deg: float longitude_deg: float associated_airport: str | None@dataclassclass CountryRef: code: str name: str@dataclassclass RegionRef: code: str name: str iso_country: str@dataclassclass AirportDetail: id: int ident: str type: str name: str latitude_deg: float longitude_deg: float elevation_ft: float | None municipality: str | None iso_country: str | None icao_code: str | None iata_code: str | None scheduled_service: str | None runways: list[Runway] frequencies: list[Frequency] navaids: list[Navaid] country: CountryRef | None = None region: RegionRef | None = None search_code: str | None = None search_type: str | None = None@dataclassclass AirportSummary: """Shape returned by airport_summary() in the lookup example.""" icao: str | None iata: str | None name: str municipality: str | None country: str | None latitude: float longitude: float elevation_ft: float | None airport_type: str longest_runway_ft: int | NoneИнтеграция
Найдите аэропорт по коду ICAO и верните готовые для интерфейса сводные поля, включая самую длинную ВПП.
В примере ниже каждый результат поиска кэшируется на 24 часа, поскольку метаданные аэропортов меняются редко. Каждый HTTP-вызов использует тайм-ауты на подключение и чтение, чтобы медленный вышестоящий сервис не заблокировал интерфейс брифинга.
import osimport timefrom dataclasses import dataclassfrom typing import Literalimport requests# AirportSummary - helper return type. Full wire types are in the Client types section.AirportType = Literal[ "large_airport", "medium_airport", "small_airport", "heliport", "seaplane_base", "closed", "balloonport",]HEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3.1"CACHE: dict[str, tuple[dict, float]] = {}AIRPORT_TTL = 86_400 # 24 h - OurAirports metadata changes slowly@dataclassclass AirportSummary: icao: str | None iata: str | None name: str municipality: str | None country: str | None latitude: float longitude: float elevation_ft: float | None airport_type: str longest_runway_ft: int | Nonedef fetch_airport(*, 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 "" cache_key = f"airport:{icao or ''}:{iata or ''}" cached = CACHE.get(cache_key) if cached and time.time() < cached[1]: return cached[0] params: dict[str, str] = {} if icao: params["icao"] = icao else: params["iata"] = iata or "" try: r = requests.get( f"{BASE}/airports/search", headers=HEADERS, params=params, timeout=(10, 20), ) except requests.Timeout as exc: raise RuntimeError(f"SkyLink timeout fetching airport {code}") from exc if r.status_code == 404: return None r.raise_for_status() data = r.json() CACHE[cache_key] = (data, time.time() + AIRPORT_TTL) return datadef airport_summary(icao: str) -> AirportSummary | None: airport = fetch_airport(icao=icao) if not airport: return None runways = airport.get("runways") or [] longest = max((int(rw.get("length_ft") or 0) for rw in runways), default=0) country = airport.get("country") or {} return AirportSummary( icao=airport.get("icao_code"), iata=airport.get("iata_code"), name=airport["name"], municipality=airport.get("municipality"), country=country.get("code") if isinstance(country, dict) else airport.get("iso_country"), latitude=airport["latitude_deg"], longitude=airport["longitude_deg"], elevation_ft=airport.get("elevation_ft"), airport_type=airport["type"], longest_runway_ft=longest or None, )if __name__ == "__main__": import json from dataclasses import asdict summary = airport_summary("KJFK") print(json.dumps(asdict(summary), indent=2) if summary else "Airport not found")Примечания по реализации
Неполные данные. У площадок авиации общего назначения и вертодромов часто нет данных о ВПП или частотах. Проверяйте длину массивов перед выводом таблиц ВПП.
Связанные данные. Определив здесь код ICAO, переходите с тем же кодом к METAR, TAF, NOTAM или аэронавигационным картам.
Слои радионавигационных средств. Встроенные navaids охватывают окрестности аэропорта. Для фильтрации по bbox или по типу в пределах региона используйте Радионавигационные средства.
ICAO и IATA, закрытые аэропортыРазвернуть раздел
ICAO или IATA. Для внутреннего хранения предпочтительнее ICAO — этот код уникален в мире. Поиск по IATA удобен для пассажирских кодов (JFK → полная запись), но такие коды могут совпадать в разных регионах.
Закрытые аэропорты. Записи с type: "closed" остаются в базе данных для исторической справки. При необходимости отфильтровывайте их в списках выбора действующих аэропортов.
Ответы с ошибками
Здесь описаны только ошибки, специфичные для эндпоинта. Ошибки авторизации, валидации, ограничения частоты запросов и ошибки сервера описаны в разделе Обработка ошибок.
404 - аэропорт не найден
{
"detail": "Airport not found for ICAO code: XXXX"
}Такого кода нет в базе аэропортов SkyLink.
400 - указаны оба кода
{
"detail": "Provide either ICAO or IATA code, not both"
}400 - не указан ни один код
{
"detail": "Either ICAO or IATA code must be provided"
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
4-letter ICAO airport code (e.g., KJFK, EGLL)
3-letter IATA airport code (e.g., JFK, LHR)
Any airport identifier as returned by the /airports/search/location, /airports/search/text or /airports/search/ip endpoints' ident field — including OurAirports pseudo-codes for airports without a real ICAO code (e.g., 'GB-0888')
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/airports/search"{
"id": 3682,
"ident": "KJFK",
"type": "large_airport",
"name": "John F Kennedy International Airport",
"latitude_deg": 40.63980103,
"longitude_deg": -73.77890015,
"elevation_ft": 13,
"continent": "NA",
"iso_country": "US",
"iso_region": "US-NY",
"municipality": "New York",
"scheduled_service": "yes",
"gps_code": "KJFK",
"iata_code": "JFK",
"local_code": "JFK",
"runways": [
{
"length_ft": 14511,
"width_ft": 150,
"surface": "ASP",
"lighted": 1,
"closed": 0,
"le_ident": "04L",
"he_ident": "22R"
}
],
"frequencies": [
{
"type": "TWR",
"description": "JFK TWR",
"frequency_mhz": 119.1
}
],
"navaids": [
{
"ident": "JFK",
"name": "Kennedy",
"type": "VOR-DME",
"frequency_khz": "115900"
}
],
"search_code": "KJFK",
"search_type": "ICAO"
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}См. также: Поиск аэропортов · METAR · NOTAM