Решения для определения геолокации посетителя сайта

Я знаю, что существует множество сервисов, которые предоставляют инструменты геолокации для определения того, откуда приходят пользователи. Веб-сайт, над которым я работаю, - это сайт электронной коммерции, работающий на нескольких территориях. Когда посетитель попадает на веб-сайт, он должен определить, откуда он, и показать соответствующую валюту / язык для пользователя.

Раньше мы использовали maxmind, но мне интересно, есть ли там лучшие решения. Я обращаюсь к разработчикам, имеющим опыт в этой области, чтобы поделиться своими знаниями и опытом о том, что доступно, а также о плюсах и минусах различных решений.

Дополнительная информация: рассматриваемый веб-сайт работает в основном на комбинации Java (Spring) и PHP (Kohana), поэтому также можно рассмотреть библиотеки для любого из них. У нас уже есть решение для определения того, какую валюту использовать, при условии, что мы можем получить код ISO страны посетителя.


Обновление
Подумал, что оставлю приблизительное объяснение результата всем, кто посетит этот вопрос.

Геолокация: я использовал freegoip для определения местоположения пользователя, как это было предложено в этой теме.
Язык: при определении того, какой язык использовать для пользователя, я использовал PHP чтобы проверить язык, установленный в браузере пользователя: http://www.php.net/manual/en/function.http-negotiate-language.php.


person diggersworld    schedule 06.07.2012    source источник
comment
Привет, мы создали ipdata.co именно для этого случая, наш API предоставляет символ валюты, код валюты, часовой пояс пользователя, значки флагов страны, а также данные о местоположении. См. stackoverflow.com/a/47141807/3176550 ниже для примера PHP.   -  person Jonathan    schedule 06.11.2017


Ответы (6)


Я работал над проектом, который требует геолокации, но, к сожалению, я обнаружил, что большинство служб работают с базой данных MaxMind, наконец-то я использовал freegeoip, бесплатный и пока точный для моего региона.

С Уважением.

person Mohamed Farrag    schedule 06.07.2012

На небольшом сайте электронной коммерции, над которым я работал, мы использовали Akamai для предоставления данных о геолокации, которые будут обслуживать настроенные рекламные объявления и цены в зависимости от того, в каком состоянии находился посетитель. Для получения дополнительной информации ознакомьтесь с этим: http://www.akamai.com/html/technology/products/personalization.html.

person Richard Yhip    schedule 06.07.2012

IPGeolocation будет для вас лучшим вариантом. Они создают свою собственную базу данных и обновляют свою базу данных два раза в неделю. Они имеют точность 99% на уровне страны и 75% на уровне города. Они также предлагают платные и бесплатные (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(); 

Надеюсь, это будет лучший вариант для вас.

person Rameez    schedule 20.10.2020

Что касается языка, он должен поступать из браузера. Это более полезно и точнее, чем геолокация.

Например, если вы путешествуете со своим ноутбуком и используете Интернет, вы, вероятно, захотите видеть вещи на своем языке, а не на родном языке страны, в которой вы были.

Посмотрите этот вопрос для получения дополнительной информации: Проверка языка браузера с помощью PHP?

person databyss    schedule 06.07.2012
comment
Неплохо подмечено. При реализации обнаружения местоположений я намерен уведомить пользователя об обнаружении и дать ему возможность изменить язык и валюту. Подобно тому, что делает Etsy при первом посещении. - person diggersworld; 06.07.2012

Другой вариант - API http://ipinfo.io (моя собственная служба). Вот пример того, что возвращает 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. Это бесплатно для 1000 запросов в день, и вы можете подписаться на платный план и сверх этого (см. http://ipinfo.io/pricing)

person Ben Dowling    schedule 31.08.2014

Как я уже упоминал, мы создали 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 - это ASCII для злотого.

person Jonathan    schedule 06.11.2017