Как определить геолокационные данные пользователя

Как определить геолокационные данные пользователя

Для того чтобы определить локацию пользователя, нам понадобится его IP и база данных со списком IP адресов и привязанных к ней территориальных данных. Но так как пример с БД мы уже реализовывали раньше, в данной статье. То сегодня мы немного усложним нашу задачу, и будет взаимодействовать со сторонним сервисом по его API, получая в ответ всю интересующую нас информацию — временную зону, широту, долготу, страну и город.

О сервисе

В качестве сервиса для определения гео-данных, воспользуемся ресурсом ip-api.com. Перейдя на страницу документации, и просмотрев ее, можно понять что для получения нужной нам информации, нам следует выполнить следующий запрос:

http://ip-api.com/json/{query}?lang=ru

Где:
{query} — интересующий нас IP адрес
lang — язык (будем использовать «ru»)

Так же, мы можем передавать дополнительные параметры (поля) в поле «fields». Тем самым, ограничивая данные ответа выбранными полями в выше указанном поле «fields».

Приступаем к работе

С сайтом для определения данных пользователя по его IP мы определились. Теперь нам нужно узнать сам IP пользователя. Как это сделать, хорошо описано в статье «Как определить IP пользователя в PHP». Далее, через CURL PHP нам нужно будет сделать запрос на сайт ip-api и в ответ получить все что нас интересует. На этом все.

Рассмотрим программную реализацию:

$ch = curl_init();
curl_setopt_array($ch, [
	CURLOPT_URL => 'http://ip-api.com/json/'.user_ip().'?lang=ru',
	CURLOPT_RETURNTRANSFER => true,
]);
$exec = curl_exec($ch);
$getinfo_ar = curl_getinfo($ch);

if(empty($getinfo_ar['http_code']) || $getinfo_ar['http_code'] != 200)
{
    die('Не удалось определить гео-данные пользователя');
}
$json_ar = json_decode($exec, true);
echo "<pre dir='ltr'>\$json_ar = ";print_r($json_ar); echo "</pre>";

curl_close($ch);;


Немного деталей:

$ch = curl_init();
curl_setopt_array($ch, [
	CURLOPT_URL => 'http://ip-api.com/json/'.user_ip().'?lang=ru',
	CURLOPT_RETURNTRANSFER => true,
]);
$exec = curl_exec($ch);
$getinfo_ar = curl_getinfo($ch);
/*  … */
curl_close($ch);


CURL с двумя параметрами в его самой просто реализации.

В константе «CURLOPT_URL» - указываем URL на который следует выполнить запрос. В нашем URL функция user_ip() возвращает IP пользователя зашедшего на сайт (на локальном компьютере не работает).

Параметром «CURLOPT_RETURNTRANSFER», даем понять CURL что мы хотим получить результат ответа через функцию «curl_exec()».

Функция «curl_getinfo($ch)», возвращает заголовки по запросу. Это нам нужно для определения кода ответа. Если он не 200, отображаем пользователю ошибку.

if(empty($getinfo_ar['http_code']) || $getinfo_ar['http_code'] != 200)
{
    die('Не удалось определить гео-данные пользователя');
}

А если нет, то считаем что данные есть и пропускаем ее через «json_decode» и отображаем массив:

$json_ar = json_decode($exec, true);
echo "<pre dir='ltr'>\$json_ar = ";print_r($json_ar); echo "</pre>";
Важно
В статье мы не учитываем обработку ошибок сервера. К примеру, если был передан не правильный IP адрес. Учитывайте это в своей реализации.

Как видите, все довольно просто. У меня на программный код ушло минут пять от силы. А то и три.
Всего хорошего!

Как определить геолокационные данные пользователя
Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *