Пример работы API поиска авиабилетов (более не поддерживается)

Данное API устарело. Его поддержка и обновление не осуществляется. Описание актуальной версии.

 

 

Уважаемые партнеры! Обратите внимание, что по умолчанию установлено ограничение: 100 запросов в час. Если требуется обрабатывать больше запросов, напишите на support@travelpayouts.com.

 

Для обработки и вывода полученных данных нам понадобятся знания языка PHP, а именно:

 

Пример работы API находится на данном сайте.

Вы можете скачать файл-пример с поддержкой CSS.

Получение данных для запроса

Для того чтобы собрать данные от пользователей реализуем форму запроса:

<form>
<input name="search[params_attributes][origin_name]" value="Москва">
<input name="search[params_attributes][destination_name]" value="Ливерпуль">
<input name="search[params_attributes][depart_date]" value="2014-12-04">
<input name="search[params_attributes][return_date]" value="2014-12-10">
<input name="search[params_attributes][adults]" value="1">
<input name="search[params_attributes][children]" value="0">
<input name="search[params_attributes][infants]" value="0">
<input name="search[params_attributes][trip_class]" value="0">
<input name="search[params_attributes][direct]" value="0">
<input type="submit">
</form>

Обработка данных

После заполнения формы, запрос отправляется на сервер. На его обработку и поиск подходящих вариантов серверу требуется от 5 до 30 секунд. Для того чтобы скрасить ожидание пользователя в это время можно отображать какую-нибудь заглушку.

Результат запроса выводится с помощью следующей команды:

<?php
/*Вывод на странице параметров запроса*/
/*var_dump($_GET);*/ 
 
if(count($_GET) > 0){
 
    /*Партнерский токен*/
	$token = '{PARTNER_TOKEN}'; 
    /*Партнерский маркер*/
	$marker = '{PARTNER_MARKER}'; 
	/*Запрос данных*/
    $aParams = array(
        'search[params_attributes][origin_name]' => $_GET['search']['params_attributes']['origin_name'],
        'search[params_attributes][destination_name]' => $_GET['search']['params_attributes']['destination_name'],
        'search[params_attributes][depart_date]' => $_GET['search']['params_attributes']['depart_date'],
        'search[params_attributes][return_date]' => $_GET['search']['params_attributes']['return_date'],
        'search[params_attributes][adults]' => $_GET['search']['params_attributes']['adults'],
        'search[params_attributes][children]' => $_GET['search']['params_attributes']['children'],
        'search[params_attributes][infants]' => $_GET['search']['params_attributes']['infants'],
        'search[params_attributes][trip_class]' => $_GET['search']['params_attributes']['trip_class']
        ); 
    ksort($aParams);
	/*Рассчет md5 суммы*/
    $signature = md5("$token:$marker:".implode(':', array_values($aParams)));
    $bParams = array(
        'signature' => $signature,
        'enable_api_auth' => true,
        'marker' => $marker
        );
    $aParams = $aParams + $bParams;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://engine.aviasales.ru/searches.json');
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($aParams));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    /*Выполнение curl запроса*/
	$answer = curl_exec($ch); 
	/*Декодирование json строки*/
	$answer = json_decode($answer, true); 
} ?>

Структура ответа

В результате работы запроса мы получаем ответ в виде массива:

array(10) { /*в основном массиве 10 параметров*/ 
	["params_attributes"]=> array(6) { 
		["origin_iata"]=> string(3) "MOW" 
		["destination_iata"]=> string(3) "LED" 
		["origin_name"]=> string(12) "Москва" 
		["destination_name"]=> string(18) "Петроград" 
		["origin_type"]=> string(4) "city" 
		["destination_type"]=> string(4) "city" 
		} 
	["search_id"]=> 26301f4e-6360-47e3-b1ac-8c4f2440d22f 
	["search_cache_time"]=> int(30) 
	["metadata"]=> array(0) { } 
	["tickets"]=> array(634) { /*в массиве тикетов содержится 634 варианта билетов, для примера отображается часть*/
		[0]=> array(5) { 
			["total"]=> int(5774) 
			["native_prices"]=> array(7) { 
				[30]=> int(5774) 
				[11]=> float(5818.28) 
				[8]=> int(5894) 
				[6]=> float(6075) 
				[7]=> int(5937) 
				[62]=> float(6131) 
				[20]=> int(5789) 
				} 
			["order_urls"]=> array(7) { 
				[30]=> int(52) 
				[11]=> int(315) 
				[8]=> int(1) 
				[6]=> int(62) 
				[7]=> int(418) 
				[62]=> int(878) 
				[20]=> int(1634) 
				} 
			["direct_flights"]=> array(1) { 
				[0]=> array(9) { 
					["number"]=> int(36) 
					["airline"]=> string(2) "UN" 
					["departure"]=> int(1388859900) 
					["arrival"]=> int(1388865000) 
					["duration"]=> int(85) 
					["delay"]=> int(0) 
					["origin"]=> string(3) "VKO" 
					["destination"]=> string(3) "LED" 
					["aircraft"]=> NULL 
					} 
				} 
			["return_flights"]=> array(1) { 
				[0]=> array(9) { 
					["number"]=> int(33) 
					["airline"]=> string(2) "UN" 
					["departure"]=> int(1389368100) 
					["arrival"]=> int(1389372900) 
					["duration"]=> int(80) 
					["delay"]=> int(0) 
					["origin"]=> string(3) "LED" 
					["destination"]=> string(3) "VKO" 
					["aircraft"]=> NULL 
					} 
				} 
			} 
		[1]=> array(5) { 
			["total"]=> int(5774) 
			["native_prices"]=> array(7) { 
				[30]=> int(5774) 
				[11]=> float(5818.28) 
				[8]=> int(5894) 
				[6]=> float(6075) 
				[7]=> int(5937) 
				[62]=> float(6131) 
				[20]=> int(5789) 
				} 
			["order_urls"]=> array(7) { 
				[30]=> int(121) 
				[11]=> int(277) 
				[8]=> int(2) 
				[6]=> int(54) 
				[7]=> int(428) 
				[62]=> int(888) 
				[20]=> int(1660) 
				} 
			["direct_flights"]=> array(1) { 
				[0]=> array(9) { 
					["number"]=> int(36) 
					["airline"]=> string(2) "UN" 
					["departure"]=> int(1388859900) 
					["arrival"]=> int(1388865000) 
					["duration"]=> int(85) 
					["delay"]=> int(0) 
					["origin"]=> string(3) "VKO" 
					["destination"]=> string(3) "LED" 
					["aircraft"]=> NULL 
					} 
				} 
			["return_flights"]=> array(1) { 
				[0]=> array(9) { 
					["number"]=> int(6) 
					["airline"]=> string(2) "UN" 
					["departure"]=> int(1389382200) 
					["arrival"]=> int(1389387300) 
					["duration"]=> int(85) 
					["delay"]=> int(0) 
					["origin"]=> string(3) "LED" 
					["destination"]=> string(3) "DME" 
					["aircraft"]=> NULL 
					} 
				} 
			} 
		...	
		[633]=> array(6) { 
			["total"]=> int(18050) 
			["native_prices"]=> array(1) { 
				[20]=> int(18050) 
				} 
			["order_urls"]=> array(1) { 
				[20]=> int(1965) 
				} 
			["direct_flights"]=> array(2) { 
				[0]=> array(9) { 
					["number"]=> int(369) 
					["airline"]=> string(2) "U9" 
					["departure"]=> int(1388829000) 
					["arrival"]=> int(1388834100) 
					["duration"]=> int(85) 
					["delay"]=> int(0) 
					["origin"]=> string(3) "DME" 
					["destination"]=> string(3) "KZN" 
					["aircraft"]=> NULL 
					} 
				[1]=> array(9) { 
					["number"]=> int(504) 
					["airline"]=> string(2) "U9" 
					["departure"]=> int(1388857800) 
					["arrival"]=> int(1388866200) 
					["duration"]=> int(140) 
					["delay"]=> int(395) 
					["origin"]=> string(3) "KZN" 
					["destination"]=> string(3) "LED" 
					["aircraft"]=> NULL 
					} 
				} 
			["main_airline"]=> string(2) "U9" 
			["return_flights"]=> array(2) { 
				[0]=> array(9) { 
					["number"]=> int(588) 
					["airline"]=> string(2) "U9" 
					["departure"]=> int(1389388200) 
					["arrival"]=> int(1389396300) 
					["duration"]=> int(135) 
					["delay"]=> int(0) 
					["origin"]=> string(3) "LED" 
					["destination"]=> string(3) "KZN" 
					["aircraft"]=> NULL 
					} 
				[1]=> array(9) { 
					["number"]=> int(370) 
					["airline"]=> string(2) "U9" 
					["departure"]=> int(1389423600) 
					["arrival"]=> int(1389429600)
					["duration"]=> int(100) 
					["delay"]=> int(455) 
					["origin"]=> string(3) "KZN" 
					["destination"]=> string(3) "DME" 
					["aircraft"]=> NULL 
					} 
				} 
			} 
		}	
	["airlines"]=> array(12) { /*тут выводится информация о 12 авиакомпаниях, которые летают по данным направлениям,  отображается только часть*/
		["5N"]=> array(5) { 
			["name"]=> string(8) "Nordavia" 
			["id"]=> int(12) 
			["alliance_name"]=> NULL 
			["rates"]=> int(344) 
			["average_rate"]=> float(3.4) 
			} 
		["7R"]=> array(5) { 
			["name"]=> string(11) "Rusline Air" 
			["id"]=> int(557) 
			["alliance_name"]=> NULL 
			["rates"]=> int(326) 
			["average_rate"]=> float(2.85) 
			} 
		} 
	["airports"]=> array(11) { /*информация об аэропортах, через которые происходит полет, в том числе аэропорты пересадки*/ 
		["ARH"]=> array(6) { 
			["rates"]=> int(56) 
			["average_rate"]=> float(3.14) 
			["name"]=> string(12) "Талаги" 
			["city"]=> string(22) "Архангельск" 
			["country"]=> string(12) "Россия" 
			["time_zone"]=> string(13) "Europe/Moscow" 
			} 
		["DME"]=> array(6) { 
			["rates"]=> int(160) 
			["average_rate"]=> float(3.92) 
			["name"]=> string(20) "Домодедово" 
			["city"]=> string(12) "Москва" 
			["country"]=> string(12) "Россия" 
			["time_zone"]=> string(13) "Europe/Moscow" 
			} 
		} 
	["gates_info"]=> array(10) { /*информация об агентах, через которые продаются билеты*/
		[0]=> array(10) { 
			["id"]=> int(6) 
			["label"]=> string(7) "Sindbad" 
			["payment_methods"]=> array(4) { 
				[0]=> string(4) "cash" 
				[1]=> string(8) "terminal" 
				[2]=> string(4) "card" 
				[3]=> string(3) "exp" 
				} 
			["currency_code"]=> string(3) "rub" 
			["is_airline"]=> bool(false) 
			["mobile_version"]=> bool(false) 
			["airline_iatas"]=> array(0) { } 
			["productivity"]=> float(14.120089228725) 
			["average_rate"]=> float(0) 
			["rates"]=> int(0) 
			} 
		[1]=> array(10) { 
			["id"]=> int(7) 
			["label"]=> string(11) "OZON.travel" 
			["payment_methods"]=> array(8) { 
				[0]=> string(4) "cash" 
				[1]=> string(12) "yandex_money" 
				[2]=> string(9) "web_money" 
				[3]=> string(8) "terminal" 
				[4]=> string(4) "card" 
				[5]=> string(7) "elexnet" 
				[6]=> string(7) "contact" 
				[7]=> string(7) "euroset" 
				} 
			["currency_code"]=> string(3) "rub" 
			["is_airline"]=> bool(false) 
			["mobile_version"]=> bool(false) 
			["airline_iatas"]=> array(0) { } 
			["productivity"]=> float(18.176374887213) 
			["average_rate"]=> float(0) 
			["rates"]=> int(0) 
			} 
		} 
	["search_minimal_prices"]=> array(4) { /*информация о минимальной цене*/
		[0]=> array(6) { 
			["depart_date"]=> string(10) "2014-01-04" 
			["number_of_changes"]=> int(0) 
			["value"]=> int(5465) 
			["gate_id"]=> int(11) 
			["show_to_affiliates"]=> bool(false) 
			["return_date"]=> string(10) "2014-01-10" 
			} 
		[1]=> array(6) { 
			["depart_date"]=> string(10) "2014-01-04" 
			["number_of_changes"]=> int(1) 
			["value"]=> int(12074) 
			["gate_id"]=> int(20) 
			["show_to_affiliates"]=> bool(false) 
			["return_date"]=> string(10) "2014-01-10" 
			} 
		} 
	["currency_rates"]=> array(155) { /*курсы валют по отношению к рублю*/
		["eur"]=> float(44.0201) 
		["usd"]=> float(32.6874) 
		["uah"]=> float(4.0564409652) 
		}
	} 

 

Важно! Пример ответа содержит не все результаты, а лишь часть, чтобы продемонстрировать его структуру и содержание. Полный пример ответа отображается на странице примере после результатов поиска.

Обратите внимание! Дата отправления и возвращения приходит в формате Unix Timestamp по Гринвичу. При переводе с помощью php date("c", "значение UNIX-time") берется время сервера и часовые пояса не учитываются. Поэтому требуется принимать в расчет время сервера или принудительно приводить его к времени Гринвича с помощью функции date_default_timezone_set('GMT').

Обработка ответа и отображение результата

На основе полученных данных организовывается вывод информации. Актуальный пример работы API смотрите здесь. Ниже приводится один из возможных вариантов обработки и отображения полученных данных:

Город вылета: Москва

Город прилета: Петроград

Перелеты между этими городами совершают следующие авиакомпании: Nordavia, Rusline Air, Rossiya Airlines, Hahn Air, S7, Aeroflot, Ural Airlines, Tatarstan Aircompany, Transaero, UT Air, Yamal Air, Polet Airlines,

Дата отправления: 04.01.2014

Дата возвращения: 10.01.2014

Минимальная стоимость перелета: 5465, руб.

Максимальная стоимость перелета: 35925, руб.

 

Для того чтобы вывести данные из массива необходимо прописать точный путь до них. Для этого используется конструкция вида:

 

echo "<p>Город вылета: " .$answer['params_attributes']['origin_name']. "</p>";
echo "<p>Город прилета: " .$answer['params_attributes']['destination_name']. "</p>";

 

Список авиакомпаний выводится при помощи функции foreach. Т.к. заранее не известно какие именно авиакомпании будут в массиве ответа, то потребуется перебрать все варианты и организовать выдачу:

 

echo "<p>Перелеты между этими городами совершают следующие авиакомпании:</p><ul>"; 
foreach ($answer['airlines'] as $value){ 
	echo "<li>" .$value['name']. "</li>"; 
	} 
echo "</ul>";

 

Чтобы определить минимальную и максимальную стоимость билета, воспользуемся комбинацией методов и функциями min и max:

 

$min = null;
$max = null;
foreach ($answer['tickets'] as $valuetotal) {
  	if ($min === null || $valuetotal['total'] < $min) $min = $valuetotal['total'];
	if ($max === null || $valuetotal['total'] > $max) $max = $valuetotal['total'];
	}
echo "<p>Минимальная стоимость перелета: " .$min. ", руб.</p>";
echo "<p>Максимальная стоимость перелета: " .$max. ", руб.</p>";

 

Для того чтобы отобразить дату и время вылета/прилета в правильном часовом поясе, необходимо перевести их из формата UNIX:

 

$departuretime = date('d.m.Y', $answer['tickets'][0]['direct_flights'][0]['departure']); 
echo "<p>Дата отправления: " .$departuretime. "</p>"; 
$arrivaltime = date('d.m.Y', $answer['tickets'][0]['return_flights'][0]['arrival']); 
echo "<p>Дата возвращения: " .$arrivaltime. "</p>"; 

 

Из результатов запроса можно получить и другие полезные данные, например, количество пересадок, аэропорты в которых они совершаются и многое другое.

 

Пример работы API (откроется в новом окне)

Cкачать файл-пример с CSS

Была ли эта статья полезной?

Еще есть вопросы? Отправить запрос