Не получается разобрать json

Всем привет. Первый раз сталкиваюсь с разбором json. Накидал скрипт, но он ничего не выдает
<?php
$content=file_get_contents('https://api.hh.ru/vacancies?area=1955');

if($content == '')
  $array = array();
else
  $array = json_decode($content);
Сергей Лим
10 января 2016, 06:44
modx.pro
2
2 573
0
Поблагодарить автора Отправить деньги

Комментарии: 7

Василий Наумкин
10 января 2016, 09:52
1
0
И что он должен выдать?
print_r($array);
забыл, как минимум.
    Сергей Лим
    10 января 2016, 09:53
    0
    Да, не все скопировал. Вывод всеравно нулевой.
    Array ( )
      Василий Наумкин
      10 января 2016, 10:05
      2
      +2
      Это потому, что HeadHunter требует user agent, видимо как защиту от простейших роботов.

      Осваивай cURL:
      <?php
      $array = array();
      
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, 'https://api.hh.ru/vacancies?area=1955');
      curl_setopt($ch, CURLOPT_HEADER, false);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_USERAGENT, "User Agent");
      if ($content = curl_exec($ch)) {
        $array = json_decode($content, true);  
      }
      curl_close($ch);
      
      echo '<pre>';
      print_r($array);
        Сергей Лим
        10 января 2016, 10:07
        0
        Спасибо, я почему то думал, что cURL не особо популярен сейчас, тем более в modx'е. Честно говоря искал что то типа rtfm.modx.com/xpdo/2.x/class-reference/xpdo/xpdo.fromjson
          Василий Наумкин
          10 января 2016, 10:43
          +1
          Ты почитай сначала про одно, а потом про другое.

          Это совершенно разные вещи. Примерно как автобус и контейнер для грузов.
          Сергей Фещуков
          10 января 2016, 12:24
          0
          У MODx есть готовый CURL-клиент. Описан в этом комментарии. modx.pro/help/7518/#comment-52713 Не знаю подойдёт ли такой вариант для вас, но выглядит довольно красиво, в стиле ООП. :))
            Fi1osof
            10 января 2016, 16:39
            +2
            Он не только выглядит приятней, но и тот же юзер-агент сразу подставляет. github.com/modxcms/revolution/blob/2.x/core/model/modx/rest/modrestcurlclient.class.php#L123
            Можно в консоли такое выполнить:
            $client = $modx->getService('rest.modRestCurlClient');
            print $client->config[modRestClient::OPT_USERAGENT];
            Собственно, можно и свой клиент передавать.
            $client = $modx->getService('client', 'rest.modRestCurlClient');
            $result = $client->request('https://ya.ru', '/', 'POST', $params = array('foo'  => 'foo'), array(
                "curlopt_useragent" => "my-user-agent",
            ));
            Это будет юзер-агент для каждого запроса индивидуально. А можно при инициализации клиента задать базовый.
            $client = $modx->getService('client', 'rest.modRestCurlClient', null, array(
                "userAgent" => "user-agent",
            ));
            print $client->config[modRestClient::OPT_USERAGENT];
            Вообще имеет смысл исходный код класса почитать. Кто с курлом работает, поймет, что там все необходимое есть.

            UPD: Вот так даже наглядней
            $client = $modx->getService('client', 'rest.modRestCurlClient', null, array(
                "userAgent" => "user-agent",
            ));
            unset($client->modx);
            print_r($client);
            Ответ:
            modRestCurlClient Object
            (
            [config] => Array
            (
            [port] => 80
            [timeout] => 30
            [path] => /
            [userAgent] => user-agent
            )

            [conn] =>
            [response] =>
            [responseType] => xml
            [host] =>
            )
          Это сообщение было удалено
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8