我知道有很多服务提供地理定位工具来解决用户访问的位置。我正在开发的网站是一个在多个地区运营的电子商务网站。当访问者访问网站时,它应该可以找到他们所在的位置,并为用户显示相关的货币/语言。
过去我们使用maxmind,但我想知道是否有更好的解决方案。我呼吁具有该领域经验的开发人员分享他们的知识和专业知识,了解可用的内容以及各种解决方案的专业人员和内容。
其他信息:有问题的网站主要运行Java(Spring)和PHP(Kohana)的组合,因此也可以考虑其中任何一个的库。我们已经有了一个解决方案,可以确定使用哪种货币,前提是我们可以获得访问者所在国家/地区的ISO代码。
更新的
我以为我会对访问这个问题的人留下粗略的解释。
地理定位:我已经使用freegoip来检测此线程中建议的用户位置。
语言:在确定用户使用哪种语言时,我使用PHP检查用户浏览器中设置的语言:http://www.php.net/manual/en/function.http-negotiate-language.php
答案 0 :(得分:1)
在我工作的小型电子商务网站上,我们使用Akamai提供地理位置数据,根据访问者所处的状态提供定制广告和价格。请查看此信息以获取更多信息:http://www.akamai.com/html/technology/products/personalization.html。< / p>
答案 1 :(得分:1)
IPGeolocation对您来说是一个更好的选择。他们建立自己的数据库并每周更新两次数据库。在国家/地区级和城市级,它们的准确性为99%。他们还提供付费以及免费(每天1000个请求)的API计划,您可以在此处查看:https://ipgeolocation.io/pricing.html。
为了方便开发人员,IPGeolocation API提供了一些用于各种编程语言的SDK:
获取IP地址地理位置信息的端点:
该端点应从服务器端调用。
$ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=8.8.8.8'
JSON响应将是:
{
"ip": "8.8.8.8",
"hostname": "google-public-dns-a.google.com",
"continent_code": "NA",
"continent_name": "North America",
"country_code2": "US",
"country_code3": "USA",
"country_name": "United States",
"country_capital": "Washington",
"state_prov": "California",
"district": "",
"city": "Mountain View",
"zipcode": "94043",
"latitude": "37.4229",
"longitude": "-122.085",
"is_eu": false,
"calling_code": "+1",
"country_tld": ".us",
"languages": "en-US,es-US,haw,fr",
"country_flag": "https://ipgeolocation.io/static/flags/us_64.png",
"isp": "Level 3 Communications",
"connection_type": "",
"organization": "Google Inc.",
"geoname_id": "5375480",
"currency": {
"code": "USD",
"name": "US Dollar",
"symbol": "$"
},
"time_zone": {
"name": "America/Los_Angeles",
"offset": -8,
"current_time": "2019-01-14 03:30:00.135-0800",
"current_time_unix": 1547465400.135,
"is_dst": false,
"dst_savings": 1
}
}
您还可以从整个响应中过滤特定参数。
获得访问者的位置后,您还可以使用以下简单代码根据其语言/货币将其重定向到页面:
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (4 === this.readyState && 200 === this.status) {
var json = JSON.parse(this.responseText);
if (json.country_code2 == "FR" && window.location.hostname !== "http://fr.exmaple.com") {
window.location.href = "https://fr.exmaple.com";
} else if (json.country_code2 == "US" && window.location.hostname !== "http://us.exmaple.com") {
window.location.href = "https://us.exmaple.com";
} else if (json.country_code2 == "UK" && window.location.hostname !== "http://uk.exmaple.com") {
window.location.href = "https://uk.exmaple.com";
}else {
window.location.href = "https://exmaple.com";
}
}
}
request.open("GET", "https ://api.ipgeolocation.io/ipgeo?apiKey=YOUR_API_KEY&fields=country_code2", false);
request.setRequestHeader("Accept", "application/json");
request.send();
我希望这将是您的最佳选择。
答案 2 :(得分:0)
答案 3 :(得分:0)
对于语言,它应该来自浏览器。这比地理位置更有用,更准确。
例如,如果您携带笔记本电脑旅行并使用互联网,那么您可能希望使用您所使用的国家/地区的母语来查看您所使用语言的内容。
请查看此问题以获取更多信息:Checking browser's language by PHP?
答案 4 :(得分:0)
另一个选项是http://ipinfo.io API(我自己的服务)。以下是API返回的示例。
$ curl ipinfo.io/8.8.8.8
{
"ip": "8.8.8.8",
"hostname": "google-public-dns-a.google.com",
"loc": "37.385999999999996,-122.0838",
"org": "AS15169 Google Inc.",
"city": "Mountain View",
"region": "CA",
"country": "US",
"phone": 650
}
您还可以查询特定字段,例如本例中的国家/地区:
$ curl ipinfo.io/8.8.8.8/country
US
更多详细信息,请访问http://ipinfo.io/developers。每天最多1,000个请求是免费的,您可以注册超出该要求的付费方案(参见http://ipinfo.io/pricing)
答案 5 :(得分:0)
正如我所提到的,我们为这个确切的用例构建了https://ipdata.co
$ip = '78.8.53.5';
$details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}"));
这将返回
{
"ip": "78.8.53.5",
"city": "G\u0142og\u00f3w",
"region": "Lower Silesia",
"country_name": "Poland",
"country_code": "PL",
"continent_name": "Europe",
"continent_code": "EU",
"latitude": 51.663,
"longitude": 16.0757,
"asn": "AS12741",
"organisation": "Netia SA",
"postal": "67-200",
"currency": "PLN",
"currency_symbol": "z\u0142",
"calling_code": "48",
"flag": "https://ipdata.co/flags/pl.png",
"time_zone": "Europe/Warsaw"
}
这有许多与电子商务相关的数据点,特别是
货币符号z\u0142
是Zloty的ASCII码
zł