Здравствуйте, вот уже несколько дней как баран на новые ворота... партнёрка по авиабилетам. Там дают доступ к API данным, вот такой код Код (Text): $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://api.travelpayouts.com/v1/prices/cheap?currency=RUB&origin=MOW&destination=HKT"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Access-Token: ххххххх")); $response = curl_exec($ch); curl_close($ch); var_dump($response); Он Возвращает самые дешевые билеты без пересадок, а также с 1 и 2 пересадками для выбранного направления или любого направления с фильтрами по датам вылета и возвращения При его инициализации получаем такие данные: ========= string(1023) "{"success": true, "data": {"HKT":{"0":{"price":25468,"airline":"UN","flight_number":527,"departure_at":"2014-09-23T22:30:00Z","return_at":"2014-09-27T11:55:00Z","expires_at":"2014-09-23T22:30:00Z"},"1":{"price":24336,"airline":"CZ","flight_number":356,"departure_at":"2014-11-28T21:40:00Z","return_at":"2014-12-11T01:15:00Z","expires_at":"2014-09-25T13:57:04Z"},"2":{"price":25035,"airline":"CZ","flight_number":6002,"departure_at":"2015-01-12T21:40:00Z","return_at":"2015-02-10T01:45:00Z","expires_at":"2014-09-25T12:45:36Z"},"3":{"price":31512,"airline":"CZ","flight_number":356,"departure_at":"2014-11-12T21:40:00Z","return_at":"2014-11-22T01:15:00Z","expires_at":"2014-09-23T07:05:19Z"},"4":{"price":39275,"airline":"CZ","flight_number":6002,"departure_at":"2015-01-06T21:40:00Z","return_at":"2015-01-20T06:55:00Z","expires_at":"2014-09-25T13:10:56Z"},"5":{"price":61628,"airline":"AB","flight_number":5909,"departure_at":"2014-10-31T08:30:00Z","return_at":"2014-11-16T21:55:00Z","expires_at":"2014-09-24T12:09:47Z"}}}}" ========== В инструкции в партнёрке есть Параметры запроса origin – IATA код города вылета. IATA код указывается буквами верхнего регистра, например MOW destination – IATA код города назначения (укажите "-" для любых направлений). IATA код указывается буквами верхнего регистра, например MOW depart_date(не обязательно) – День или месяц вылета (yyyy-mm-dd или yyyy-mm). return_date (не обязательно) – День или месяц возвращения (yyyy-mm-dd или yyyy-mm). token – Индивидуальный токен доступа. и Описание ответа 0, 1, 2 – Порядковый номер в результатах выдачи. price – Цена билета (в заданной валюте, параметр currency). airline – IATA код авиакомпании, выполняющей перелет. flight_number – Номер рейса. departure_at – Дата вылета. return_at – Дата возвращения. expires_at – Дата истечения актуальности найденной цены (UTC+0). currency – Валюта, в которой отображается цена билета. ===================================================== ВОПРОС!!! - Подскажите пожалуйста, как эти данные внести в контентную страницу - к примеру(там в старом неактуальном коде пример - Код (Text): /*Вывод списка авиакомпаний, совершающих перелет по маршруту*/ echo "<p>Перелеты между этими городами совершают <b>авиакомпании</b>: </p><ul>" ; foreach ($answer['airlines'] as $value){ echo "<li>" .$value['name']. "</li>"; } echo "</ul>"; /*Преобразования даты отправления и возвращения из UNIX формата в обычный*/ $departuretime = date('d.m.Y', $answer['tickets'][0]['direct_flights'][0]['departure']); if (!empty($answer['tickets'][0]['return_flights'])) $arrivaltime = date('d.m.Y', $answer['tickets'][0]['return_flights'][0]['arrival']); else $arrivaltime = "N/A"; /*Вывод даты отправления и возвращения*/ echo "<p><b>Дата отправления</b>: " .$departuretime."</p>"; echo "<p><b>Дата возвращения</b>: " .$arrivaltime."</p>"; То есть, выхватываются данные(Москва Пхукет к примеру как здесь), и подставляются значения из кода, в таблицу или просто, чтобы посетитель видел и сравнивал. Как эта куча данных делится и вставляется куда надо - дата, название авиакомпании, время прибытия и тд, хотя бы подскажите с чего начать и куда двигаться. Спасибо заранее.
судя по всему это ответ в виде json( если не ошибаюсь), нужно использовать json_decode, а потом пробегать по ответу полученного из него... все же просто...
А мне, как подпрыгнуть до Луны... Не подскажете как его использовать, и потом делить эти данные и вставлять где надо - прямо суахили это всё для меня... Спасибо что ответили.
использовать его просто, если исходить из примера, то будет выглядеть как-то так $sContent = json_decode( $response ); А далее, можете делать с ним все что угодно.. Для наглядности можно проверить var_dump( $sContent );
Для наглядности, конвертни в массив: Код (PHP): $json=json_decode($response,true); echo'<pre>',print_r($json),'</pre>';
Добавил - Код (Text): /*Декодирование json строки*/ $response = json_decode($response, true); Теперь выгрузка такого типа - Код (Text): array(2) { ["success"]=> bool(true) ["data"]=> array(1) { ["HKT"]=> array(6) { [0]=> array(6) { ["price"]=> int(25468) ["airline"]=> string(2) "UN" ["flight_number"]=> int(527) ["departure_at"]=> string(20) "2014-09-23T22:30:00Z" ["return_at"]=> string(20) "2014-09-27T11:55:00Z" ["expires_at"]=> string(20) "2014-09-23T22:30:00Z" } [1]=> array(6) { ["price"]=> int(24336) ["airline"]=> string(2) "CZ" ["flight_number"]=> int(356) ["departure_at"]=> string(20) "2014-11-28T21:40:00Z" ["return_at"]=> string(20) "2014-12-11T01:15:00Z" ["expires_at"]=> string(20) "2014-09-25T13:57:04Z" } [2]=> array(6) { ["price"]=> int(25035) ["airline"]=> string(2) "CZ" ["flight_number"]=> int(6002) ["departure_at"]=> string(20) "2015-01-12T21:40:00Z" ["return_at"]=> string(20) "2015-02-10T01:45:00Z" ["expires_at"]=> string(20) "2014-09-25T12:45:36Z" } [3]=> array(6) { ["price"]=> int(31512) ["airline"]=> string(2) "CZ" ["flight_number"]=> int(356) ["departure_at"]=> string(20) "2014-11-12T21:40:00Z" ["return_at"]=> string(20) "2014-11-22T01:15:00Z" ["expires_at"]=> string(20) "2014-09-23T07:05:19Z" } [4]=> array(6) { ["price"]=> int(39275) ["airline"]=> string(2) "CZ" ["flight_number"]=> int(6002) ["departure_at"]=> string(20) "2015-01-06T21:40:00Z" ["return_at"]=> string(20) "2015-01-20T06:55:00Z" ["expires_at"]=> string(20) "2014-09-25T13:10:56Z" } [5]=> array(6) { ["price"]=> int(61628) ["airline"]=> string(2) "AB" ["flight_number"]=> int(5909) ["departure_at"]=> string(20) "2014-10-31T08:30:00Z" ["return_at"]=> string(20) "2014-11-16T21:55:00Z" ["expires_at"]=> string(20) "2014-09-24T12:09:47Z" } } } } Вот хотя бы примерчик посмотреть - как хоть с какого то аррая какую нибудь часть взять, чтобы она отдельно появилась к примеру - Прилёт Самолёта - и этачасть кода выводит время или типа того. И вот вообще интересно - а как же это в контентную страницу засунуть. К примеру описание маршрута балблабла, а потом выгрузка данных Прибытие в [код] самолётом авиакомпании [код] рейс номер [код] стоимость авиабилета [код]. Примерно так както... если бы кто подсказочку дал, я вообще программированием никогда не занимался, всё так удивительно, и хочется как то постигнуть всё же. Если можно, покажите кто нибудь примерчик, как оно вообще реализуется. Спасибо большое за ответы, терпение и поддержку.
Попробовал Ваш код, у меня получилось - Код (Text): Array ( [success] => 1 [data] => Array ( [HKT] => Array ( [0] => Array ( [price] => 25468 [airline] => UN [flight_number] => 527 [departure_at] => 2014-09-23T22:30:00Z [return_at] => 2014-09-27T11:55:00Z [expires_at] => 2014-09-23T22:30:00Z ) [1] => Array ( [price] => 24336 [airline] => CZ [flight_number] => 356 [departure_at] => 2014-11-28T21:40:00Z [return_at] => 2014-12-11T01:15:00Z [expires_at] => 2014-09-25T13:57:04Z ) [2] => Array ( [price] => 25035 [airline] => CZ [flight_number] => 6002 [departure_at] => 2015-01-12T21:40:00Z [return_at] => 2015-02-10T01:45:00Z [expires_at] => 2014-09-25T12:45:36Z ) [3] => Array ( [price] => 31512 [airline] => CZ [flight_number] => 356 [departure_at] => 2014-11-12T21:40:00Z [return_at] => 2014-11-22T01:15:00Z [expires_at] => 2014-09-23T07:05:19Z ) [4] => Array ( [price] => 39275 [airline] => CZ [flight_number] => 6002 [departure_at] => 2015-01-06T21:40:00Z [return_at] => 2015-01-20T06:55:00Z [expires_at] => 2014-09-25T13:10:56Z ) [5] => Array ( [price] => 61628 [airline] => AB [flight_number] => 5909 [departure_at] => 2014-10-31T08:30:00Z [return_at] => 2014-11-16T21:55:00Z [expires_at] => 2014-09-24T12:09:47Z ) ) ) ) 1 А как теперь можно вытаскивать отдельные данные из массива? Спасибо
$json['data']['HKT'][0]['price'] // вернет 25468 $json['data']['HKT'][0]['airline']// вернет UN $json['data']['HKT'][1]['flight_number'] // вернет 356
А не могли бы Вы продублировать - всё ли правильно написали(может какую запятую забыли и тд), а то я вставил этот код,а у меня вот - Parse error: syntax error, unexpected T_VARIABLE in Z:\home\localhost\www\PHP\pricetickets.php on line 20 (а 20 строка это - $json['data']['HKT'][0]['airline']// вернет UN). Очень хотелось бы разобраться, подскажите пожалуйста!
prostudent, а почитать про php мануальчик слабо, прежде чем из каких-то API брать какие-то данные? Вы видимо подставили прямо то, что вам Хыиуду нарисовал, а он показал только ка получить доступ к элементам массива, а не как их выводить. https://php.net/manual/ru/langref.php - прочитайте (можно за 2-3 дня управиться, и даже быстрее), потом можно продолжать разговор. Если хотите сами делать. Не хотите - нанимайте фрилансера
Я так понимаю, он и есть "фрилансер", который за деньги взядся реализовать форму поиска авиабилетов) Код (Text): echo $json['data']['HKT'][0]['price']; // вернет 25468 echo $json['data']['HKT'][0]['airline']; // вернет UN echo $json['data']['HKT'][1]['flight_number']; // вернет 356 Теперь будет работать, "фрилансер"
Спасибо огромное!!! Уже цифры появились. Я не фрилансер, сайт по авиабилетам делаю, но с этими данными функционал расширить пытаюсь. mkramer - спасибо за ссылку, обязательно вгрызусь в гранит, до этого другие просматривал - в ступоре был как и что там с foreach, array и т.д. Про json, кроме википедии другого ничего не знаю, а по полезнее и прикладнее бы что найти почитать!))) И ещё, если Вы уж нашли терпение ответить, может ткнёте, или подскажете, как дальше двигаться, то есть контентную страницу делать, а то ведь весь этот код сейчас видно вначале - сверху страницы (после вызова дампа апи). А как на странице нужно - делать html с фрагментами php, где надо в тексте? А куда тогда весь код выгрузки - девать в хедер, или за html таг? Или куда двигаться, ткните пожалуйста? А мануал конечно читать начинаю, спасибо.
Ну вы всё правильно написали, делать html, в котором, где надо, выводить переменные php. Для php фактически без разницы, где вы будете получать ваши данные - посреди html-кода, или до, но вам удобнее будет разделить программу на два куска - сначала получить все эти значения, потом вывести html с ними. Постепенно эти два действия вы вообще разнесёте в разные файлы, но на данном этапе это не обязательно. Плюс к руководству по php надо обязательно прочитать руководство по javascript, поскольку php отвечает только за формирование страниц на сервере, а реакция на всякие кнопочки, щелчки и прочее - уже задача JavaScript-а. А будут вопросы по руководству - пишите в тему для новичков. Только конкретику
Спасибо огромное за ответ, приятно удивлён уровню общению на этом форуме, отзывчивости и поддержке. Приятно отличается в отличие от разных серченжинов и тд. Подскажите пожалуйста - где узнать или почитать(хотя бы тему в мануале) про разделение на 2 куска - то есть как получается выгрузка, а потом с неё берутся данные уже в html страницу со статьёй и вставкой в неё этих фрагментов данных с выгрузки. Ещё раз спасибо, конечно жалею, что в своё время с математикой были пробелы, я в основном гуманитарий, теперь приходится навёрстывать в свой почти полтинник, но мотивация есть, буду грызть.
Да нигде не надо читать. Просто вначале пишите в файле код про выгрузку, а потом - про отображение. Абстрактно: Код (Text): <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://api.travelpayouts.com/v1/prices/cheap?currency=RUB&origin=MOW&destination=HKT"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Access-Token: ххххххх")); $response = curl_exec($ch); curl_close($ch); $json=json_decode($response,true); ?> <html> <body> Какая-то фигня: <?php echo echo $json['data']['HKT'][0]['price']; ?> </body> </html> Математика тут не причём. Между прочим, Perl (язык программирования) был создан лингвистом, а не математиком, если я не ошибаюсь. Элементарное алгоритмическое мышление надо вырабатывать (ну вы же можете, к примеру, поход в магазин разбить на шаги типа "одеть штаны", "одеть часы", "открыть дверь" и т.п.? Тут тоже самое), и мануалы читать.
Спасибо огромное! Мотивировали, буду продолжать учить и экспериментировать, и Вам удачи и успеха в делах и планах!(отдельная благодарность за пример в этом посте!!!)))
Вот по пути постижения таинства исскусства PHP натолкнулся на следующую(для меня) проблему: Пытаюсь эту выгрузку интегрировать с Джумлой, нашёл плагин вставки кода - (источник _http://nauca.com.ua/plugins/add-php/) Ну так вот - сделал всё по инструкции - файл my_file.php - Код (Text): <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://api.travelpayouts.com/v1/prices/cheap?currency=RUB&origin=MOW&destination=HKT"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Access-Token: ххххххх")); $response = curl_exec($ch); curl_close($ch); $json=json_decode($response,true); ?> <html> <body> Какая-то фигня: <?php echo echo $json['data']['HKT'][0]['price']; ?> </body> </html> Вставил код в тело статьи - Всё равностраница показывается и отображается с кодом выгрузки вверху(данные выводятся правильно в теле статьи... если б не код вверху всё было бы ОК). Подскажите пожалуйста пути решения этой проблемы - Как сделать - чтобы в теле страницы код выгрузки не отображался, а показывало только данные? спасибо. Добавлено спустя 53 минуты 32 секунды: Извините пожалуйста, за то. чтог морочил голову - а виноват сам - одну строчечку кода не убрал - а мучений на 2е суток. Я ж после скрипта выгрузки не убрал Код (Text): echo'<pre>',print_r($json),'</pre>'; - так как на отладке сайта в денвере смотрел. А потом прозевал. Будет урок, как быть внимательным. А вот опытные программисты, подскажите пожалуйста. как Вы с этим боретесь?(проверка правильности кода, ошибок в скрипте и тд) Спасибо
Код (PHP): $json=json_decode($response,true); $json=end($json['data']); foreach($json as $val) { echo nl2br('Price: '.$val['price'].' '); }
@prostudent Я прочитал Ваше обращение за помощью и ответы на него. Я понял что у Вас была такая же проблема как у меня сейчас.Вы так же пытались сделать страницы получив ответ API Travelpayouts. Только я не понял куда Вы вставляли код декодирования json? В ы получили ответ API и Ваши действия дальше? Я то же чайник но хочется понять сам процесс. Напишите если Вам не трудно.