我想要一个可靠的 API,可用于根据 IP 地址确定城市和国家/地区。
我在 Google 上的搜索导致http://ipinfodb.com/ip_location_api.php。它看起来很完美,但我唯一担心的是这项服务的可靠性。谷歌有这样的东西吗?
我正在寻找有助于从 IP 确定位置的免费或付费 API。
我想要一个可靠的 API,可用于根据 IP 地址确定城市和国家/地区。
我在 Google 上的搜索导致http://ipinfodb.com/ip_location_api.php。它看起来很完美,但我唯一担心的是这项服务的可靠性。谷歌有这样的东西吗?
我正在寻找有助于从 IP 确定位置的免费或付费 API。
MaxMind 有一个精简版的 ip2country 和 ip2city 数据库: http: //www.maxmind.com/app/geolitecity
http://www.maxmind.com/app/geolitecountry
如果您不介意自己托管数据库,它是免费的。付费服务更准确。
他们还提供网络查询服务,但不是免费的:http: //www.maxmind.com/app/web_services#country
考虑使用geoplugin,它从单行 PHP 代码中提供了最多的信息,但每个请求都需要连接到 geoplugin.com 服务器(而且它是免费的)。
例子 :
json:http ://www.geoplugin.net/json.gp?ip=74.125.236.174
{
geoplugin_request: "74.125.236.174",
geoplugin_status: 200,
geoplugin_city: "Mountain View",
geoplugin_region: "CA",
geoplugin_areaCode: "650",
geoplugin_dmaCode: "807",
geoplugin_countryCode: "US",
geoplugin_countryName: "United States",
geoplugin_continentCode: "NA",
geoplugin_latitude: "37.419201",
geoplugin_longitude: "-122.057404",
geoplugin_regionCode: "CA",
geoplugin_regionName: "California",
geoplugin_currencyCode: "USD",
geoplugin_currencySymbol: "$",
geoplugin_currencySymbol_UTF8: "$",
geoplugin_currencyConverter: 1
}
xml:http ://www.geoplugin.net/xml.gp?ip=74.125.236.174
<geoPlugin>
<script/>
<geoplugin_request>74.125.236.174</geoplugin_request>
<geoplugin_status>200</geoplugin_status>
<geoplugin_city>Mountain View</geoplugin_city>
<geoplugin_region>CA</geoplugin_region>
<geoplugin_areaCode>650</geoplugin_areaCode>
<geoplugin_dmaCode>807</geoplugin_dmaCode>
<geoplugin_countryCode>US</geoplugin_countryCode>
<geoplugin_countryName>United States</geoplugin_countryName>
<geoplugin_continentCode>NA</geoplugin_continentCode>
<geoplugin_latitude>37.419201</geoplugin_latitude>
<geoplugin_longitude>-122.057404</geoplugin_longitude>
<geoplugin_regionCode>CA</geoplugin_regionCode>
<geoplugin_regionName>California</geoplugin_regionName>
<geoplugin_currencyCode>USD</geoplugin_currencyCode>
<geoplugin_currencySymbol>$</geoplugin_currencySymbol>
<geoplugin_currencySymbol_UTF8>$</geoplugin_currencySymbol_UTF8>
<geoplugin_currencyConverter>1</geoplugin_currencyConverter>
</geoPlugin>
其他选项
我使用过http://www.hostip.info/并发现它非常好。
每个 IP 地理位置都取决于 ISP 提交的记录。这永远不会完全可靠,因为许多 ISP 会提交其办公室的位置,而不是可能位于不同城市甚至国家的子网的物理位置。
从某种意义上说,您无法可靠地知道用户的位置。使用其他答案提供的提示将为您提供 IP 的地理位置,但无法知道美国纽约的 IP 地址没有通过 VPN 访问来自英国伦敦或英国出差的人是否有人在使用Tor等匿名服务。
谷歌有没有这样的东西。
不,Google 不提供类似的服务。(请注意,此处声称它确实提供了它的答案无处可寻)。
任何其他有助于通过 IP 确定用户位置的免费或付费 API
首先,很难谈论这种服务的可靠性。大多数服务依靠 ISP 来获取他们的数据,而 ISP 并不总是提供可靠的数据。此外,因为我假设您基本上关心您的用户的位置(而不是他的 IP 所属的位置),所以用户可以决定通过 VPN、Tor 或其他匿名者隐藏他的位置。
在您的一些评论中,我看到您所说的可靠意味着 API 提供者的正常运行时间。如果是这样,我会推荐MaxMind 的 GeoIP2。首先,我已经看过这个网站很长时间了,它们经常更新(最后一次更新是 2014 年 4 月 1 日),此外,如果您非常害怕停机 - 您可以下载他们的数据库而不依赖它们(也他们是免费的)。
我真正喜欢的另一项服务鲜为人知并且是开源的(它部分依赖于 MaxMind 的数据)。我只用过几次,所以我不能说它的正常运行时间,但我真的很喜欢他们的 API。它是如此简单,很难想出更简单的方法:
http://www.telize.com/geoip/46.19.37.108
或者像这样
http://www.telize.com/geoip/2a02:2770::21a:4aff:feb3:2ee
会给你
{
"country":"Netherlands",
"dma_code":"0",
"timezone":"Europe\/Amsterdam",
"area_code":"0",
"ip":"46.19.37.108",
"asn":"AS196752",
"continent_code":"EU",
"isp":"Tilaa V.O.F.",
"longitude":5.75,
"latitude":52.5,
"country_code":"NL",
"country_code3":"NLD"
}
我认为这两项服务足以为您的访问者获取正常信息。但是一件重要的事情。如果您真的需要知道您的用户来自哪里 - 为什么不使用html5 地理定位来询问他们?这是一个很好的例子,但您可以更进一步(询问他们位置是否正确并让他们能够更改它)。我知道在您的情况下,您只需要国家/城市,但可能其他人需要它。
PS 2015 年 11 月。既然 telize.com 需要花钱使用,我发现了另一项目前免费的服务:
https://freegeoip.net/json/45.79.8.237
https://freegeoip.net/json/2600:3c00::f03c:91ff:fe98:c0f5