6 ms·
WikiMedia's Geo IP Lookup JSONP call
- VMG 15y agoWhich method are they using?
- roryokane 15y agoWell, it can’t be the JavaScript location API, because there’s no JavaScript on that page, and anyway my browser would ask me if the page wanted to use my location. The only other method I know of that relies on information the site could get just by my visiting the page is looking the IP address up in a database of IP addresses and locations.
- tantalor 15y agoGonna guess Geo IP lookup.
- dangrossman 15y agoGeoIP (IP-to-location database). http://status.wikimedia.org/8777/156490/GeoIP-lookup http://status.wikimedia.org/8777/156490/GeoIP-lookup
- _delirium 15y agoUnless it's changed recently (I haven't followed the discussion since last year) it's using the free version of the MaxMind IP->city database (http://www.maxmind.com/app/geolitecity http://www.maxmind.com/app/geolitecity). I can't seem to find the relevant mailing list threads, but here's some evidence of ad-hoc accuracy testing last August: http://meta.wikimedia.org/wiki/MaxMindCityTesting http://meta.wikimedia.org/wiki/MaxMindCityTesting
- neilk 15y agoI work there. It's MaxMind.
- Inufu 15y agoNot very accurate for me. Wrong by about 400km. (that's basically from one end of my country to the other end)
- conradev 15y agoFor me, it was wrong by about 50 miles.
- yahelc 15y agoIt's off by ~10 miles, but since there are several million people between me and where it thinks I am, that's not particularly disturbing.
- harisenbon 15y agoSame for me as well. I'm being detected all the way in another prefecture. I find it strange that depending on the device, that I will be detected in different areas (even within the same service). For example: Google Maps says I'm at a park about a 10 minute drive from my current location. But if I view the mobile version of it on my iPod, it can find me to the room of the building I am in. Anything that's not google or apple puts me in Hamanako, which is a 2 hour drive on the expressway.
- aaronharder 15y agoCool. But what are the terms of use around this one?
- crescentfresh 15y agoThe payload is not JSONP and strikes me as a bit impractical: Geo = { /* object literal */ } I assume this service is meant to be consumed via <script> tag injection. Without a JSONP-style callback parameter, what are consumers to do, inject-then-poll until a "Geo" object is found in the global scope?
- judofyr 15y ago<script src="http://geoiplookup.wikimedia.org/"></script> <script>geoloaded()</script> </body></html>
- crescentfresh 15y agoD'oh!
- tybris 15y agoThe approach of dynamically generating a callback script is more robust than pure JSONP. If your URL returns an error (e.g., 404), you immediately notice, instead of waiting for the time-out. These days, my usual approach looks something like this in flight: <script type="text/javascript"> var response = undefined; </script> <script type="text/javascript" src="..."> // response = { .... }; </script> <script type="text/javascript"> _callbacks[1234](response); // response == undefined means error response = undefined; // allow garbage collection </script> It's a bit more administration, but I really like not having to worry about dynamic callback names, delayed errors, or non-existent callback functions any more.
- njl 15y agoDoing the IP lookup yourself isn't very hard. The nginx HttpGeoIPModule[1] will do a lookup on the MaxMind databases for you. I used it in my weekend hack, http://spotwoo.com http://spotwoo.com. Doesn't take very long to set up, very easy to use. [1] http://wiki.nginx.org/HttpGeoIPModule http://wiki.nginx.org/HttpGeoIPModule
- dermatthias 15y agobeen there, done that: http://ip.beached.org http://ip.beached.org ;)
- lost-theory 15y agoBut that's not JSONP.
- dermatthias 15y agoOh, that is correct. Sorry, I need to read the headline more carefully. Missed the 'P'.
- tybris 15y agoThat's trivial to set up yourself with Maxmind's GeoLite Database. http://www.maxmind.com/app/geolitecity http://www.maxmind.com/app/geolitecity
- neilk 15y agoHey folks, just FYI, I work there and this is not intended to be a public API for anyone to use. As others have pointed out, it's trivial to set up such a service yourself anyway. I know the security-minded among you are going to start complaining that it would be easy to add a nonce, but we'd rather avoid that. Our strategy is to serve virtually everything from cache.
- travelemployee 15y agoI actually implemented a lucene search index in case you might want to do it in lucene... https://github.com/krickert/IPAddressZipCodeStateCountryLuceneJavaSearch https://github.com/krickert/IPAddressZipCodeStateCountryLuce... It downloads one of the many free DBs of IP addys and makes it into an index. You can do geo spatial searching APIs with IP addys.. Fun stuff.
- abava 15y agoIt is not JSONP. You have to analyze JavaScript variable: http://servletsuite.com/geoip.htm http://servletsuite.com/geoip.htm
- qeorge 15y agoGeoPlugin.net has a city-level, free version of this that's actually intended for public use: http://www.geoplugin.net/json.gp http://www.geoplugin.net/json.gp Other formats here: http://www.geoplugin.com/webservices http://www.geoplugin.com/webservices Have been using it in production now for several months, works great.
- leecn 15y agoIf anyone wants something similar I built a version of this a few weeks ago: https://github.com/contrast/geoip_sinatra https://github.com/contrast/geoip_sinatra It's a sinatra app which uses the MaxMind data, typically responds in < 1ms, and it has caching built in (if you deploy it to heroku).
- nl 15y agoInterestingly, the latest version of Google AppEngine automatically geolocates every request (to the country level anyway) All user request have an X-AppEngine-Country header which contains the ISO-3166-1 alpha-2 country code for the user, based on the IP address of the client request. (from Version 1.5.1 http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes http://code.google.com/p/googleappengine/wiki/SdkReleaseNote...)
- jcitme 15y agoHmmm, as a chinese user behind a VPN (that i just checked was working), I'm amazed it pinpointed me down to my true city... Not sure if my vpn service passes my IP along or something else...