Receive a WOEID by Lat, Long with Yahoos API
Asked Answered
B

11

18

i searched a while but found nothing, thats simular to my problem.

i'm trying to use the YAHOO Weather API, for example: http://weather.yahooapis.com/forecastrss?w=4097

i don't know the WOEID in my case, but i got latitude and longitude points.

so my question is: is there a way to get the WOEID of a place by using lat and long points?

Brant answered 19/1, 2010 at 12:20 Comment(1)
Yahoo now has an API for this: developer.yahoo.com/geo/placefinderDisplode
P
18

This is now available through the recently released PlaceFinder API. Kudos to Yahoo! for providing yet another important piece of the Geo puzzle.

Periderm answered 27/6, 2010 at 22:40 Comment(1)
As of 5 years ago, the Placefinder API has been deprecated.Quadrennium
D
11

Yahoo! PlaceFinder API allows you to find a corresponding WOEID for a latitude/longitude pair. Consider this example web service method call:

http://where.yahooapis.com/geocode?location=37.42,-122.12&flags=J&gflags=R&appid=zHgnBS4m

You can play with request parameters according to your needs, see Yahoo! PlaceFinder API documentation for more. And you should replace appid with your Yahoo! appid, you can create one here.

This request returns a response like that, which includes a lot of useful data along with the WOEID:

{
    "ResultSet": {
        "version": "1.0",
        "Error": 0,
        "ErrorMessage": "No error",
        "Locale": "us_US",
        "Quality": 99,
        "Found": 1,
        "Results": [
            {
                "quality": 99,
                "latitude": "37.420000",
                "longitude": "-122.120000",
                "offsetlat": "37.420000",
                "offsetlon": "-122.120000",
                "radius": 500,
                "name": "37.42,-122.12",
                "line1": "3589 Bryant St",
                "line2": "Palo Alto, CA  94306-4207",
                "line3": "",
                "line4": "United States",
                "house": "3589",
                "street": "Bryant St",
                "xstreet": "",
                "unittype": "",
                "unit": "",
                "postal": "94306-4207",
                "neighborhood": "",
                "city": "Palo Alto",
                "county": "Santa Clara County",
                "state": "California",
                "country": "United States",
                "countrycode": "US",
                "statecode": "CA",
                "countycode": "",
                "hash": "",
                "woeid": 12797284,
                "woetype": 11,
                "uzip": "94306"
            }
        ]
    }
}
Dabbs answered 1/6, 2011 at 17:26 Comment(1)
Is this API stopped? Now it returns : D/StandardLauncher(11881): <title>Yahoo! Weather - Error</title> D/StandardLauncher(11881): <description>Yahoo! Weather Error</description> D/StandardLauncher(11881): <item><title>City not found</title><description> D/StandardLauncher(11881): Invalid Input /forecastrss?w=null&amp;u=c D/StandardLauncher(11881): </description></item></channel></rss> D/StandardLauncher(11881): <!-- api5.weather.sg3.yahoo.com Wed Apr 3 02:45:25 PST 2013 -->Vilberg
B
8

This is not using Yahoo's API but I found this blog post: http://geomojo.org/?p=38

Mentioning this service: http://www.geomojo.org/cgi-bin/reversegeocoder.cgi?long=-117.699444&lat=35.4775

Perhaps you can use that? It solved my problem, I hope it helps in solving yours.

Bobker answered 21/1, 2010 at 7:4 Comment(2)
Geomojo.org is now gone... You now have to use: where.yahooapis.com/…Helico
Above mentioned both sites are not working. Showing message as "The website you were trying to reach is temporarily unavailable."Degrade
P
3

It is somewhat ridiculous that Yahoo doesn't provide a lookup method for WOEIDs via lat/lon--it's been on their todo list since 2008--but that's the state of things.

I would caution you against using the suggested workaround implemented at Geomojo. If it works for your data, great, but the Yahoo service that Geomojo relies on is unpredictable. Geomojo uses Yahoo's PlaceMaker, which extracts location information from unstructured text to get a WOEID. It does this by creating a microformat containing your lat/lon pair and submitting it to PlaceMaker. However, since PlaceMaker returns WOEIDs for zip codes there's a loss of resolution and you will sometimes not be able to identify even the town for submitted coordinates. I have a number of example points on the east coast of the U.S. where the PlaceMaker WOEIDs do not correspond to the submitted lat/lon pairs.

Strangely, as HD writes, only Flickr's API provides a simple way to lookup a WOEID from lat/lon. Flickr's findByLatLon method has great resolution. It will usually return a neighborhood (one level below town) for a pair of coordinates.

Phosphorite answered 13/2, 2010 at 20:27 Comment(2)
Does flickr has any queries limitation on every App ID? Thanks.Vilberg
I get this from flickr: If your application stays under 3600 queries per hour across the whole key (which means the aggregate of all the users of your integration), you'll be fine. If we detect abuse on your key, we will need to expire the key, or turn it off, in order to preserve the Flickr API functionality for others (including us!).Vilberg
S
3

First get city name from lat/long using this code.

CLGeocoder *geocoder = [[CLGeocoder alloc] init] ;
[geocoder reverseGeocodeLocation:location
               completionHandler:^(NSArray *placemarks, NSError *error) {
                   if (error){
                       NSLog(@"Geocode failed with error: %@", error);
                       return;
                   }
                   CLPlacemark *placemark = [placemarks objectAtIndex:0];
                   NSLog(@"cityname - %@",placemark.locality);
               }];

Then use that cityname in below url

https://search.yahoo.com/sugg/gossip/gossip-gl-location/?appid=weather&output=sd1&p2=pt&command=YOURCITYNAME

Example - https://search.yahoo.com/sugg/gossip/gossip-gl-location/?appid=weather&output=sd1&p2=pt&command=sydney

This will return json and you find get WOEID in this...

{ "l" : { "gprid" : "eIL89mltSzSfgDWdP7uyBA" },
  "q" : "sydney",
  "r" : [ { "d" : "pt:iso=AU&woeid=1105779&lon=151.021&lat=-33.8563&s=New South Wales&c=Australia&sc=NSW&n=Sydney, Australia",
        "k" : "Sydney"
      } ]
}
Singe answered 13/1, 2014 at 13:35 Comment(0)
A
2

Seems like you got it the wrong way around. This is the URL on weather.yahoo.com: weather.yahoo.com/united-states/illinois/chicago-2379574/ The last bit is the WOEID for Chicago, i.e. 2379574

WOEIDs are described in the GeoPlanet docs: http://developer.yahoo.com/geo/geoplanet/guide/concepts.html#woeids

Astute answered 21/1, 2010 at 17:35 Comment(0)
C
2

You can use Flickr's reverse geocoding API through YQL.

Here is a link to the YQL with an example query to find the WOEID for a given lat/lon: http://developer.yahoo.com/yql/console/#h=select%20place.woeid%20from%20flickr.places%20where%20lat%3D43%20and%20lon%3D-94

The above query can be called directly from your app with this URL (XML/JSON formats available): http://query.yahooapis.com/v1/public/yql?q=select%20place.woeid%20from%20flickr.places%20where%20lat%3D43%20and%20lon%3D-94&format=xml

Caledonian answered 22/3, 2010 at 19:23 Comment(0)
H
0

There is a topic about this issue at the YDN forums http://developer.yahoo.net/forum/index.php?showtopic=69

Looks like it's buried in the to-do list, from 2008 "The ability to map a set of longitude and latitude coordinates to a WOEID, from which information such as ZIP and State may be derived, has already been identified as a valuable feature and it is on our enhancement request list."

Other quotes;

"Flickr has a method: flickr.places.findByLatLon which returns a WOEID, but they truncate coordinates to three decimal places."

In this topic a Yahoo dev also suggests using the advice at http://geomojo.org/?p=38 as an interim solution.

Himself answered 19/1, 2010 at 12:20 Comment(0)
B
0

Instead using lng & lat, you can use the current online IP Address to get the City Name then use Yahoo GeoPlanet web service to get the WOEID. Follow this tutorial to get the detail: http://4rapiddev.com/php/get-woeid-of-a-city-name-from-ip-address-with-php/

Bouncy answered 19/7, 2011 at 16:22 Comment(1)
Can you add some details from that link?Languishment
B
0

The former Yahoo Weather API has became deprecated. The new Yahoo Weather API requires a query string to get weather.

Use the following query string to get weather data by latitude and longitude -
"https://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid in (select woeid from geo.places(1) where text=\"(" + latitude + "," + longitude + ")\")&format=json"

Eg - 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%22(31.63%2C74.87)%22)&format=json

Buckbuckaroo answered 29/4, 2018 at 5:12 Comment(1)
Using Javascript ES6 Template Literals - ` https://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid in (select woeid from geo.places(1) where text="(${lat},${lon})")&format=json `Buckbuckaroo
D
-2

Yahoo api uses weather.com actually, so go to weather.com and search for your local weather. I'm in Chicago so I entered 'Chicago, IL' and here's the link in my browser bar showing my weather:

http://www.weather.com/weather/today/Chicago+IL+USIL0225?lswe=chicago,%20il&from=searchbox_localwx

In the link is the woeid - which is USIL0225

You can get yours the same way.

Dree answered 19/1, 2010 at 16:59 Comment(2)
But the question is not how to get the woeid by city and state. It is for latitude and longitude.Bobker
"USIL0225" is not a woeid. Woeids are numeric.Displode

© 2022 - 2024 — McMap. All rights reserved.