Як визначити геолокаційні дані користувача

Як визначити геолокаційні дані користувача

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

Про сервіс

Як сервіс для визначення гео-даних скористаємося ресурсом ip-api.com. Перейшовши на сторінку документації та переглянувши її, можна зрозуміти, що для отримання необхідної нам інформації, слід виконати наступний запит:

 

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

 

Де:
{query} — IP-адреса, яка нас цікавить
lang — мова (використаємо «ru»)

Також ми можемо передавати додаткові параметри (поля) в полі «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-адресу. Враховуйте це у своїй реалізації.

Як бачите, все доволі просто. У мене на програмний код пішло максимум п’ять хвилин. А може й три.
Усього найкращого!

Пости на схожі теми

З вашим WordPress сайтом проблеми? потрібний додатковий функціонал? нестандартний плагін чи згорнути нову сторінку?
Тоді напишіть мені через форму зворотного зв'язку, і я намагатимусь вам допомогти.

Напишіть коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *