18

我想要一个可靠的 API,可用于根据 IP 地址确定城市和国家/地区。

我在 Google 上的搜索导致http://ipinfodb.com/ip_location_api.php。它看起来很完美,但我唯一担心的是这项服务的可靠性。谷歌有这样的东西吗?

我正在寻找有助于从 IP 确定位置的免费或付费 API。

4

7 回答 7

12

MaxMind 有一个精简版的 ip2country 和 ip2city 数据库: http: //www.maxmind.com/app/geolitecity

http://www.maxmind.com/app/geolitecountry

如果您不介意自己托管数据库,它是免费的。付费服务更准确。

他们还提供网络查询服务,但不是免费的:http: //www.maxmind.com/app/web_services#country

于 2010-03-02T10:39:04.300 回答
11

考虑使用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>&#36;</geoplugin_currencySymbol>
<geoplugin_currencySymbol_UTF8>$</geoplugin_currencySymbol_UTF8>
<geoplugin_currencyConverter>1</geoplugin_currencyConverter>
</geoPlugin>

其他选项

于 2012-12-01T07:33:44.153 回答
8

http://www.ip2location.com/

谷歌有免费服务http://briancray.com/2009/05/29/find-web-visitors-location-javascript-google-api/

于 2010-03-02T10:31:22.020 回答
7

我使用过http://www.hostip.info/并发现它非常好。

于 2010-03-02T10:28:44.323 回答
5

每个 IP 地理位置都取决于 ISP 提交的记录。这永远不会完全可靠,因为许多 ISP 会提交其办公室的位置,而不是可能位于不同城市甚至国家的子网的物理位置。

于 2010-03-02T10:29:28.900 回答
3

从某种意义上说,您无法可靠地知道用户的位置。使用其他答案提供的提示将为您提供 IP 的地理位置,但无法知道美国纽约的 IP 地址没有通过 VPN 访问来自英国伦敦或英国出差的人是否有人在使用Tor等匿名服务。

于 2010-03-02T10:35:55.837 回答
3

谷歌有没有这样的东西。

不,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
于 2014-04-04T10:19:43.983 回答