所谓GeoIP,就是经过来访者的IP,定位他的经纬度,国家/地区,省市,甚至街道等位置信息。这里面的技术不算难题,关键在于有个精准的数据库。有了准确的数据源就奇货可居赚点小钱,但是发扬合做精神,集体贡献众人享用是咱们追求的。
php
Hostip.info提供了一个平台,能够添加已知的数据信息,能够免费获取数据库。同时,提供了简单易用的API,能够获取特定IP的位置信息,还有国家旗帜。API所返回的数据格式,除了最多见的HTML外,还提供了GML格式的,赞!html
http://api.hostip.info/get_html.php?ip=159.226.115.22&position=true 返回HTM格式的数据;git
http://api.hostip.info/?ip=159.226.115.22&position=true 返回GML文件;web
http://api.hostip.info/flag.php?ip=159.226.115.22 返回所在国家或地图的旗帜。(最终是形如http://api.hostip.info/images/flags/cn.gif 格式的图片文件,在Silverlight中没法应用。)
ajax
全面一点的,更加精确一点的数据库,MaxMind GeoIP,不过是收费的。写本文时发现Hostip.info多个页面都有MaxMind的连接,是纯粹的广告,仍是后面是一家子?
数据库
若试图单纯用JavaScript和Silverlight去获取来访者的IP彷佛无法实现,须要借助PHP或者ASP.NET等。但Google同窗有一款API:google.loader.ClientLocation, 能够经过JavaScript获取到来访客户的位置信 息:ClientLocation.latitude,ClientLocation.longitude,ClientLocation.address.city,ClientLocation.address.country,ClientLocation.address.country_code,ClientLocation.address.region。 (为何没给出IP属性呢?)
api
其实,Hostip的API中若不给定IP,那么返回的就是访问者IP的位置信息,试试:app
http://api.hostip.info/get_html.php?position=true
ide
正当一周前俺犹豫上述内容过于简单,而迟于整理成为博客的次日,从ESRI Code Gallery的示例GeoIPLocator中挖掘到它所利用的服务 支持更多的操做,好比能够直接从域名来获取位置信息,返回的国家旗帜是jpg格式的(http://marceloctorres.net/espiadns/images/flags/cn.jpg )。借助oxygen xml editor的WSDL SOAP分析器,对该服务进行分析,能够查看它支持4个操做,并能够试试发送请求及其返回的信息。google
UPDATE2010/5/4: 再增长一个API提供者: http://ipinfodb.com/ Are you looking for the geographical location of an IP address? You are at the right place. We offer a wide range of free services based on our IP address geolocation database:
- Web based IP geolocation lookup
- IP geolocation API (XML, JSON and CSV format)
- API that generate IP CIDR by country for iptables or htaccess blocklist
- E-commerce fraud detection API
- IP database updated monthly!
PS:谁有免费的WSDL SOAP分析器推荐一下?
PS2:若是下载运行GeoIPLocator的源码,除Silverlight的开发环境外,须要ESRI Silverlight的库。更重要的,若是你不是Windows 7 OS,须要更改web.config文件,或者干脆从新引入一下上述服务。
PS3:Nikhil Kothari提供了相似的地图定位小示例,直接提取了hostip返回的HTML信息,并定位在Bing Maps Silverlight Control上。
PS4:相对最先,Scott Hanselman介绍了如何用ASP.NET使用hostip的API,以及用LINQ解析hostip返回的GML信息。同时Nikhil和它都提到了google.loader.ClientLocation。
PS5:顺便发现 google.load API挺好用,能够在Visual Studio里使用jQuery的智能提示,用Google来托管jQuery文件。