哈喽大家好啊!喵咪开源软件推荐(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
GenLite2 是 Geoip2 的免费版本(Geoip2 是要收费提供专业服务,并且IP地址库对相对免费的更新频繁,有钱的老爷们可以购买支持),这款IP数据库是由 maxmind 进行维护的,
GenLite2 提供的IP数据库格式有两种一种是二进制DB文件,另外一种是csv文件,首先还是推荐使用DB文件,并且精准度有两个等级,一个是精确到国家(数据相对比较少1.2MB)另外一个就是精确到城市(30MB左右).
既然是数据库可以导入到MYSQL来使用? 虽然可以通过csv格式来进行处理,但是很麻烦很多格式基本是它独有的,那么我们要怎么使用呢?笔者在github找了一下几款可以使用到genip2的扩展库如下
maxmind/GeoIP2-php oschwald/geoip2-golang maxmind/GeoIP2-java maxmind/GeoIP2-python
大部分都是官方maxmind提供的
笔者通过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,但是具体经纬度结果还是相差甚远
GeoLite2可以解决通过IP对城市级别的定位问题,但是解析出来的经纬度有比较大的偏差笔者在杨浦区经纬度解析到了闵行区,感兴趣的大家也可以下载下来体验一下,今后喵咪会给大家带来更多有趣的开源软件,多谢大家的支持下周再见.
注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!