php和yql - 遇到数据问题
问题描述:
所以我在玩yahoo的yql。我得到它来产生一个网址,并且该网址看起来像是将解码后的json返回给我。如果我尝试将YQL URL的解码输出我没有得到任何结果(假设所以我就在那里)php和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';
}
但是,不管我怎么好像我做事不能访问输出我每条线。我究竟做错了什么?
在此先感谢
答
你必须将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(...) {
}
注意我添加了错误处理 - 你的代码有没有,假定卷曲调用成功。这是一条糟糕的路,因为你不能依靠外部资源来呈现或运作。在继续之前,请始终检查外部资源请求是否成功。
谢谢马克。肯定是某种错误,因为每次我解码它时,$ data都是空的 - 但是如果我没有解码它,它会被正确填充。 –