За последние 24 часа нас посетили 21242 программиста и 1621 робот. Сейчас ищут 1639 программистов ...

Ткните с выгрузкой АПИ данных в PHP в контент страницы

Тема в разделе "Сделайте за меня", создана пользователем prostudent, 24 сен 2014.

  1. prostudent

    prostudent Активный пользователь

    С нами с:
    24 сен 2014
    Сообщения:
    35
    Симпатии:
    0
    Здравствуйте, вот уже несколько дней как баран на новые ворота... партнёрка по авиабилетам. Там дают доступ к API данным, вот такой код
    Код (Text):
    1. $ch = curl_init();
    2. curl_setopt($ch, CURLOPT_URL, "http://api.travelpayouts.com/v1/prices/cheap?currency=RUB&origin=MOW&destination=HKT");
    3. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    4. curl_setopt($ch, CURLOPT_HEADER, FALSE);
    5. curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Access-Token: ххххххх"));
    6. $response = curl_exec($ch);
    7. curl_close($ch);
    8.  
    9. 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):
    1. /*Вывод списка авиакомпаний, совершающих перелет по маршруту*/              
    2.                 echo "<p>Перелеты между этими городами совершают <b>авиакомпании</b>: </p><ul>" ;
    3.                 foreach ($answer['airlines'] as $value){
    4.                 echo "<li>" .$value['name']. "</li>";
    5.                 }
    6.                 echo "</ul>";
    7.                
    8.                 /*Преобразования даты отправления и возвращения из UNIX формата в обычный*/
    9.                 $departuretime = date('d.m.Y', $answer['tickets'][0]['direct_flights'][0]['departure']);
    10.                 if (!empty($answer['tickets'][0]['return_flights']))
    11.                     $arrivaltime = date('d.m.Y', $answer['tickets'][0]['return_flights'][0]['arrival']);
    12.                 else
    13.                     $arrivaltime = "N/A";
    14.                
    15.                 /*Вывод даты отправления и возвращения*/
    16.                 echo "<p><b>Дата отправления</b>: " .$departuretime."</p>";
    17.                 echo "<p><b>Дата возвращения</b>: " .$arrivaltime."</p>";   
    18.                
    То есть, выхватываются данные(Москва Пхукет к примеру как здесь), и подставляются значения из кода, в таблицу или просто, чтобы посетитель видел и сравнивал. Как эта куча данных делится и вставляется куда надо - дата, название авиакомпании, время прибытия и тд, хотя бы подскажите с чего начать и куда двигаться. Спасибо заранее.
     
  2. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    судя по всему это ответ в виде json( если не ошибаюсь), нужно использовать json_decode, а потом пробегать по ответу полученного из него...
    все же просто...
     
  3. prostudent

    prostudent Активный пользователь

    С нами с:
    24 сен 2014
    Сообщения:
    35
    Симпатии:
    0
    А мне, как подпрыгнуть до Луны... Не подскажете как его использовать, и потом делить эти данные и вставлять где надо - прямо суахили это всё для меня... Спасибо что ответили.
     
  4. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    использовать его просто, если исходить из примера, то будет выглядеть как-то так
    $sContent = json_decode( $response );

    А далее, можете делать с ним все что угодно.. Для наглядности можно проверить var_dump( $sContent );
     
  5. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Для наглядности, конвертни в массив:
    Код (PHP):
    1. $json=json_decode($response,true);
    2. echo'<pre>',print_r($json),'</pre>'; 
     
  6. prostudent

    prostudent Активный пользователь

    С нами с:
    24 сен 2014
    Сообщения:
    35
    Симпатии:
    0
    Добавил -
    Код (Text):
    1.     /*Декодирование json строки*/
    2. $response = json_decode($response, true);
    Теперь выгрузка такого типа -
    Код (Text):
    1. 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" } } } }
    Вот хотя бы примерчик посмотреть - как хоть с какого то аррая какую нибудь часть взять, чтобы она отдельно появилась к примеру - Прилёт Самолёта - и этачасть кода выводит время или типа того. И вот вообще интересно - а как же это в контентную страницу засунуть. К примеру описание маршрута балблабла, а потом выгрузка данных Прибытие в [код] самолётом авиакомпании [код] рейс номер [код] стоимость авиабилета [код]. Примерно так както... если бы кто подсказочку дал, я вообще программированием никогда не занимался, всё так удивительно, и хочется как то постигнуть всё же. Если можно, покажите кто нибудь примерчик, как оно вообще реализуется. Спасибо большое за ответы, терпение и поддержку.
     
  7. prostudent

    prostudent Активный пользователь

    С нами с:
    24 сен 2014
    Сообщения:
    35
    Симпатии:
    0
    Попробовал Ваш код, у меня получилось -
    Код (Text):
    1. Array
    2. (
    3.     [success] => 1
    4.     [data] => Array
    5.         (
    6.             [HKT] => Array
    7.                 (
    8.                     [0] => Array
    9.                         (
    10.                             [price] => 25468
    11.                             [airline] => UN
    12.                             [flight_number] => 527
    13.                             [departure_at] => 2014-09-23T22:30:00Z
    14.                             [return_at] => 2014-09-27T11:55:00Z
    15.                             [expires_at] => 2014-09-23T22:30:00Z
    16.                         )
    17.  
    18.                     [1] => Array
    19.                         (
    20.                             [price] => 24336
    21.                             [airline] => CZ
    22.                             [flight_number] => 356
    23.                             [departure_at] => 2014-11-28T21:40:00Z
    24.                             [return_at] => 2014-12-11T01:15:00Z
    25.                             [expires_at] => 2014-09-25T13:57:04Z
    26.                         )
    27.  
    28.                     [2] => Array
    29.                         (
    30.                             [price] => 25035
    31.                             [airline] => CZ
    32.                             [flight_number] => 6002
    33.                             [departure_at] => 2015-01-12T21:40:00Z
    34.                             [return_at] => 2015-02-10T01:45:00Z
    35.                             [expires_at] => 2014-09-25T12:45:36Z
    36.                         )
    37.  
    38.                     [3] => Array
    39.                         (
    40.                             [price] => 31512
    41.                             [airline] => CZ
    42.                             [flight_number] => 356
    43.                             [departure_at] => 2014-11-12T21:40:00Z
    44.                             [return_at] => 2014-11-22T01:15:00Z
    45.                             [expires_at] => 2014-09-23T07:05:19Z
    46.                         )
    47.  
    48.                     [4] => Array
    49.                         (
    50.                             [price] => 39275
    51.                             [airline] => CZ
    52.                             [flight_number] => 6002
    53.                             [departure_at] => 2015-01-06T21:40:00Z
    54.                             [return_at] => 2015-01-20T06:55:00Z
    55.                             [expires_at] => 2014-09-25T13:10:56Z
    56.                         )
    57.  
    58.                     [5] => Array
    59.                         (
    60.                             [price] => 61628
    61.                             [airline] => AB
    62.                             [flight_number] => 5909
    63.                             [departure_at] => 2014-10-31T08:30:00Z
    64.                             [return_at] => 2014-11-16T21:55:00Z
    65.                             [expires_at] => 2014-09-24T12:09:47Z
    66.                         )
    67.  
    68.                 )
    69.  
    70.         )
    71.  
    72. )
    73. 1
    А как теперь можно вытаскивать отдельные данные из массива? Спасибо
     
  8. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    $json['data']['HKT'][0]['price'] // вернет 25468
    $json['data']['HKT'][0]['airline']// вернет UN
    $json['data']['HKT'][1]['flight_number'] // вернет 356
     
  9. prostudent

    prostudent Активный пользователь

    С нами с:
    24 сен 2014
    Сообщения:
    35
    Симпатии:
    0
    А не могли бы Вы продублировать - всё ли правильно написали(может какую запятую забыли и тд), а то я вставил этот код,а у меня вот -
    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). Очень хотелось бы разобраться, подскажите пожалуйста!
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    prostudent, а почитать про php мануальчик слабо, прежде чем из каких-то API брать какие-то данные? Вы видимо подставили прямо то, что вам Хыиуду нарисовал, а он показал только ка получить доступ к элементам массива, а не как их выводить. https://php.net/manual/ru/langref.php - прочитайте (можно за 2-3 дня управиться, и даже быстрее), потом можно продолжать разговор. Если хотите сами делать. Не хотите - нанимайте фрилансера
     
  11. CoolKid

    CoolKid Активный пользователь

    С нами с:
    24 сен 2014
    Сообщения:
    33
    Симпатии:
    5
    Я так понимаю, он и есть "фрилансер", который за деньги взядся реализовать форму поиска авиабилетов)
    Код (Text):
    1.  
    2. echo $json['data']['HKT'][0]['price']; // вернет 25468
    3. echo $json['data']['HKT'][0]['airline']; // вернет UN
    4. echo $json['data']['HKT'][1]['flight_number']; // вернет 356
    Теперь будет работать, "фрилансер"
     
  12. prostudent

    prostudent Активный пользователь

    С нами с:
    24 сен 2014
    Сообщения:
    35
    Симпатии:
    0
    Спасибо огромное!!! Уже цифры появились. Я не фрилансер, сайт по авиабилетам делаю, но с этими данными функционал расширить пытаюсь.
    mkramer - спасибо за ссылку, обязательно вгрызусь в гранит, до этого другие просматривал - в ступоре был как и что там с foreach, array и т.д. Про json, кроме википедии другого ничего не знаю, а по полезнее и прикладнее бы что найти почитать!)))
    И ещё, если Вы уж нашли терпение ответить, может ткнёте, или подскажете, как дальше двигаться, то есть контентную страницу делать, а то ведь весь этот код сейчас видно вначале - сверху страницы (после вызова дампа апи). А как на странице нужно - делать html с фрагментами php, где надо в тексте? А куда тогда весь код выгрузки - девать в хедер, или за html таг? Или куда двигаться, ткните пожалуйста? А мануал конечно читать начинаю, спасибо.
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Ну вы всё правильно написали, делать html, в котором, где надо, выводить переменные php. Для php фактически без разницы, где вы будете получать ваши данные - посреди html-кода, или до, но вам удобнее будет разделить программу на два куска - сначала получить все эти значения, потом вывести html с ними. Постепенно эти два действия вы вообще разнесёте в разные файлы, но на данном этапе это не обязательно. Плюс к руководству по php надо обязательно прочитать руководство по javascript, поскольку php отвечает только за формирование страниц на сервере, а реакция на всякие кнопочки, щелчки и прочее - уже задача JavaScript-а. А будут вопросы по руководству - пишите в тему для новичков. Только конкретику
     
  14. prostudent

    prostudent Активный пользователь

    С нами с:
    24 сен 2014
    Сообщения:
    35
    Симпатии:
    0
    Спасибо огромное за ответ, приятно удивлён уровню общению на этом форуме, отзывчивости и поддержке. Приятно отличается в отличие от разных серченжинов и тд. Подскажите пожалуйста - где узнать или почитать(хотя бы тему в мануале) про разделение на 2 куска - то есть как получается выгрузка, а потом с неё берутся данные уже в html страницу со статьёй и вставкой в неё этих фрагментов данных с выгрузки. Ещё раз спасибо, конечно жалею, что в своё время с математикой были пробелы, я в основном гуманитарий, теперь приходится навёрстывать в свой почти полтинник, но мотивация есть, буду грызть.
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Да нигде не надо читать. Просто вначале пишите в файле код про выгрузку, а потом - про отображение. Абстрактно:
    Код (Text):
    1.  
    2. <?php
    3. $ch = curl_init();
    4. curl_setopt($ch, CURLOPT_URL, "http://api.travelpayouts.com/v1/prices/cheap?currency=RUB&origin=MOW&destination=HKT");
    5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    6. curl_setopt($ch, CURLOPT_HEADER, FALSE);
    7. curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Access-Token: ххххххх"));
    8. $response = curl_exec($ch);
    9. curl_close($ch);
    10.  
    11. $json=json_decode($response,true);
    12. ?>
    13. <html>
    14. <body>
    15. Какая-то фигня: <?php echo echo $json['data']['HKT'][0]['price']; ?>
    16. </body>
    17. </html>
    Математика тут не причём. Между прочим, Perl (язык программирования) был создан лингвистом, а не математиком, если я не ошибаюсь. Элементарное алгоритмическое мышление надо вырабатывать (ну вы же можете, к примеру, поход в магазин разбить на шаги типа "одеть штаны", "одеть часы", "открыть дверь" и т.п.? Тут тоже самое), и мануалы читать.
     
  16. prostudent

    prostudent Активный пользователь

    С нами с:
    24 сен 2014
    Сообщения:
    35
    Симпатии:
    0
    Спасибо огромное! Мотивировали, буду продолжать учить и экспериментировать, и Вам удачи и успеха в делах и планах!(отдельная благодарность за пример в этом посте!!!)))
     
  17. prostudent

    prostudent Активный пользователь

    С нами с:
    24 сен 2014
    Сообщения:
    35
    Симпатии:
    0
    Вот по пути постижения таинства исскусства PHP натолкнулся на следующую(для меня) проблему:
    Пытаюсь эту выгрузку интегрировать с Джумлой, нашёл плагин вставки кода -
    (источник _http://nauca.com.ua/plugins/add-php/)
    Ну так вот - сделал всё по инструкции - файл my_file.php -
    Код (Text):
    1. <?php
    2. $ch = curl_init();
    3. curl_setopt($ch, CURLOPT_URL, "http://api.travelpayouts.com/v1/prices/cheap?currency=RUB&origin=MOW&destination=HKT");
    4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    5. curl_setopt($ch, CURLOPT_HEADER, FALSE);
    6. curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Access-Token: ххххххх"));
    7. $response = curl_exec($ch);
    8. curl_close($ch);
    9.  
    10. $json=json_decode($response,true);
    11. ?>
    12. <html>
    13. <body>
    14. Какая-то фигня: <?php echo echo $json['data']['HKT'][0]['price']; ?>
    15. </body>
    16. </html>
    Вставил код в тело статьи -
    Всё равностраница показывается и отображается с кодом выгрузки вверху(данные выводятся правильно в теле статьи... если б не код вверху всё было бы ОК). Подскажите пожалуйста пути решения этой проблемы - Как сделать - чтобы в теле страницы код выгрузки не отображался, а показывало только данные? спасибо.

    Добавлено спустя 53 минуты 32 секунды:
    Извините пожалуйста, за то. чтог морочил голову - а виноват сам - одну строчечку кода не убрал - а мучений на 2е суток. Я ж после скрипта выгрузки не убрал
    Код (Text):
    1. echo'<pre>',print_r($json),'</pre>';
    - так как на отладке сайта в денвере смотрел. А потом прозевал. Будет урок, как быть внимательным. А вот опытные программисты, подскажите пожалуйста. как Вы с этим боретесь?(проверка правильности кода, ошибок в скрипте и тд) Спасибо
     
  18. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. $json=json_decode($response,true);
    2. $json=end($json['data']);
    3. foreach($json as $val) {
    4.     echo nl2br('Price: '.$val['price'].'
    5.     ');
    6. } 
     
  19. motros222

    motros222 Новичок

    С нами с:
    27 авг 2016
    Сообщения:
    1
    Симпатии:
    0
    @prostudent
    Я прочитал Ваше обращение за помощью и ответы на него.
    Я понял что у Вас была такая же проблема как у меня сейчас.Вы так же пытались сделать страницы получив ответ API Travelpayouts.
    Только я не понял куда Вы вставляли код декодирования json?
    В ы получили ответ API и Ваши действия дальше?
    Я то же чайник но хочется понять сам процесс.
    Напишите если Вам не трудно.