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(...) { 
} 

注意我添加了错误处理 - 你的代码有没有,假定卷曲调用成功。这是一条糟糕的路,因为你不能依靠外部资源来呈现或运作。在继续之前,请始终检查外部资源请求是否成功。

+0

谢谢马克。肯定是某种错误,因为每次我解码它时,$ data都是空的 - 但是如果我没有解码它,它会被正确填充。 –