Индикатор статуса Online
для соцсети Вконтакте (vk.com)
Уже неоднократно встречались вопросы о том, как добавить себе на сайт индикатор статуса Online для указанного пользователя соцсети Вконтакте (vk.com) чтобы знать в сети сейчас данный человек или нет. Т.к. недавно появилась необходимость в реализации данного вопроса, пришлось немного покопаться и найти наилучшее решение.
Самым простым решением на первый взгляд является скачивание странички пользователя целиком при помощи стандартной PHP функции file_get_contents() и вытаскивание статуса при помощи регулярных выражений. Но, скачивать всю страничку целиком это далеко не оптимальный вариант, тем более, в дальнейшем производить поиск по ее содержимому. Потом пришла идея скачивать мобильную версию странички пользователя Вконтакте для уменьшения объема данных, но это тоже далеко не лучший вариант. А самый главным минусом является то, что таким способом невозможно посмотреть статус пользователей, скрывших свои странички.
На наш взгляд самым лучшим и быстрым способом для получения на сайте индикатор статуса Online для соцсети Вконтакте (vk.com) является использование API, тем более что vk.com предоставляет такую возможность. Подробнее с возможностями API соцсети Вконтакте Вы можете ознакомиться по ссылке - dev.vk.com/reference.
В результате использования API от vk.com можно получить не только статус пользователя, но и его имя, фамилию, время последнего визита, с какого устройства он заходил и т.д.
Например, для получения имени, фамилии и статуса пользователя, достаточно добавить на свой сайт вот такой код:
<?php
$url="http://api.vkontakte.ru/method/users.get?uids=ХХХХХХ&fields=online";
$mass=json_decode(file_get_contents($url), true);
if ($mass["response"][0]["online"]==1) $online="<b>в сети</b>";
else $online="<u>не в сети</u>";
echo 'Пользователь <b>'.$mass["response"][0]["first_name"].' '.
$mass["response"][0]["last_name"].'</b> сейчас '.$online.'.';
?>
Не забудьте вместо ХХХХХХ подставить id пользователя соцсети Вконтакте.
При необходимости можно добавить еще время последнего визита и тип устройства, с которого был осуществлен последний вход на сайт. Для этого воспользуйтесь таким кодом:
<?php
$url="http://api.vkontakte.ru/method/users.get?uids=ХХХХХХ&fields=online,last_seen";
$mass=json_decode(file_get_contents($url), true);
if ($mass["response"][0]["online"]==1) $online="<b>в сети</b>";
else $online="<u>не в сети</u>";
switch ($mass["response"][0]["last_seen"]["platform"]){
case 1: $platform="mobile";break;
case 2: $platform="iphone";break;
case 3: $platform="ipad";break;
case 4: $platform="android";break;
case 5: $platform="wphone";break;
case 6: $platform="windows";break;
case 7: $platform="web";break;
}
echo 'Пользователь <b>'.$mass["response"][0]["first_name"].' '.
$mass["response"][0]["last_name"].'</b> сейчас '.$online.'.<br>';
echo 'Дата последнего входа - <b>'.date('H:i:s d.m.Y', $mass["response"][0]
["last_seen"]["time"]).'</b>. Тип устройства - <b>'.$platform.'</b>.';
?>
Теперь Вы всегда сможете сообщить посетителям Вашего сайта онлайн Вы сейчас находитесь или нет, а при необходимости еще и когда последний раз были в соцсети Вконтакте (vk.com).
Но не стоит таким образом (по одному) получать статусы для многих пользователей, т.к. при множественных обращениях нагрузка растет пропорционально количеству id пользователей и есть вероятность блокировки со стороны соцсети Вконтакте.
Если Вам необходимо получить статусы сразу нескольких пользователей, то это нужно делать одним запросом, в ответ на который будет получен массив со всеми необходимыми данными, который надо будет разобрать, но об этом как-нибудь в другой раз.
Перед публикацией все комментарии проходят обязательную модерацию!
Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Почему-то посчитал, что данный вопрос не должен вызвать больших затруднений, вот и не стал развивать данную тему.