我想编写一个PHP脚本,只为一个国家(IRAN)解析一个好的城市名称(不需要其他任何东西)。由于我必须多次查询数据库,最好通过可下载的本地版本。我已经阅读了stackoverflow上的大多数帖子,从现在起我测试了这些:
- maxmind的GeoIP City听起来不错,但不是免费的
- maxmind的GeoIP具有较低的准确度(约50-60%)
- ip2country.net有一个IP-2城市数据库,但不是免费的,并且不解析伊朗的城市名称
- 我还尝试了ipinfodb.com的DB#.Lite,它在这里有一个API,但没有成功。问题是,它检测不到很多城市名称
- 我也尝试过hostip.info API,但似乎太慢了
- 有一个带有本地DB的免费php类,它只解析国家名称
- 我不知道是否有机会,使用Piwik与这个GeoIP插件。如果有人知道的话,如果有想法的话,我将不胜感激
- ipinfo.io是另一个无法准确解析城市名称的服务
- 我不知道是否有办法使用谷歌分析来解析城市名称,因为我认为谷歌在伊朗等国家的服务会比任何其他服务都好
任何好主意都将不胜感激。
这是一个艰难的过程,很难可靠地完成。我过去试过它,它有点像
- 获取IP地址以及城市和国家/地区的数据库(http://lite.ip2location.com/database-ip-country-region-city或http://ipinfodb.com/ip_database.php)
- 获取IP地址并根据这些表查询以查找城市和国家
- 最后使用国家栏检查其是否在伊朗
有一些付费服务可以很快为您做到这一点。你可能需要很长时间才能找到仍然不可靠的东西,因为你根本没有数据。我会认真考虑http://www.maxmind.com/en/city_per-当然,除非这是一个完全没有商业价值的项目,美元是一个没有的项目
如果你可以从IP表中获得lat和long,即使没有城市数据,那么你可能想使用这样的东西来检查最近的城市。Javascript是一个选项-从已知位置查找最近的列表(数组?)城市。
浏览器的共享位置功能怎么样?
如果基于浏览器的解决方案适用于您的用例,您可能需要查看MaxMind的GeoIP2 JavaScript API。它首先尝试使用HTML5地理定位来定位用户,如果失败或不准确,它会恢复到MaxMind的GeoIP2城市数据(而不是GeoLite)。MaxMind提供免费归因版本。
有时我们需要使用本地Geo IP数据库,而不是用于特定目的的web服务。这是我的经验:我下载了数据库表单https://db-ip.com.我找了很多,终于找到了一个更可靠的。但还有两个问题:
- 1-"城市IP地址"数据库太大,无法在主机上上传到MYSQL数据库,因为它超过了超时限制
- 2-数据库基于的IP地址比较http://lite.ip2location.com数据库是IP号码的基础
所以我开发了一个简单的.NET应用程序来解决这些问题。该解决方案可从以下位置下载:https://github.com/atoosi/IP2Location-Database-Luncher