Оценка времени полёта с помощью ML
Время полёта от выхода до выхода (gate-to-gate) между любыми двумя аэропортами, прогнозируемое моделью GradientBoosting, обученной на исторических эксплуатационных данных (R² ≈ 0.98). Блочное время — это плановая продолжительность от выхода до выхода (gate-to-gate), включая руление в обоих аэропортах.
Используйте этот эндпоинт, когда вам нужны оценки блочного времени для составления расписаний, буферов на стыковки или панелей оценки риска задержек — без поддержки собственных статистических таблиц по маршрутам.
Передайте аэропорты вылета и назначения кодами ICAO или IATA. Для более точной оценки передайте необязательный код типа воздушного судна ICAO (B738, A320, B77W); если он не указан, модель использует типичные крейсерские параметры реактивного самолёта для данной пары городов. API возвращает точечную оценку, минимальную и максимальную границы и удобочитаемую строку продолжительности.
Важно: ветер и текущая погода на маршруте не являются входными данными модели — результат представляет собой статистическое среднее для маршрута и категории воздушного судна, а не прогноз для конкретного времени вылета.
Запрос
Требования
x-api-key в каждом запросе (прямая подписка). Подробнее →https://data.skylinkapi.com/v3.1/ml/flight-time| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
from | string | Да | - | Код ICAO или IATA аэропорта вылета (3–4 символа), например KSFO, SFO |
to | string | Да | - | Код ICAO или IATA аэропорта назначения, например KJFK, JFK |
aircraft | string | Нет | значение модели по умолчанию | Код типа воздушного судна ICAO, например B738, A320, C172 |
Ответ
{
"origin": "KSFO",
"destination": "KJFK",
"aircraft_type": "B738",
"distance_nm": 2241.75,
"estimated_minutes": 294,
"estimated_hours_display": "4h 54m",
"min_minutes": 259,
"max_minutes": 329,
"model_version": "2.0.0-wind"
}Объект прогноза
| Поле | Тип | Обязательный | Может быть null? | Описание |
|---|---|---|---|---|
origin | string | Да | Никогда | Итоговый код ICAO аэропорта вылета |
destination | string | Да | Никогда | Итоговый код ICAO аэропорта назначения |
aircraft_type | string | null | Нет | Да | Тип воздушного судна, использованный для прогноза, или null, если не указан |
distance_nm | number | Да | Никогда | Расстояние по ортодромии в морских милях |
estimated_minutes | integer | Да | Никогда | Оценка от выхода до выхода в минутах (включает среднее время руления в обоих аэропортах) |
estimated_hours_display | string | Да | Никогда | Удобочитаемая продолжительность, например "4h 54m" |
min_minutes | integer | Да | Никогда | Нижняя граница диапазона оценки |
max_minutes | integer | Да | Никогда | Верхняя граница диапазона оценки |
model_version | string | Да | Никогда | Строка версии артефакта модели |
Важно: используйте estimated_minutes для расчётов, а estimated_hours_display — для подписей, которые видят пассажиры. Показывайте min_minutes–max_minutes как диапазон, когда нужны интервалы неопределённости (планирование стыковок, буферы SLA).
Клиентские типы
"""ML flight time response models for /ml/flight-time."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass FlightTimeRequest: """Query input for GET /ml/flight-time.""" from_airport: str to_airport: str aircraft: str | None = None@dataclassclass FlightTimePrediction: origin: str destination: str aircraft_type: str | None distance_nm: float estimated_minutes: int estimated_hours_display: str min_minutes: int max_minutes: int model_version: strИнтеграция
Планировщики маршрутов обычно кэшируют результаты ML-оценки времени полёта для каждой пары городов, поскольку базовая модель меняется нечасто. Пример ниже получает прогноз, преобразует его в компактную модель представления (block_minutes, display, range) и использует явные таймауты подключения и чтения, чтобы медленный вызов инференса не мог заблокировать ваш воркер.
import osfrom dataclasses import dataclassimport requestsBASE = "https://data.skylinkapi.com/v3.1"HEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}@dataclassclass FlightTimeEstimate: origin: str destination: str block_minutes: int display: str min_minutes: int max_minutes: int distance_nm: floatdef fetch_flight_time(*, origin: str, destination: str, aircraft: str | None = None) -> dict: """Fetch ML gate-to-gate flight time between two airports.""" params: dict[str, str] = {"from": origin.upper(), "to": destination.upper()} if aircraft: params["aircraft"] = aircraft.upper() r = requests.get(f"{BASE}/ml/flight-time", headers=HEADERS, params=params, timeout=(10, 20)) r.raise_for_status() return r.json()def flight_time_estimate(origin: str, destination: str, aircraft: str | None = None) -> FlightTimeEstimate: data = fetch_flight_time(origin=origin, destination=destination, aircraft=aircraft) return FlightTimeEstimate( origin=data["origin"], destination=data["destination"], block_minutes=int(data["estimated_minutes"]), display=data["estimated_hours_display"], min_minutes=int(data["min_minutes"]), max_minutes=int(data["max_minutes"]), distance_nm=float(data["distance_nm"]), )if __name__ == "__main__": import json from dataclasses import asdict estimate = flight_time_estimate("KJFK", "KLAX", aircraft="B738") print(json.dumps(asdict(estimate), indent=2))Примечания по реализации
Тип воздушного судна. Коды узкофюзеляжных (B738, A320) и широкофюзеляжных (B77W, A359) самолётов существенно влияют на блочное время на длинных маршрутах — передавайте aircraft, если в строке вашего расписания уже известен тип ВС.
Границы и точечная оценка. min_minutes и max_minutes охватывают типичный эксплуатационный разброс. Не рассматривайте их как жёсткие эксплуатационные ограничения.
Важно: если ML-модель временно недоступна, SkyLink может переключиться на расчёт по расстоянию и скорости. Проверяйте model_version при аудите прогнозов для ESG-отчётности или процессов планирования расписаний.
Ответы с ошибками
Общие ошибки платформы (аутентификация, ограничения частоты запросов, формат ошибок валидации) описаны на странице Обработка ошибок. Поведение, специфичное для эндпоинта:
422 — недопустимый код аэропорта
Возвращается, когда from или to не удаётся сопоставить с известным аэропортом или когда query-параметры не проходят валидацию.
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
Origin airport ICAO or IATA code
3 <= length <= 4Destination airport ICAO or IATA code
3 <= length <= 4Aircraft type code (e.g. B738, A320, C172)
length <= 4Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/ml/flight-time?from=stri&to=stri"{
"origin": "string",
"destination": "string",
"aircraft_type": "string",
"distance_nm": 0,
"estimated_minutes": 0,
"estimated_hours_display": "string",
"min_minutes": 0,
"max_minutes": 0,
"model_version": "string"
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}