Question

I want to get the code element of the weather forecast of this YQL query , the problem is that this returns me 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);
        }
        ?>

OK I found the Solution 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>
Was it helpful?

Solution

Drop the callback=? query part. It is intended for JavaScript callback function.

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

UPDATE

Working code: (tested on PHP 5.3.27 and 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());
?>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top