Flightstats API: Пишем свое табло прилетов с Боингами и Аэробусами

от автора

Введение

Всем читающим этот пост — здравствуйте.
Авиация — мое хобби, я об этом уже писал. Я готов часами стоять и фотографировать самолеты, смотреть видео о них, читать блоги летчиков, следить за трафиком на fr24.com. А еще мне нравится то, что в авиации кругом одни сокращения: ECAM, CDA, ACESS, APU и так далее. Вообщем, магия. А вот почти все люди из моего окружения к авиации равнодушны: «Ну самолет, как самолет. Большой, да. Что? Boeing 777-300ER? Ну ясно, ясно…». Но ничего не поделаешь, на вкус и цвет все фломастеры разные.
Как ко мне пришла идея поста? Так получилось, что я живу в 20 минутах езды от аэропорта Шереметьево. Как-то у меня выдался свободный час и приехал немного пофотографировать. За то время, пока я там был, мимо меня пролетело около 10 самолетов. Почти все — Аэрофлот. Я не спорю, у Аэрофлота есть интересные борты. Например, Добролет или Хохлома. Но в тот день мне не повезло, ничего подобного я не увидел. И тогда я подумал, что было бы очень полезно планировать подобные выезды. Вот так вот и родилась идея поста. Мне хотелось иметь следующий функционал: таблица вылетов — прилетов для выбранного аэропорта, выделение цветом как интересных, так и не очень ботов, экспорт в pdf.

Начинаем!

Итак, первым делом необходимо зайти на https://developer.flightstats.com, зарегистрироваться, перейти в Dashboard и нажать на кнопку «Create a new application». Это необходимо для получения связки AppId + AppKey, без которой доступ к API невозможен. Вообще, оно платное, но присутствует и бесплатный тарифный план — "Evaluation Plan", его возможностей для наших нужд хватит сполна. После этого смело идем "Get Started" -> "Flex API Reference" -> "Flight Status & Track API" -> "Flight Status & Track by Airport". В нижней части страницы есть раздел "Interactive Documentation", выбираем "Airport status (departures)". В данном запросе есть 7 обязательных полей, которые необходимо заполнить следующим образом:

appId appKey airport year month day hourOfDay
Ваш appId Ваш appKey SVO 2013 12 7 10

Через пару секунд появится ответ.

Иными словами мы попросили выдать нам информацию о рейсах, которые вылетят 7 декабря 2014 года после 10 часов из аэропорта Шереметьево. Да, SVO — Шереметьево. А еще UUEE — тоже Шереметьево. Помните, чуть выше я говорил о сокращениях? Вот, мы наткнулись на первое.

Коды аэропортов. IATA vs. ICAO

IATA — Международная ассоциация воздушного транспорта, ИАТА (англ. International Air Transport Association) международная неправительственная организация. Ассоциация выступает координатором и представителем интересов авиатранспортной отрасли в таких областях как обеспечение безопасности полетов, производство полетов, тарифная политика, техобслуживание, авиационная безопасность, разработка международных стандартов совместно с ИКАО и т. д.

ICAO — Международная организация гражданской авиации (International Civil Aviation Organization) — специализированное учреждение ООН, устанавливающее международные нормы гражданской авиации и координирующее её развитие с целью повышения безопасности и эффективности.

И у ИАТА и у ИКАО есть свои коды аэропортов. Они различны, поскольку коды ИАТА выбираются созвучными с названием аэропорта, а код ИКАО основан на том, где находится аэропорт. Именно поэтому у Шереметево код ИАТА SVO, а ИКАО — UUEE, для Пулково, например, LED и ULLI соответственно. Исключение составляют лишь аэропорты США (добавляется «K» к коду ИАТА: Лос-Анджелес — LAX — KLAX) и Канады (добавляется «С»: Торонто — YYZ — CYYZ).

Ответ flightstats

При данном запросе ответ имеет следующую структуру:

{   посланный запрос } "appendix": {   "airlines": {...}   "airports": {...}   "equipments": {...}   "flightStatuses": {...} } 

Секции airlines, airports и equipments содержат в себе описание авиакомпаний, аэропортов и типов самолетов, которые присутствуют в секции flightStatuses.
Секция «airlines» предельно проста:

"airlines": [    {     "fs": "SU",     "iata": "SU",     "icao": "AFL",     "name": "Aeroflot",     "active": true    }, ... 

Поле «fs» содержит в себе код авиакомпании в базе flightStats. Почти всегда он совпадает с кодом IATA.

Секция «airports» посложнее:

"airports": [    {     "fs": "BUD",     "iata": "BUD",     "icao": "LHBP",     "name": "Liszt Ferenc International Airport",     "city": "Budapest",     "cityCode": "BUD",     "countryCode": "HU",     "countryName": "Hungary",     "regionName": "Europe",     "timeZoneRegionName": "Europe/Budapest",     "localTime": "2013-12-06T20:51:56.974",     "utcOffsetHours": 1,     "latitude": 47.433037,     "longitude": 19.261621,     "elevationFeet": 495,     "classification": 2,     "active": true,     "delayIndexUrl": "https://api.flightstats.com/flex/delayindex/rest/v1/json/airports/BUD?codeType=fs",     "weatherUrl": "https://api.flightstats.com/flex/weather/rest/v1/json/all/BUD?codeType=fs"    },  ... 

Здесь содержится вся необходимая информация, кроме погоды и коэффициента задержки, которые надо запрашивать отдельно.

Секция «equipments».

"equipments": [    {     "iata": "319",     "name": "Airbus Industrie A319",     "turboProp": false,     "jet": true,     "widebody": false,     "regional": false    }, ... 

Описывает базовые характеристики самолета.

Отвлечемся вновь от API.

Учимся различать типы самолетов

Это совсем не сложно. Я подготовил небольшую схему, которая поможет легко сориентироваться в мире летающих машин.

И теперь подтвержение моих слов:
Airbus A380 vs. Boeing 747

Airbus A340

Boeing 737 vs. Airbus A320

Boeing 757 vs. Boeing 767

Airbus A330 vs. Boeing 777

McDonnel Douglas MD-11

ссылка на оригинал статьи http://habrahabr.ru/post/205164/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *