文章目录
-
- 摘要
- 实现过程
-
- 思路
- GeoLite2 IP库文件引入
-
- 准备工作
- 代码实现
- Ipdata API
-
- 准备工作
-
- 官网账号注册
- 创建API Key
- API文档:
- 代码实现
- 完整代码
- 总结
摘要
本文详解如何封装一个根据IP获取所在国家地区的接口。不管是网站、APP还是PC软件,如果你的目标客户包含国内和海外,那必然有多语言等需要区分用户所在区域的功能,虽然说IP定位会有开VPN的特殊场景影响导致不准确(国内被定位到海外,一般来说产品可接受),并且APP本身有其他判断用户所在地的方式,比如安卓可以通过GPS,但是对于一个完整的方案来说,在客户端其他更准确的方式失效或者由于用户不给APP权限导致无法使用时,有一个IP查询的接口对接也是一个必要的兜底方式。
实现过程
思路
世界范围内IP的数据是不停在更新的,为确保尽可能多的IP能通过接口查询到对应的所在区域,我们需要更新尽量频繁的数据源,ipdata是个不错的选择,它提供API,传入IP即可返回IP相关的国家、城市、时区等信息,但是Ipdata免费调用次数只有一天1500次,需要更多调用次数得花钱。所以我们搭配一个固定的ip数据文件GeoLite2-City.mmdb查询,优先从项目集成的数据文件查询,查询不到才去调用ipdata,并且还可以做个ipdata调用结果的缓存设计,毕竟一个ip属于什么国家是不会频繁变化的,你哪怕缓存几天,都能大大降低ipdata调用次数的