Существует множество сервисов, которые не являются бесплатными и предлагают вам как разработчику простой API для извлечения страны, континента и других геоданных из запроса сервера. Тем не менее, есть некоторые разработчики, которые не хотят платить, но еще меньше за услугу, потому что вы только тестируете, у вас нет денег или какой-либо другой причины. На странице геоплуги.нет предлагается бесплатный API для поиска страны пользователя, который отправляет запрос на наш сервер.
Как это работает
Нам нужно сделать запрос к geoplugin.net/json.gp с параметром get, который должен быть IP-адресом запроса.
Доступная информация
Мы можем получить некоторую важную информацию бесплатно, в объекте доступны следующие ключи:
- Geoplugin_request: Содержит IP, который мы только что отправили в параметре IP get.
- Geoplugin_status: код статуса http запроса
- геоплугин_город: IP-адрес города запроса (если имеется)
- Geplugin_countryCode: 2-х значный код страны (США, DE, RU)
- geoplugin_countryName
- geoplugin_continentCode
- Geoplugin_currencyCode: деньги, которые обрабатывает страна (EUR, USD)
- geoplugin_regionCode
- geoplugin_regionName
- geoplugin_areaCode
- Geoplugin_currencySymbol: HTML-символ валюты.
Как использовать это с PHP
С php все очень просто, нам нужно получить IP-адрес запроса, используя собственную переменную php $ SERVER, которая содержит информацию о запросе. Затем нам нужно получить информацию об упомянутой веб-странице (которая на самом деле будет возвращать ответ JSON, но нам нужно преобразовать в массив с помощью функции json_decode).
$ip = $_SERVER['REMOTE_ADDR']; // This will contain the ip of the request
// You can use a more sophisticated method to retrieve the content of a webpage with php using a library or something
// We will retrieve quickly with the file_get_contents
$dataArray = json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));
var_dump($dataArray);
// outputs something like (obviously with the data of your IP) :
// geoplugin_countryCode => "DE",
// geoplugin_countryName => "Germany"
// geoplugin_continentCode => "EU"
echo "Hello visitor from: ".$dataArray["geoplugin_countryName"];
Как использовать это с Javascript
С Javascript немного сложнее. Сначала нам нужно каким-то образом получить IP-адрес пользователя, проблема в том, что не так просто получить IP-адрес с помощью php, вам нужно так или иначе сделать серверный вызов для получения IP-адреса. Если вы не можете использовать PHP, потому что у вас нет сервера или что-то, взгляните на этот вопрос в StackOverflow, может быть возможно получить ip, добавив скрипт, который использует JSONP (обратный вызов).
Затем нам нужно сделать запрос к указанному URL, чтобы получить страну IP-адреса, но мы столкнемся со следующей проблемой, если мы просто сделаем запрос к URL:
XMLHttpRequest cannot load http://www.geoplugin.net/json.gp?ip=my.ip.number No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://mywebsiterequestdomain' is therefore not allowed access.
Эта проблема связана с ограничением CORS, вы не можете выполнить ajax-запрос к серверу, который не принадлежит вам. Чтобы решить эту проблему, нам нужно преодолеть это ограничение, мы будем использовать веб-сайт cors -where, чтобы избежать этого. Тогда наш запрос будет выглядеть так:
var ip = "the ip number, retrieved of some way by a server";
// the request will be to http://www.geoplugin.net/json.gp?ip=my.ip.number but we need to avoid the cors issue, and we use cors-anywhere api.
$.getJSON("https://cors-anywhere.herokuapp.com/http://www.geoplugin.net/json.gp?ip="+ip,function(response){
console.log(response);
// output an object which contains the information.
alert("Hello visitor from "+ response.geoplugin_countryName);
});
Примечание. Если вы можете и имеете сервер для отправки запроса, используйте PHP, так как он прост и понятен, потому что нам не нужно использовать cors-где угодно.
Живой пример
Следующая скрипта позволяет вам получить страну из ip с помощью простой формы с функциями javascript и jQuery.getJSON. Перейдите на вкладку результатов и попробуйте сами.
Повеселись !