Геотаргетинг для програміста. Що цікавого можуть розповісти безкоштовні геоінформаційні API
- Зміст статті Географічні координати - найцінніша інфа, яку веб-розробник може отримати від відвідувачів...
- Юзкейс 1. «Я тебе вирахували за IP»
- Юзкейс 2. Геомаркетинг
- Юзкейс 3. Веселий функціонал
- Юзкейс 4. «Наукові» дослідження аудиторії
- Для отримання координат
- Яндекс.Локатор
- Exif-дані фотографій
- база GeoIP
- складаємо досьє
- Дізнаємося адреса користувача
- Google Street View
- фотографії навколо
- Продовження доступно тільки учасникам
- Варіант 2. Відкрий один матеріал
Зміст статті
Географічні координати - найцінніша інфа, яку веб-розробник може отримати від відвідувачів сайту. Маючи кмітливість і знаючи пару прийомчиків, можна багато дізнатися про людину по його місцю розташування: адреса, які заклади є неподалік, фотографії, зроблені в його районі, на що скаржаться сусіди і глибину найближчій річки.
INTRO
Якщо ти до сих пір не збираєш дані про місце розташування своїх користувачів, то ти просто ще не читав цю статтю і не знаєш, як з користю для себе застосувати інформацію. Розберемо кілька юзкейсов, щоб показати, як можуть стати в нагоді годинне, а потім перейдемо до практики.
Юзкейс 1. «Я тебе вирахували за IP»
Припустимо, в твоєму блозі завівся троль, який регулярно залишає грубі коменти. Якщо ти збираєш інфу про відвідувачів Яндекс.Локатором, то без праці з'ясуєш, що цей хтось знаходиться на східному кінці вулиці Леніна, в якому якраз живе один неприємний тип з твого універу. І якщо пощастить, то, зробивши запит до Vkontakte API, ти знайдеш його останню фотку.
Юзкейс 2. Геомаркетинг
Яндекс.Директ вже давно застосовує прицільний геотаргетинг для своїх оголошень. Оголошення «Мережа піцерій в Москві» свідомість ігнорує. А повз посилання «Піца Рочдельська вулиця будинок 14» (через дорогу від тебе) пройти практично неможливо.
Ти можеш використовувати годинне для просування товарів і послуг. Якщо людина в даний момент відчуває на собі дію зниженого атмосферного тиску, то є ймовірність, що йому захочеться купити таблетки для підняття життєвого тонусу.
Юзкейс 3. Веселий функціонал
Тут величезний простір для творчості. Ставимо на сайт «нічну» тему оформлення після того, як у користувача заходить сонце. Показуємо йому останні Селфі дівчат, зроблені в 10 км від нього. По клімату і глибині водойм визначаємо, яка риба водиться в окрузі. Варіантів маса.
Юзкейс 4. «Наукові» дослідження аудиторії
Результати анонімного онлайн-опитування можуть виявитися істотно корисніше, якщо на додаток до відповідей відзначати географічне положення респондентів.
Цікаво? Тоді вперед.
Для отримання координат
GPS-дані можна отримати за допомогою JavaScript і HTML5 Geolocation API. Але врахуй: дізнатися точне місце розташування користувача можна тільки з його згоди. Він повинен висловити його, відповівши ствердно на питання спливаючого вікна, чи дозволити поточного сайту дізнатися його місце розташування.
Приклад коду на нативном JS:
// Кладемо в змінну адресу <div> для виводу тексту var posText = document.getElementById ( "positionText"); function getLocation () {if (navigator.geolocation) {// Якщо користувач дозволив, визначаємо його розташування і обробляємо отримане значення за допомогою функції ShowPosition navigator.geolocation.getCurrentPosition (showPosition); } Else {// Якщо немає, виводимо повідомлення про помилку posText.innerHTML = "Цей браузер не може визначати місце розташування"; }} Function showPosition (position) {// Виводимо широту і довготу на сторінку posText.innerHTML = "Широта:" + position.coords.latitude + "<br> Довгота:" + position.coords.longitude; }
Працювати з GPS-даними можна не тільки на JS. У більшості мов є інструменти для їх отримання і обробки:
Яндекс.Локатор
Якщо користувач не хоче добровільно ділитися GPS-інфою, то ще не все втрачено. Є крутий інструмент Яндекс.Локатор. Середня точність визначення становить 300 м. Він обчислює, де знаходиться людина, за наступною інформацією:
- сигналам мережі мобільного зв'язку;
- сигналам мереж доступу Wi-Fi;
- IP-адресою мобільного пристрою.
Впроваджується в проект в рази складніше, ніж HTML5 Geolocation API. Перед відправкою запиту до Яндекс.Локатор API сайт або мобільний додаток має отримати access key і з'ясувати багато подробиць про користувача. Якщо відвідувач сидить в інеті через мобільний зв'язок, то треба знати ID стільникового осередку і силу сигналу, якщо через Wi-Fi - силу сигналу і MAC-адресу точки доступу.
За точними інструкціями відсилаємо тебе до керівництву розробника .
Exif-дані фотографій
Знайти GPS-координати можна і в метаданих знімків, зроблених цифровою камерою. Інформацію про фотках можна читати без згоди користувача. Треба тільки змусити його їх завантажити. Далі на допомогу приходить бібліотека exif-js або серверні інструменти для читання exif-data:
- в PHP є вбудована функція read_exif_data ();
- для Ruby є бібліотека exifr ;
- у Python є Package ExifRead 2.0 ;
- для С ++ - easyexif .
база GeoIP
Можна спробувати знайти IP-адресу користувача в базі GeoIP, але це чистої води хіромантія. Дорога і застаріла. З мого досвіду, ця база сповнена неточностей і довіряти їй не можна. Та й відсоток використовують VPN досить значний.
складаємо досьє
Отримавши в руки географічні координати, приступимо до збору інформації. Для кожного пункту будемо робити запит з параметрами до одного з API і парсити повертається XML / JSON-відповідь.
Для початку дізнаємося адреса користувача з точністю до вулиці.
Дізнаємося адреса користувача
Це можна зробити Яндекс.Геокодером (з ним можна працювати без попередньої OAuth-авторизації).
Синтаксис запиту:
http://geocode-maps.yandex.ru/1.x/?geocode=36.3630,56.0000
Все просто. Запитом передається два параметри: широта (56.0000) і довгота (36.3630).
Сервер видасть відповідь у форматі XML (див. Скрін). Нас цікавлять такі поля:
- AdressDetails-> Country-> AdressLine - текстовий рядок з повною адресою користувача;
- AdressDetails-> Country-> СountryName - країна;
- AdressDetails-> AdministrativeArea-> AdministrativeAreaName - регіон;
- AdressDetails-> SubAdministrativeArea-> SubAdministrativeAreaName - район;
- AdressDetails-> Locality-> LocalityName - населений пункт;
- AdressDetails-> ThoroughFare-> ThoroughFareName - вулиця.
відповідь Геокодера
Адреса з номером будинку Яндекс.Геокодер не розкриває. Але якщо трохи напружити мізки і згадати шкільну програму, то можна обчислити його. В одному градусі широти 111 км 111 м. З довготою все трохи складніше. Адже діаметр Землі варіюється в залежності від широти. Тому довгота розраховується за такою формулою (6371 - це радіус Землі):
6371 * (Math :: PI / 180) * cos (широта * Math :: PI / 180)
Як ці знання допоможуть обчислити точну адресу користувача? А ось як:
- Дізнаємося вулицю за допомогою Яндекс.Геокодера.
- Відправляємо запит на отримання точних географічних координат якогось будинку на цій вулиці:
http://geocode-maps.yandex.ru/1.x/?geocode=пермь, вулиця Яблочкова, 2 - Прочитуємо значення з відповіді сервера.
- Знаючи довжину градуса широти і довготи, розраховуємо відстань від шуканої точки до цього будинку.
- Відкриваємо Яндекс.Карти і лінійкою прикидаємо, який будинок має географічні координати користувача.
Всіх користувачів таких способом не задетектішь, але деяких особливо потрібних цілком. Головне - не помилитися в розрахунках.
Google Street View
Координати можна знайти на Google Maps і включити режим перегляду вулиць. Забавно подивитися на будинок або офіс людини, який нахабно критикує в твоєму блозі фотки свіжого ремонту дачі.
фотографії навколо
Тепер пошукаємо фотографії, зроблені поруч з місцем Х. Як це робиться, розберемо на прикладі ВКонтакте API:
https://api.vk.com/method/photos.search.xml?lat=38.600000&long=35&count=100&radius=500
- lat - широта;
- long - довгота;
- count - кількість повертаються запитом фотографій;
- radius - радіус кола навколо заданої точки, в якій повинні бути зроблені фотографії.
Ось які поля відповіді нас цікавлять:
- src, src_big - посилання на фотографії;
- created - дата створення фотографії в unixtimestamp;
- owner_id - ID власника фотографії.
Знаючи ID власника, можна зайти на його сторінку або зібрати інфу за допомогою того ж VK API:
https://api.vk.com/method/getProfiles.xml?uids=111111&fields=last_name,first_name,sex,age
- uids - ID власників через кому;
- fields - поля, які ми хочемо отримати у відповіді.
Повний список полів доступний в документації .
У Instagram, Facebook і Flickr теж є API з методами для пошуку фотографій по Геотеги. Порядок роботи з ними шукай на сторінках для розробників додатків під ці соцмережі.
Продовження доступно тільки учасникам
Варіант 1. Приєднайся до товариства «Xakep.ru», щоб читати всі матеріали на сайті
Членство в співтоваристві протягом зазначеного терміну відкриє тобі доступ до ВСІХ матеріалами «Хакера», збільшить особисту накопичувальну знижку і дозволить накопичувати професійний рейтинг Xakep Score! Детальніше
Варіант 2. Відкрий один матеріал
Зацікавила стаття, але немає можливості стати членом клубу «Xakep.ru»? Тоді цей варіант для тебе! Зверни увагу: цей спосіб підходить тільки для статей, опублікованих більше двох місяців тому.
Цікаво?
1.x/?
1.x/?
Xml?
Xml?
Ru»?