使用PHP和json检索YQL

时间:2013-07-15 12:37:59

标签: php json yql

我想获取此YQL查询的天气预报的代码元素,问题是这会返回null。

                        php
          var_dump(getResultFromYQL());

        function getResultFromYQL(  ) {

           $yql_query_url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D946738&format=json&diagnostics=true&callback=?";

            $session = curl_init($yql_query_url);
            curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

            $json = curl_exec($session);
            curl_close($session);

            return json_decode($json);
        }
        ?>

好的,我找到了解决方案                  PHP

            $Jakarta = 946738;  /* Jakarta */


            /* Use cURL to query the API for some XML */
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, 'http://weather.yahooapis.com/forecastrss?w='.$Jakarta.'&u=f');
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $weather_rss = curl_exec($ch);
            curl_close($ch);

            /* Create an object of the XML returned */
            $weather = new SimpleXMLElement($weather_rss);

            /*
            * Since I don't want to figure out an image system, I'll use Weather.com's (what Yahoo does)
            * by pulling the image directly out of the returned API request. This could be done better.
            */
            $weather_contents = $weather->channel->item->description;
            //  preg_match_all('/<img[^>]+>/i',$weather_contents, $img);
            //  $weather_img = $img[0][0];

            /* Get clean parts */

            $weather_cond = $weather->channel->item->xpath('yweather:condition');


            /* Function to convert Wind Direction from given degree units into Cardinal units */

            ?>


                             hp

                                         print $weather_cond[0]->attributes()->code;

                              ?>
                  </div>
                </div>
            </div>
            </div>

1 个答案:

答案 0 :(得分:1)

删除callback=?查询部分。它适用于JavaScript回调函数。

工作网址应为:$yql_query_url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D946738&format=json&diagnostics=true";

<强>更新

工作代码:(在PHP 5.3.27和5.4.17上测试)

<?php
function getResultFromYQL() {
    $yql_query_url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D946738&format=json&diagnostics=true";

    $session = curl_init($yql_query_url);
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

    $json = curl_exec($session);
    curl_close($session);
    return json_decode($json);
}

var_dump(getResultFromYQL());
?>