【问题标题】:php and yql - having problems getting to the dataphp 和 yql - 获取数据时遇到问题
【发布时间】:2011-11-19 21:06:32
【问题描述】:

所以我在玩雅虎的 yql。我让它生成一个 url,并且 url 看起来像是在向我返回解码的 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 行中的输出。我做错了什么?

提前致谢

【问题讨论】:

    标签: php yahoo yql


    【解决方案1】:

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

    【讨论】:

    • 谢谢马克。一定是某种错误,因为每次我解码时 $data 对我来说都是空的 - 但如果我没有解码它就会正确填充。
    猜你喜欢
    • 2013-02-20
    • 1970-01-01
    • 2021-03-03
    • 2020-07-13
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    相关资源
    最近更新 更多