I've just been geocoding. In fact, I've been putting together a non-GPS geocoding function for FixMyS60. Specifically, I can say that I have no use whatsoever for geonames, which although it has an interesting range of Web services doesn't seem to have any data in it. I love OpenStreetMap, and it's possible to query its gazetteer as an XML interface. However, there is no way of getting just the search results without the associated "nearest places"; so I would only use this where I could use BeautifulSoup or ElementTree to extract the data. But I needed a source of geodata that I could process using only regular expressions. (PyS60 1.9 and above have Expat, and there is a cElementTree port for some versions, but I'm loth to use third party modules in a mobile app because deploying is already such a drag.)
And Yahoo!'s service is unexpectedly good. Which brings me to the point. I was trying to see what would happen if someone sent it dodgy data. Would it 404, send a custom error message, or send a list of possible options? In fact, I struggled to break it. Eventually I queried it for "Parrot Cock, fhfhgh, UK". And it unhesitatingly directed me to +54° 18' 50.11" N, 2° 13' 55.85" W...which is on the old Hawes-Garsdale Head railway line at the top of Wensleydale.
View Larger Map
I tried some more spurious queries. Same result, except when I specified "Mars" as the city parameter - the system provided a list of places called Marsh. Thanks for the easter egg!