有没有人知道可以调用的开放式RESTful API,以将用户的IP地理编码为纬度和经度?
理想情况下,它应该类似于:http://google.com/geocode_api/?IP=1.2.3.4,并返回纬度和经度。
有没有人知道可以调用的开放式RESTful API,以将用户的IP地理编码为纬度和经度?
理想情况下,它应该类似于:http://google.com/geocode_api/?IP=1.2.3.4,并返回纬度和经度。
另一个提供准确城市信息的免费 REST API 是 http://freegeoip.net。请求非常简单,您可以使用类似以下的代码:
http://freegeoip.net/{format}/{ip_or_hostname}
要对IP地址进行地理编码,格式可以是csv
, xml
或json
。他们的网站上有所有详细信息。
[更新:] FreeGeoIP.net过去并非一直作为公共服务连续可用。但该软件始终开源,并可在Github上找到。如果您需要高度可靠的服务或您的使用情况超过每小时15,000个请求的当前配额,则使用Docker很容易使本地安装运行。
这里有两个简单的调用...
示例调用:
返回的XML示例(ipinfodb):
<Response>
<Ip>122.169.8.137</Ip>
<Status>OK</Status>
<CountryCode>IN</CountryCode>
<CountryName>India</CountryName>
<RegionCode>10</RegionCode>
<RegionName>Haryana</RegionName>
<City>Kaul</City>
<ZipPostalCode></ZipPostalCode>
<Latitude>29.85</Latitude>
<Longitude>76.6667</Longitude>
<Timezone>0</Timezone>
<Gmtoffset>0</Gmtoffset>
<Dstoffset>0</Dstoffset>
</Response>
<script type="text/javascript"
src="http://www.google.com/jsapi?key=ABCDEFG"></script>
<script type="text/javascript">
google.load("maps", "2.x", {callback: initialize});
function initialize() {
if (google.loader.ClientLocation) {
var lat = google.loader.ClientLocation.latitude;
var long = google.loader.ClientLocation.longitude;
alert ("lat: " + lat + "\nlong: " + long);
}
else { alert ("not available"); }
}
在我的网站中,我使用 http://ip-api.com/ 来通过 IP 地址获取位置信息。它们有良好的限制(每分钟最多150个请求)。Ipinfo.io 只免费提供不到1000个请求每天。
这是样例输出:
(
[as] => AS8075 Microsoft Corporation
[city] => Redmond
[country] => United States
[countryCode] => US
[isp] => Microsoft bingbot
[lat] => 47.674
[lon] => -122.1215
[org] => Microsoft bingbot
[query] => 157.55.39.67
[region] => WA
[regionName] => Washington
[status] => success
[timezone] => America/Los_Angeles
[zip] => 98052
)
以下是您可以使用的PHP代码:
$ip = $_SERVER['REMOTE_ADDR'];
$result = json_decode(file_get_contents("http://ip-api.com/json/{$ip}"));
//print_r ($result);
echo "{$result->lat},{$result->lon}";//48.156,17.142
https://www.iplocate.io/api/lookup/8.8.8.8
- 免责声明:我运营此服务。 - ttarik