php和yql - 在获取数据时遇到问题

时间:2011-11-19 21:06:32

标签: php yahoo yql

所以我正在玩yahoo的yql。我得到它生成一个网址,网址看起来像是将解码的json返回给我。如果我尝试解码yql url的输出,我得不到任何结果(假设我正好在那里)

$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 个答案:

答案 0 :(得分:2)

您必须首先解码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调用成功。这是一个糟糕的方式,因为您不能依赖外部资源来呈现或运行。在继续之前,请务必检查外部资源请求是否成功。