php и yql - возникают проблемы с получением данных - PullRequest
1 голос
/ 20 ноября 2011

Так что я играюсь с yahoo's yql. Я получил его, чтобы сгенерировать URL, и URL выглядит так, как будто он возвращает мне декодированный JSON. Если я попытаюсь декодировать вывод URL-адреса yql, я не получу никаких результатов (при условии, что я здесь)

$c =curl_init("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20local.search%20where%20state%3D'delaware'%20and%20city%20%3D%20'smyrna'%20and%20query%3D'pizza'&format=json"); 

curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 20); // query times out after 20 seconds

$data = curl_exec($c); // I asked for data format to be in json in the query it appears to be returned decoded

curl_close($c);
    //print_r($data);
    //$arr[] = $data; (returning results in decoded json)
    //print_r($arr); (returning results)
foreach($data->query->results->result as $result)
{
    echo 'blah blah blah';
}

Однако, как бы я ни делал, я не могу получить доступ к выводу в моей строке foreach. Что я делаю не так?

Заранее спасибо

1 Ответ

2 голосов
/ 20 ноября 2011

Сначала необходимо декодировать строку json, в противном случае она остается строкой простого текста:

$data = curl_exec($c);
if ($data === FALSE) {
    die("Curl failed with error: " . curl_error($c));
}
$data = json_decode($data);
if (is_null($data)) {
    die("json_decode failed with error: " . json_last_error());
}

foreach(...) {
}

Примечание. Я добавил обработку ошибок - в вашем коде ее нет, и предполагается, что вызов curl завершился успешно. Это плохой путь, так как вы НЕ МОЖЕТЕ зависеть от внешних ресурсов для представления или работы. Всегда проверяйте, успешно ли выполнен запрос внешнего ресурса, прежде чем продолжить.

...