所謂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文件。