使用PHP和json检索YQL


Retrieve YQL with PHP and json

我想获得这个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>

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

工作url应为:$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());
?>