Sypex Geo — быстрое определение города по IP. PHP - Получаем гео-инфо пользователя по IP GeoIP в виде PHP расширения
Отображать город посетителя для улучшения конверсионных показателей магазина. Готовый код вставки в любое место сайта с указанием города, региона и страны. Я перелапатил много скриптов, но именно этот оказался самым простым и результативным! Я использовал его при создании сайта www.mzm-market.ru , где скрипт выводит «доставка в______»
Втавляем в index.tpl (или на странице доставка) в любом нужном месте cледующий код:
window.onload =function(){
jQuery("#user-city").text(ymaps.geolocation.city);
jQuery("#user-region").text(ymaps.geolocation.region);
jQuery("#user-country").text(ymaps.geolocation.country);}
Вывод производится с помощью:
// страна, город, регион.
geolocation.country, geolocation.city, geolocation.region
Хочу немного дополнить данный пост (редакция от 18.02.2017).
При использовании вышеописанного скрипта во многих городах и браузерах просто ничего не отображалось и после долгих поисков я нашел наверное самый работоспособный скрипт определение страны, региона, города через яндекс API. Проверял его через своих клиентов, которые находятся практически по всей России и за её пределами и этот скрипт показал себя отлично! Вот скриншот моего клиента:
Сами понимаете что всё опредилилось чётко! Ну не буду вас мучать писаниной и приведу пример!
js Определение страны, области, города через яндекс APIПросто вставьте этот код между тегами
$(document).ready(function(){
ymaps.ready(function(){
var geolocation = ymaps.geolocation;
$("#cou").html("Ваша страна: "+geolocation.country);
$("#tow").html("Ваш город: "+geolocation.city);
$("#reg").html("Ваш регион: "+geolocation.region);
});
});
А этот код в нужное место на своей странице:
Ваша страна: ... определяется...
Ваш город: ... определяется...
Ваш регион: ... определяется...
Ваша страна: ... определяется...
Ваш город: ... определяется...
Ваш регион: ... определяется...
Скрипт работает без проблем, но возможно, что для тех кто находится в маленьких селениях скорее всего город определиться неверно, а будет определён город вашего интернет провайдера.
В продолжение темы про IP, в этой статье будут рассмотрены способы определения страны, города и другой гео-ино о пользователе по его IP.
GeoIP в виде PHP расширенияНаверное самая часто используемая библиотека для определения IP (оф. док на php.net). Оно и не мудрено, ведь бинарная БД + скомпилированное PHP расширение работают быстрее всех остальных способов.
Установка на Ubuntu Server:
Sudo apt-get install php5-geoip
После установки скачиваем последние обновления базы IP адресов:
После этих действий необходимо перезагрузить PHP. Это нужно для того что бы PHP интерпретатор подгрузил только что установленное расширение (php5-geoip) и новые базы IP адресов.
Также периодически необходимо обновлять базы IP адресов:
Sudo wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz sudo gunzip GeoIP.dat.gz sudo mv GeoIP.dat /usr/share/GeoIP/
После обновления так же необходимо перезагружать PHP для применения обновленной базы IP адресов:
Sudo service php5-fpm restart # если вы используете NGINX # или sudo service apache2 restart # если вы используете Apache
После того как GeoIP установлен, его можно использовать в коде, например так:
Как видите, суть приведённого кода заключается в определении IP адреса клиента, причём учитывается возможность его подключения через прокси, и отправке запроса по API GeoPlugin с дальнейшим декодированием и анализом результатов.
В моём примере, как я уже и говорил, результатом работы данного скрипта будет являться код страны клиента сайта. Вообще, полный список возвращаемых параметров выглядит так (для примера решил взять IP Новосибирской области РФ):
{ "geoplugin_request":"195.208.128.3", "geoplugin_status":200, "geoplugin_credit":"Some of the returned data includes GeoLite data created by MaxMind, available from http:\/\/www.maxmind.com.", "geoplugin_city":"Novosibirsk", "geoplugin_region":"Novosibirsk", "geoplugin_areaCode":"0", "geoplugin_dmaCode":"0", "geoplugin_countryCode":"RU", "geoplugin_countryName":"Russian Federation", "geoplugin_continentCode":"EU", "geoplugin_latitude":"55.09", "geoplugin_longitude":"82.6519", "geoplugin_regionCode":"53", "geoplugin_regionName":"Novosibirsk", "geoplugin_currencyCode":"RUB", "geoplugin_currencySymbol":"руб", "geoplugin_currencySymbol_UTF8":"\u0440\u0443\u0431", "geoplugin_currencyConverter":58.9289 }
Как видите, данный сервис использует упоминаемый ранее MaxMind (параметр geoplugin_credit), но платную информацию или нет — сложно предположить. С одной стороны, ссылка на источник говорит о том, что используется бесплатный доступ к БД IP, но, с другой, мы видим не только страну и город, но и ещё много всякой информации, включая город, географические координаты координаты (langitude, latitude), текущую валюту и даже её курс.
Так что данный сервис можно назвать PHP GeoIP онлайн. Единственное его отличие от серверного аналога — то, что он получает информацию по IP немного медленнее за счёт отсутствия серверного кэширования. Но это ещё не значит, что его нет на самом сервере GeoPlugin 😉 Так что недостаток этот, скорее, символический.
В любом случае, разработчики GeoPlugin заслуживают на аплодисменты, а, в особенности, ещё и за то, что они даже не захламили своё сайт контекстной рекламой. Т.е. как они вообще выживают — непонятно. Единственный способ сказать им «спасибо» — это пожертвования на PayPal счёт.
Кстати, приведённый мною PHP код для определения города по IP является универсальным. Можете его использовать для получения гео данных и с помощью других сервисов. Единственное, что вам нужно будет в нём изменить — это URL API сервиса и имя необходимых параметров, которые вам нужно будет получить.
На этом у меня всё. Пишите ваши отзывы о статье в комментариях ниже и не забывайте делиться записью со своими друзьями в социальных сетях.
P.S. : если вам нужен сайт либо необходимо внести правки на существующий, но для этого нет времени и желания, могу предложить свои услуги.
Более 5 лет опыта профессиональной разработки сайтов. Работа с PHP , OpenCart , WordPress , Laravel , Yii , MySQL , PostgreSQL , JavaScript , React , Angular и другими технологиями web-разработки.
Опыт разработки проектов различного уровня: лендинги , корпоративные сайты , Интернет-магазины , CRM , порталы . В том числе поддержка и разработка HighLoad проектов . Присылайте ваши заявки на email [email protected] .
Не секрет, что диапазоны IP адресов распределены между странами мира, то есть зная IP можно достаточно точно определить, в какой стране находится пользователь. Иногда даже можно определить его город и координаты (но вот на точность этих данных полагаться уже не стоит).
Существует множество способов определить страну по IP. Это либо базы адресов, развертываемые прямо на сервере, либо онлайн-сервисы, возвращающие информацию об адресе в структурированном формате. Большинство этих сервисов, конечно, имеют ограничения, и для использования в крупных проектах требуют покупки лицензии или подписки, но попробовать их можно и бесплатно.
MaxMindGeoIP2 сервис, практически монополист на рынке, предлагающий платные услуги по определению страны, города и других параметров.
Достоинство - самые актуальные базы и различные подходы к повышению точности определения.
Недостаток - услуга использования онлайн-сервиса платная, 0,0001 $ за запрос, причем платить нужно вперед. Однако, можно скачать бесплатную версию баз GeoLite2 Country или GeoLite2 City, разместить ее на сервере (для этого нужно иметь доступ к файловой системе), и использовать в C#, Java или php проекте (список поддерживаемых API).
Рассматривать этот сервис подробно не будем, перейдем к более простым решениям.
ip2nation.comЭто MySQL база данных с информацией о соответствии адреса стране. Скачать для размещения ее на собственном сервере можно .
Пример на php, позволяющий вывести полное название страны:
Онлайн-сервис определения страны и города подключается к сайту следующим образом:
< script src= "http://www.geoplugin.net/javascript.gp" type= "text/javascript" > |
После подключения можно вызывать следующие методы:
geoplugin_request() - IP
geoplugin_status() - статус (200б 4040 и т. д.)
geoplugin_credit() - благодарности сервису MaxMind, упомянутому чуть выше.
geoplugin_city() - город
geoplugin_region() - область или регион
geoplugin_areaCode() - код зоны
geoplugin_dmaCode() - американский код из трех цифр, определяющий набор поддерживаемых телеканалов
geoplugin_regionCode() - код региона
geoplugin_regionName() - название региона
geoplugin_countryCode() - двухбуквенный код страны
geoplugin_countryName() - название страны на английском языке
geoplugin_continentCode() - код континента (например EU - Европа)
geoplugin_latitude() - широта
geoplugin_longitude() - долгота
geoplugin_currencyCode() - трехбуквенный код валюты страны
geoplugin_currencySymbol() - символ валюты страны
Также можно не подключать библиотеку, а использовать JSONP:
$.getJSON
("http://www.geoplugin.net/json.gp?jsoncallback=?"
,
function
(response)
{
for
(var
i in
response)
{
document.write
("response["
+
i +
"] = "
+
response[
i]
+
" " ) ; } } ) ; |
$.getJSON("http://www.geoplugin.net/json.gp?jsoncallback=?", function (response) {
for (var i in response) {
document.write("response[" + i + "] = " + response[i]+ "
");
}
});
Достоинство - кроме страны можно получить информацию о валюте и ее код (₴, €, ₽).
Недостаток - запросы по HTTPS платные, подписка стоит €12 в год.
ipinfo.ioОткрытый сервис, позволяющий бесплатно делать до 1000 запросов в сутки .
Чтобы вызвать его в js используется код
$.getJSON ("http://ipinfo.io" , function (response) { console.log (response) ; } ) |
$.getJSON("http://ipinfo.io", function(response){ console.log(response); })
В ответе вы получите:
"ip" - IP адрес пользователя
"hostname" - обратный IP
"city" - предположительный город, в котором находится пользователь
"region" - регион (область, район)
"country" - страна в виде двухбуквенного кода
"loc" - координаты широты и долготы
"org" - информация о провайдере
Сервис поддерживает HTTPS, можно использовать его на сайтах с поддеpжкой HTTPS. Чтобы избежать проблем с кросс-доменными запросами, которые Chrome ограничивает, можно воспользоваться поддержкой JSONP:
$.get("https://ipinfo.io?callback=?", function(response) { $("body").text(response.ip+ " from " +response.country); // вывести IP и страну посетителя. }, "jsonp")
Практически полный клон ipinfo - сервис ipapi.co . Также ограничивает бесплатное использование 1000 запросов в сутки .
freegeoip.netСервис, предлагающий открытый HTTP и HTTPS API, позволяющий получить информацию в форматах CSV, XML или JSON.
Сервис также поддеживает JSONP:
$.getJSON ("https://freegeoip.net/json/?callback=" , function (response) { $("body" ) .text (response.country_name ) ; } } ) ; |
$.getJSON("https://freegeoip.net/json/?callback=", function (response) { $("body").text(response.country_name); } });
Возвращаемые параметры:
"ip" - непосредственно IP адрес
"country_code" - двухбуквенный код страны
"country_name" - название страны на английском языке
"region_code" - код региона
"region_name" - название региона
"city" - город
"zip_code" - почтовый код (США)
"time_zone" - временная зона
"latitude"- широта
"longitude" - долгота
"metro_code" - метро
По результатам наблюдений все приведенные сервисы (кроме MaxMind, который в испытаниях не участвовал, и вообще приведен в статье лишь для полноты картины) правильно определили страну и код страны, geoPlugin сумел правильно определить валюту. Только сервис ipinfo правильно определил область, но промахнулся с городом, а ни один другой сервис город и область не определили совсем (вернули null, 0 или пустое значение).