WOE “GeoPlanet”: HTTP/1.1 406 Not Acceptable
November 19th, 2008Just putting a note here for the next time I’m working with the Yahoo! GeoPlanet APIs.
The conudrum: a HTTP GET on a given resource (http://where.yahooapis.com/v1/place/23511846?appid=$appid
) works in the browser, and works with wget
from the command line, but fails from within PHP with a 406 Not Acceptable
.
The solution, append format=XML
to the resource URL, because the service is blowing out its brains on a missing Accept
s header.
And that folks is the magic of REST.
update 2008/12/04: quick scan of my referer logs suggests this is biting folks using lwp-simple and wget particularly hard.
To be fair, the documentation does say it defaults to whatever’s specified in the accept-header ;). It probably makes sense to have a default-default too though because, yaknow, why not? The bigger question is: why use xml when json fits the same amount of awesome in a smaller, quickly parsed, and more comprehensible package?
Hey Mike,
The documentation I read said this:
“The API is accessed via HTTP GET.
Examples
Find the WOEID of a significant landmark: http://where.yahooapis.com/v1/places.q('sydney%20opera%20house‘)?appid=[yourappidhere]” “
I don’t think I should have to read any more then that to make a simple API call. Nowhere in there is there a mention of “this will break if you don’t use the full feature set of an HTTP 1.1 compliant HTTP client”. In fact the implication is quite the opposite.
But yeah, mostly the lack of a default is just brain damage, RESTful brain damage