Since the old Yahoo feeds stopped working, I’ve switched my code to use https://developer.yahoo.com/weather/
Note, contrary to what the documentation says, you don’t need any API keys or authentication. You can just make a standard GET request and get JSON data back.
The developer page mentions a rate limit of 2,000 signed calls a day but again there’s no indication if/how this is being enforced.
The format is slightly different. First you need to construct a YQL query, however this is well documented.
Some example PHP code of my own (using the FuelPHP framework):
// Build query for correct city $BASE_URL = "http://query.yahooapis.com/v1/public/yql"; $yql_query = sprintf('select * from weather.forecast where woeid in (select woeid from geo.places(1) where woeid=%d)', \Fuel\Core\Config::get('default_weather_loc_id.yahoo')); $yql_query_url = $BASE_URL . "?q=" . urlencode($yql_query) . "&format=json"; // Make call with cURL $session = curl_init($yql_query_url); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); $json = curl_exec($session); if (curl_errno($session)) { \Log::error('Yahoo check: '.curl_error($session)); } $weather_data = json_decode($json); if (! property_exists($weather_data, 'query')) { return false; } return $weather_data->query->results->channel;
Note, regardless how much data you request, the results are contained inside a JSON channel object, which is inside results, which in turn is within the main query object.