可靠的API,用于确定IP地址的城市和国家/地区

时间:2010-03-02 10:25:52

标签: php ip-geolocation

我想要一个可靠的API,可以用来从IP地址确定城市和国家。

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

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

7 个答案:

答案 0 :(得分:12)

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

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

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

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

答案 1 :(得分: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>

其他选项

答案 2 :(得分:8)

答案 3 :(得分:7)

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

答案 4 :(得分:5)

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

答案 5 :(得分:3)

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

答案 6 :(得分:3)

  

google是否有类似的内容。

不,Google不提供与此类似的服务。 (请注意,此处的答案声称它确实提供了它,导致无处可去。)

  

任何其他有助于确定用户位置的免费或付费API   他的知识产权

首先,很难谈论这种服务的可靠性。大多数服务依靠ISP来获取数据,ISP并不总是提供可靠的数据。此外,因为我认为您基本上关心用户的位置(而不是他的IP所属的位置),用户可以决定通过VPN,Tor或其他匿名者隐藏他的位置。

在您的一些评论中,我已经看到,通过可靠您意味着API提供商的正常运行时间。如果是这样,我会推荐MaxMind's GeoIP2。首先,我已经看过这个网站很长一段时间了,它们经常更新(2014年4月1日更新),而且如果你害怕停机 - 你可以download their database并且不要依赖它们(也是免费的)。

我真正喜欢的另一项服务is less known and opensource(它部分依赖于来自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 geolocation询问他们?这是一个nice example,但您可以更进一步(询问他们位置是否正确并让他们更改它的能力)。我知道在你的情况下你只需要国家/城市,但可能是其他人需要它。


<强> P.S。 2015年11月。现在telize.com需要花钱才能使用,我找到了另一项目前免费的服务:

https://freegeoip.net/json/45.79.8.237
https://freegeoip.net/json/2600:3c00::f03c:91ff:fe98:c0f5