За последние 24 часа нас посетили 36600 программистов и 1705 роботов. Сейчас ищут 1200 программистов ...

PHP запрос по URL, в ответ JSON

Тема в разделе "PHP для новичков", создана пользователем smartCreate, 17 авг 2017.

  1. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    Добрый день. Появилась задача осуществить автоматическое обновление курса валют в БД.

    Курс валют берутся из официального сайта Министерства финансов Украины. Для того что бы получить данные о курсах валю есть вот такая ссылка c API ключем:

    http://api.minfin.com.ua/mb/54a8480d65cca046502762dd5ac8c4a6dd1a51b4

    На сервере настроен крон, который каждый день в 10:30 должен обращаться к этой ссылке а в ответ получать массив JSON.

    Крон выглядит следующим образом (Внимание, сайт на wordpress):
    PHP:
    1. add_filter( 'cron_schedules', 'interval');
    2.  
    3. function interval( $raspisanie ) {
    4.  
    5.     $raspisanie['period'] = array(
    6.         'interval' => 30,
    7.         'display' => 'МИНФИН'
    8.     );
    9.     return $raspisanie;
    10. }
    11.  
    12. if( !wp_next_scheduled('min_fin') )
    13.     wp_schedule_event( time(), 'period', 'min_fin' );
    14.  
    15. add_action( 'min_fin', 'min_fin_send');
    16.  
    17. function min_fin_send() {
    18.     // здесь нужно отправить запрос и получить ответ
    19. }
    Я ранее всегда работал с POST, GET запросами из js, в основном с помощью ajax, но тут конечно же js использовать не представляется возможным. С запросам из PHP некогда мне сталкиваться не доводилось, по этому я даже не понимаю как это должно выглядеть.

    Пытался что-то делать, вот так (но это нечего мне не дает):
    PHP:
    1. $myCurl = curl_init();
    2. curl_setopt_array($myCurl, array(    
    3.       CURLOPT_URL => 'http://api.minfin.com.ua/mb/54a8480d65cca046502762dd5ac8c4a6dd1a51b4',               CURLOPT_RETURNTRANSFER => true,
    4.       CURLOPT_POST => true,
    5.       CURLOPT_POSTFIELDS => http_build_query()
    6. ));
    7.  
    8.  $response = curl_exec($myCurl); curl_close($myCurl); echo "Ответ на Ваш запрос: ".$response;
    Но я не понимаю как этот метод работает, из-за этого скорее всего что-то не так делаю.

    Пожалуйста подскажите что я делаю не так
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    Урл - это get, а вы post шлете. Ну и результат из json надо преобразовать
     
  3. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    Пошел по логике, заменил CURLOPT_POST на CURLOPT_GET
    PHP:
    1. <?
    2. $myCurl = curl_init();
    3.       CURLOPT_URL => 'http://api.minfin.com.ua/mb/54a8480d65cca046502762dd5ac8c4a6dd1a51b4',
    4.       CURLOPT_RETURNTRANSFER => true,
    5.       CURLOPT_GET => true,
    6.       CURLOPT_POSTFIELDS => http_build_query()
    7. ));
    8.  
    9.     $response = curl_exec($myCurl); curl_close($myCurl); echo "Ответ на Ваш запрос: ".$response;
    10. ?>
    Но видимо логика подвела, потому что это не работает:(
     
    #3 smartCreate, 17 авг 2017
    Последнее редактирование модератором: 17 авг 2017
  4. Danil005

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

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Ответ должен переходить в json формат: json_encode();
    --- Добавлено ---
     
  5. teleoperator

    teleoperator Зэк
    [ БАН ]

    С нами с:
    3 июл 2017
    Сообщения:
    107
    Симпатии:
    29
    Код (Text):
    1. <?
    2. $ch = curl_init();
    3. curl_setopt($ch, CURLOPT_URL,  'http://api.minfin.com.ua/mb/54a8480d65cca046502762dd5ac8c4a6dd1a51b4');
    4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    5. curl_setopt($ch, CURLOPT_HEADER, 0);
    6. $output = curl_exec($ch);
    7. curl_close($ch);
    8. print_r($output);
    9. ?>
     
  6. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    Спасибо большое! Все работает

    Хотя есть еще одна не понятка. Все работает, НО при этом выдает ошибку "Warning: curl_setopt_array(): Array keys must be CURLOPT constants or equivalent integer values", - не могу понять что ее вызывает
    --- Добавлено ---

    Большое спасибо! Ваш вариант решил проблему)
     
  7. Danil005

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

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Массив должны быть константами CURLOPT или эквивалентными целыми значениями