哈嘍大家好啊!喵咪開源軟體推薦(3)終於和大家見面了,這次我們來說說什麼呢?大家有沒有遇到過這樣一個場景,當你出國遊玩的時候到了一個國家時你的手機就自動提示你在哪裡是否需要切換時區,或者是地圖定位時機器沒有GPS晶片怎麼通過網路定位獲取經緯度等資訊,這個時候我們能夠獲取到最好的屬性就是IP地址,每一個國家都分配的有一批IP地址並且也有專門維護IP地址庫的組織,看到這裡大家也明白了對了我們今天就來推薦GenLite2這款IP資料庫給到大家...
附上:
喵了個咪的部落格:w-blog.cn
geolite2 下載地址 :http://dev.maxmind.com/geoip/geoip2/geolite2/
geoip2-golang 專案地址 :https://github.com/oschwald/geoip2-golang
1.GenLite21.1 簡單介紹GenLite2 是 Geoip2 的免費版本(Geoip2 是要收費提供專業服務,並且IP地址庫對相對免費的更新頻繁,有錢的老爺們可以購買支援),這款IP資料庫是由 maxmind 進行維護的,
GenLite2 提供的IP資料庫格式有兩種一種是二進位制DB檔案,另外一種是csv檔案,首先還是推薦使用DB檔案,並且精準度有兩個等級,一個是精確到國家(資料相對比較少1.2MB)另外一個就是精確到城市(30MB左右).
1.2 用什麼東西來使用?既然是資料庫可以匯入到MYSQL來使用? 雖然可以通過csv格式來進行處理,但是很麻煩很多格式基本是它獨有的,那麼我們要怎麼使用呢?筆者在github找了一下幾款可以使用到genip2的擴充套件庫如下
maxmind/GeoIP2-phposchwald/geoip2-golangmaxmind/GeoIP2-javamaxmind/GeoIP2-python
大部分都是官方maxmind提供的
2. 具體的IP資料庫效果怎麼樣呢?筆者通過Golang編寫了一個簡單API來提供IP地址資訊查詢,筆者找了一個湖南長沙的IP地址220.168.56.116 查詢結果如下
{ "City": { "GeoNameID": 1815577, "Names": { "de": "Changsha", "en": "Changsha", "es": "Changsha", "fr": "Changsha", "ja": "長沙市", "pt-BR": "Changsha", "ru": "Чанша", "zh-CN": "長沙市" } }, "Continent": { "Code": "AS", "GeoNameID": 6255147, "Names": { "de": "Asien", "en": "Asia", "es": "Asia", "fr": "Asie", "ja": "アジア", "pt-BR": "Ásia", "ru": "Азия", "zh-CN": "亞洲" } }, "Country": { "GeoNameID": 1814991, "IsoCode": "CN", "Names": { "de": "China", "en": "China", "es": "China", "fr": "Chine", "ja": "中國", "pt-BR": "China", "ru": "Китай", "zh-CN": "中國" } }, "Location": { "AccuracyRadius": 50, "Latitude": 28.1792, "Longitude": 113.1136, "MetroCode": 0, "TimeZone": "Asia/Shanghai" }, "Postal": { "Code": "" }, "RegisteredCountry": { "GeoNameID": 1814991, "IsoCode": "CN", "Names": { "de": "China", "en": "China", "es": "China", "fr": "Chine", "ja": "中國", "pt-BR": "China", "ru": "Китай", "zh-CN": "中國" } }, "RepresentedCountry": { "GeoNameID": 0, "IsoCode": "", "Names": null, "Type": "" }, "Subdivisions": [ { "GeoNameID": 1806691, "IsoCode": "43", "Names": { "en": "Hunan", "fr": "Province de Hunan", "zh-CN": "湖南" } } ], "Traits": { "IsAnonymousProxy": false, "IsSatelliteProvider": false }}
準確的解析出了中國湖南長沙並且還有多國語言的稱呼,筆者在試了試通過手機移動網來進行的解析,筆者在上海市楊浦區獲得的經緯度是 31.0456,121.3997,但是具體經緯度結果還是相差甚遠
3 總結
GeoLite2可以解決通過IP對城市級別的定位問題,但是解析出來的經緯度有比較大的偏差筆者在楊浦區經緯度解析到了閔行區,感興趣的大家也可以下載下來體驗一下,今後喵咪會給大家帶來更多有趣的開源軟體,多謝大家的支援下週再見.
注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!