I found this and it worked great for me. https://api.rss2json.com There's a free layer and it's way more straightforward than YQL was for RSS to JSONP conversion.

Answer from Xopher on Stack Overflow
🌐
Stack Overflow
stackoverflow.com › questions › 54059843 › no-weather-data-from-yahoo-weather-api
yql - No weather data from Yahoo Weather API - Stack Overflow
Important EOL Notice: As of Thursday, Jan. 3, 2019, the weather.yahooapis.com and query.yahooapis.com for Yahoo Weather API will be retired. To continue using our free Yahoo Weather APIs, use https://weather-ydn-yql.media.yahoo.com/forecastrss.
🌐
Stack Overflow
stackoverflow.com › questions › 54269381 › how-to-get-yahoo-weather-information-using-coldfusion
How to get yahoo weather information using coldfusion - Stack Overflow
you can visit here developer.yahoo.com/weather and at the top of the page it says use weather-ydn-yql.media.yahoo.com/forecastrss. – VanHau Jan 20 '19 at 15:12 · 2 · After using Yahoo for many years, I moved to Dark Sky (1,000 calls per ...
Discussions

json - YQL query service replacement now that Yahoo shut it down - Stack Overflow
So now that Yahoo shut down query.yahooapis.com as the following message indicates, does anyone know of a free replacement? "Important EOL Notice: As of Thursday, Jan. 3, 2019, the YQL service at More on stackoverflow.com
🌐 stackoverflow.com
Yahoo New Weather API oAuth call in jQuery
As of the 3rd of January Yahoo Weather has a new weather API that requires oAuth https://developer.yahoo.com/weather/ Now I have gotten my Client ID (Consumer Key) and my Client Secret (Consumer S... More on stackoverflow.com
🌐 stackoverflow.com
url - Making Yahoo Weather API request with OAuth 1 - Stack Overflow
I ran into a problem with Yahoo Weather API because it wasn't giving me any data. After visiting YDN website I've found out that all requests should be updated to OAuth 1 starting from March 15th (but I got working it just today!). It's also said to include Yahoo App key and secret. What the request url should look like now, when I must use my app key and secret? Before, I got such request string: https://query.yahooapis.com/v1/public/yql... More on stackoverflow.com
🌐 stackoverflow.com
April 10, 2016
PSA: On Jan. 3rd Yahoo pulled it's weather API

National Weather Service (NWS) still works but they only supply weather in the USA. Open Weather, the Pebble default, should work but is horribly inaccurate where I live.

More on reddit.com
🌐 r/pebble
31
72
January 6, 2019
🌐
Drupal
drupal.org › project › live_weather › issues › 3024533
Yahoo has changed their API [#3024533] | Drupal.org
May 28, 2019 - To continue using our free Yahoo Weather APIs, use https://weather-ydn-yql.media.yahoo.com/forecastrss.
🌐
GitHub
gist.github.com › ydn › 6ef5a695e871b8a628d0
Weather API · GitHub
sunrise= "http://xml.weather.yahoo.com/ns/rss/1.0" sunrise, sunset= "7:27 am" sunset ... # Python 2.x # ... # Python 3.x import urllib.parse import urllib.request import json baseurl = "https://query.yahooapis.com/v1/public/yql?" yql_query = "select wind from weather.forecast where woeid=2460286" yql_url = baseurl + urllib.parse.urlencode({'q':yql_query}) + "&format=json" result = urllib.request.urlopen(yql_url).read() data = json.loads(result) print data['query']['results']
🌐
Yahoo!
yahoo.com › news › weather-news
Latest Weather News and Updates, plus Forecasts, Predictions, and Temperatures - Yahoo News
2 weeks ago - The latest and breaking weather news and updates from Yahoo News and Weather, including forecasts, hurricanes, tornadoes, snow events, tsunamis, and flooding.
Top answer
1 of 4
12

If you simply replace

http://weather.yahooapis.com/

with

http://xml.weather.yahoo.com/

it should work ;)

2 of 4
5

Current Solution As of Mid-April 2016 - Yahoo is Allowing YQL Requests Without Oauth Again Due to Developer Outrage

You can once again write a query without any authentication like the following:

https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22nome%2C%20ak%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys

Previous answers below in case they were of help for anyone. During certain periods of Yahoo's changes they did work.


Below are Older Versions of this Answer for Historical Reasons That May Also Still Work


Updated Answer After Yahoo's Latest Round of Updates - Insecure OAuth Workaround

You will need to create a Yahoo account & then create a web application at https://developer.yahoo.com/apps/create/

You will then need to use an OAuth Library to properly encode your Client ID & Client Secret. Here is an example in JavaScript based off a Yahoo Example Page & a 2008 Blog Article by Paul Donnelly. This generates an encoded URL to use to request a weather feed.

//Fill in your consumer Key & Secret from Yahoo's App & adjust location as needed. 
//This Key & Secret combination is invalid & won't work for you
var consumerKey = "dj0yJmk9NkRjbXpjUEhPbjlnJmQ9WVdrOVFUQTFaV2wxTjJrbXnHbz3NQSktJnM9Y29uc3VtZXJzZWNyZXQmeD0wOQ--";
var consumerSecret = "9bea8a9k3934d16365ek7e23e0abo1bba4q5c03c";
var locationToQuery = "90210"; //Can be zip code or anything that works in the query select woeid from geo.places(1) where text=<Your Location>


var makeSignedRequest = function(ck,cs,loc) {

    var encodedurl = "https://query.yahooapis.com/v1/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22"+loc+"%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";

    var accessor = { consumerSecret: cs, tokenSecret: ""};          
    var message = { action: encodedurl, method: "GET", parameters: [["oauth_version","1.0"],["oauth_consumer_key",ck]]};

    OAuth.setTimestampAndNonce(message);
    OAuth.SignatureMethod.sign(message, accessor);

    var parameterMap = OAuth.getParameterMap(message);
    var baseStr = OAuth.decodeForm(OAuth.SignatureMethod.getBaseString(message));           
    var theSig = "";

    if (parameterMap.parameters) {
        for (var item in parameterMap.parameters) {
            for (var subitem in parameterMap.parameters[item]) {
                if (parameterMap.parameters[item][subitem] == "oauth_signature") {
                    theSig = parameterMap.parameters[item][1];                    
                    break;                      
                }
            }
        }
    }

    var paramList = baseStr[2][0].split("&");
    paramList.push("oauth_signature="+ encodeURIComponent(theSig));
    paramList.sort(function(a,b) {
        if (a[0] < b[0]) return -1;
        if (a[0] > b[0]) return 1;
        if (a[1] < b[1]) return  -1;
        if (a[1] > b[1]) return 1;
        return 0;
    });

    var locString = "";
    for (var x in paramList) {
        locString += paramList[x] + "&";                
    }

    var finalStr = baseStr[1][0] + "?" + locString.slice(0,locString.length - 1);

    return finalStr;
};

//Use the encodedURL to make your request
var encodedURL = makeSignedRequest(consumerKey, consumerSecret, locationToQuery); 

It should be noted never to show your consumer key or consumer secret to the public. You can use your own Yahoo Credentials in this Plunkr: http://plnkr.co/edit/EvLbgs

Original Answer

Unfortunately as of right now, the servers are down to create that app. Ideally, once they're back up you can use server side code to do the oauth part. I'll try to edit this answer when that happens. According to Yahoo the URL will be the same except without the /public part. The big difference will be that you need to send request headers with the URL that authenticate your account.

Here's a temporary fix until then. You can still use a YQL query geo.places with a zip code to get the woeid.

select * from geo.places where text=90210 limit 1

You can then grab your woeid from there & use it in the following url to get an xml feed:

http://weather.yahooapis.com/forecastrss?w=WOEID_GOES_HERE

I've created a Plunker as an example of this temporary fix here: http://plnkr.co/edit/dClPDtnToMhHqvKpfCzj?p=preview

Here's the gist of it though using jQuery:

var zipCode = 90210;

$.ajax({
    dataType: "json",
    headers:  { "Accept": "application/json; odata=verbose" },
    url: "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20geo.places%20where%20text%3D"+zipCode+"%20limit%201&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys",
    beforeSend: function(xhr){xhr.setRequestHeader('Accept', 'application/json; odata=verbose');},
    success: function(data){
        $.getJSON("https://query.yahooapis.com/v1/public/yql?callback=?", {
            q: "select * from xml where url=\"https://weather.yahooapis.com/forecastrss?w="+data.query.results.place.locality1.woeid+"\"",
            format: "json"
        },function (data) {
          var weather = data.query.results.rss.channel;
          var html = '<div><span class="temperature">'+weather.item.condition.temp+'<span class="degree">&deg;</span><sup>'+weather.units.temperature+'</sup></span><br><span class="wind-chill">Feels like: '+weather.wind.chill+'<span class="degree">&deg;</span></span></div></a>';
          $("#weather").html(html);
        });
    },
});
Find elsewhere
Top answer
1 of 1
1

So reading the documentation it doesn't seem possible to send a batch of locations to the Yahoo Weather API. But what you can do is .map() over an array of locations and make multiple requests.

https://developer.yahoo.com/weather/documentation.html#params

Since OAuth 1.0 is a callback, I've wrapped that with a new Promise(), which will give us an array of unfulfilled promises. Then finally, Promise.all() method returns a single Promise that fulfills when all of the promises passed as an iterable have been fulfilled.

const OAuth = require('oauth')

const header = {
    'X-Yahoo-App-Id': 'your-app-id',
}

const request = new OAuth.OAuth(null, null, 'your-consumer-key', 'your-consumer-secret', '1.0', null, 'HMAC-SHA1', null, header)

const locations = ['pittsburgh,pa', 'london']

const getWeatherData = () =>
    Promise.all(
        locations.map(
            location =>
                new Promise((resolve, reject) =>
                    request.get(`https://weather-ydn-yql.media.yahoo.com/forecastrss?location=${location}&format=json`, null, null, (err, data) => {
                        if (err) return reject(err)
                        return resolve(data)
                    })
                )
        )
    )

const main = async () => {
    const test = await getWeatherData()

    console.log(test)
}

main()

I have tested this with the API and here is an example response for the code above.

[
    '{"location":{"city":"Pittsburgh","region":" PA","woeid":2473224,"country":"United States","lat":40.431301,"long":-79.980698,"timezone_id":"America/New_York"},"current_observation":{"wind":{"chill":32,"direction":280,"speed":5.59},"atmosphere":{"humidity":70,"visibility":10.0,"pressure":29.03,"rising":0},"astronomy":{"sunrise":"6:42 am","sunset":"7:59 pm"},"condition":{"text":"Partly Cloudy","code":30,"temperature":37},"pubDate":1586862000},"forecasts":[{"day":"Tue","date":1586836800,"low":38,"high":45,"text":"Mostly Cloudy","code":28},{"day":"Wed","date":1586923200,"low":32,"high":47,"text":"Partly Cloudy","code":30},{"day":"Thu","date":1587009600,"low":31,"high":45,"text":"Partly Cloudy","code":30},{"day":"Fri","date":1587096000,"low":35,"high":42,"text":"Rain And Snow","code":5},{"day":"Sat","date":1587182400,"low":35,"high":51,"text":"Scattered Showers","code":39},{"day":"Sun","date":1587268800,"low":42,"high":59,"text":"Rain","code":12},{"day":"Mon","date":1587355200,"low":43,"high":55,"text":"Mostly Cloudy","code":28},{"day":"Tue","date":1587441600,"low":37,"high":58,"text":"Partly Cloudy","code":30},{"day":"Wed","date":1587528000,"low":44,"high":61,"text":"Partly Cloudy","code":30},{"day":"Thu","date":1587614400,"low":50,"high":59,"text":"Mostly Cloudy","code":28}]}',
    '{"location":{"city":"London","region":" England","woeid":44418,"country":"United Kingdom","lat":51.506401,"long":-0.12721,"timezone_id":"Europe/London"},"current_observation":{"wind":{"chill":46,"direction":70,"speed":6.84},"atmosphere":{"humidity":50,"visibility":10.0,"pressure":30.27,"rising":0},"astronomy":{"sunrise":"6:04 am","sunset":"7:58 pm"},"condition":{"text":"Mostly Sunny","code":34,"temperature":49},"pubDate":1586862000},"forecasts":[{"day":"Tue","date":1586818800,"low":38,"high":54,"text":"Partly Cloudy","code":30},{"day":"Wed","date":1586905200,"low":34,"high":62,"text":"Mostly Sunny","code":34},{"day":"Thu","date":1586991600,"low":38,"high":68,"text":"Partly Cloudy","code":30},{"day":"Fri","date":1587078000,"low":45,"high":62,"text":"Rain","code":12},{"day":"Sat","date":1587164400,"low":45,"high":60,"text":"Rain","code":12},{"day":"Sun","date":1587250800,"low":42,"high":63,"text":"Partly Cloudy","code":30},{"day":"Mon","date":1587337200,"low":44,"high":64,"text":"Scattered Showers","code":39},{"day":"Tue","date":1587423600,"low":44,"high":66,"text":"Partly Cloudy","code":30},{"day":"Wed","date":1587510000,"low":45,"high":67,"text":"Mostly Cloudy","code":28},{"day":"Thu","date":1587596400,"low":44,"high":65,"text":"Mostly Cloudy","code":28}]}',
]
🌐
Yahoo!
yahoo.com
Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos
Latest news coverage, email, free stock quotes, live scores and video are just the beginning. Discover more every day at Yahoo!
Top answer
1 of 3
3

Yahoo dev's replied on twitter saying that they are investigating this issue. You can follow it up and upvote (for speeding the process) it here:

https://yahoo.uservoice.com/forums/207813/suggestions/10740099

2 of 3
2

I have used the Yahoo Weather API XML format for years and noticed in that last couple of weeks this new bug. I tried to report the bug to https://developer.yahoo.com/weather/support but get a 404 page not found. I decided to parse the returned date if equal to current date to continue if not equal to re-call sub. this way I always get current weather but unfortunately that's a lot of unnecessary traffic / request maybe YDN will realize and fix. but without being able to report I don't know. I know this is not a fix but more a Band-Aid good luck!

Private Sub btnWeather_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWeather.Click

    If InternetConnection() = False Then
        MsgBox("No internet connection!", vbExclamation, "Oops!")
        Exit Sub
    Else

        'MsgBox("Internet connection detected!", vbInformation, "Huray!")

        btnWeather.Enabled = False
        lblWorking.Text = "Working ..."
        tbTries.Text = "1"

        Try

            Dim t As New clsWeather(Format(Me.TxtBoxZIP.Text), "f")
            lblTodaysDate.Text = FormatDateTime(Now.Date, DateFormat.ShortDate)
            tbHigh.Text = t.high & "°"
            lblCity.Text = TxtBoxZIP.Text & " Weather "
            tbLow.Text = t.Low & "°"
            tbDay.Text = t.day
            tbDate.Text = t.date1
            tbCurrenttemp.Text = t.currenttemp & "°"
            tbCurrentCode.Text = t.currentcode
            tbForcastCode.Text = t.ForcastCode
            tbSunrise.Text = t.Sunrise
            tbSunset.Text = t.Sunset
            tbWind.Text = CInt(Val(t.Wind)) & " mph"
            tbHumidity.Text = CInt(Val(t.humidity))
            imgWeather.Image = Image.FromFile(t.GetImage)
            CodeName()


            If t.currenttemp < 85 And t.currenttemp > 45 Then

                lblFeelsLike.Text = ""
                tbFeelsLike.Text = ""

            End If

            If t.currenttemp > 85 Then

                lblFeelsLike.Text = "Heat Index:"

                Dim Temp = t.currenttemp
                Dim RH = CInt(Val(t.humidity))

                tbFeelsLike.Text = (-42.379 + 2.04901523 * Temp) + (10.14333127 * RH) - (0.22475541 * Temp * RH) - (0.00683783 * Temp * Temp) - (0.05481717 * RH * RH) + (0.00122874 * Temp * Temp * RH) + (0.00085282 * Temp * RH * RH) - (0.00000199 * Temp * Temp * RH * RH)

                Dim num As Decimal = CType(tbFeelsLike.Text, Decimal)
                Me.tbFeelsLike.Text = String.Format("{0:n0}", num)
                tbFeelsLike.Text = tbFeelsLike.Text & "°"

            End If

            If t.currenttemp < 45 Then

                lblFeelsLike.Text = "Wind Chill:"
                tbFeelsLike.Text = CInt(Val(t.Chill)) & "°"

            End If


        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End If


        Dim day As String = DateTime.Now.ToString("dd")
        If day = tbDate.Text = True Then
            tbDate1.Text = tbDate.Text
            btnWeather.Enabled = True
            lblWorking.Text = ""
        Else
            btnWeather_Click(sender, e)
            tbTries.Text = tbTries.Text + 1
        End If


End Sub
🌐
GitHub
github.com › tjmarkham › win10widgets › issues › 120
Weather not working - Yahoo api retired on 1/3/18 · Issue #120 · tjmarkham/win10widgets
April 1, 2019 - This will impact users of datatables.org as well as developers who creates features using this YQL service. To continue using our free Yahoo Weather APIs, use https://weather-ydn-yql.media.yahoo.com/forecastrss as your new API endpoint.
Author   patzip
🌐
Yahoo!
weather.yahoo.com › us › ny › new-york
New York, NY Weather Forecast, Conditions, and Maps – Yahoo Weather
1 day ago - Partly Cloudy today with a high of 70°F and a low of 52°F. There is a 72% chance of precipitation.
🌐
GitHub
github.com › pimoroni › breakout-garden › issues › 11
Yahoo weather service, as used in weather example, has been closed down · Issue #11 · pimoroni/breakout-garden
September 1, 2019 - 3, 2019, the http://weather.ya...i@oath.com for credentials for the free Yahoo Weather API service at https://weather-ydn-yql.media.yahoo.com/forecastrss ....
Author   nickbroon
🌐
GitHub
github.com › FRC4564 › infocenter › issues › 4
the weather.yahooapis.com and query.yahooapis.com for Yahoo Weather API will be retired · Issue #4 · FRC4564/infocenter
January 31, 2019 - To continue using our free Yahoo Weather APIs, use https://weather-ydn-yql.media.yahoo.com/forecastrss. Follow below instructions to get credentials and onboard to this free Yahoo Weather API service.
Author   wagrund
🌐
GitHub
github.com › googlecodelabs › your-first-pwapp › issues › 143
EOL Notice: Yahoo Weather API Will Be Retired 01/03/2019 · Issue #143 · googlecodelabs/your-first-pwapp
December 29, 2018 - Important EOL Notice: As of Thursday, Jan. 3, 2019, the weather.yahooapis.com and query.yahooapis.com for Yahoo Weather API will be retired. To continue using our free Yahoo Weather APIs, use https://weather-ydn-yql.media.yahoo.com/forecastrss.
Author   zsadler
🌐
X
x.com › ydn › status › 1079785891558653952
Yahoo Developer on X: "On Jan. 3, 2019, YQL service at https://t.co/g4W9RhdMLk will be retired. YQL based services that use https://t.co/g4W9RhdMLk, including users of https://t.co/5IkUaEykdl, will no longer operate. Yahoo Weather API users see the tweet below for info about continuing your service." / X
@ydn · On Jan. 3, 2019, YQL service at http://query.yahooapis.com will be retired. YQL based services that use http://query.yahooapis.com, including users of http://datatables.org, will no longer operate. Yahoo Weather API users see the tweet below for info about continuing your service.