Сейчас: 17:31:21   19-го апреля 2024 г.
UsefulScript.ruХитростиСтатус Online для vk.com
10
50

Индикатор статуса 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 код:
<?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 код:
<?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 пользователей и есть вероятность блокировки со стороны соцсети Вконтакте.


Если Вам необходимо получить статусы сразу нескольких пользователей, то это нужно делать одним запросом, в ответ на который будет получен массив со всеми необходимыми данными, который надо будет разобрать, но об этом как-нибудь в другой раз.

Дата создания: 14:36:09 06.01.2015 г.
Посещений: 16649 раз(а).

Комментарии посетителей (9 шт.):
Дмитрий
0
# 2321
(23:22:16  11.03.2015 г.)

А можете дать пример или код как узнать статус пользователя? Спасибо.
Ответить

Administrator
1
# 2322
(23:46:39  11.03.2015 г.)

Скопируйте первый код из данной темы и подставьте вместо ХХХХХХ id интересующего Вас пользователя.
Ответить

Pisatel
1
# 2564
(21:43:46  08.07.2015 г.)

Мб, рациональнее будет использовать curl с кэшэм файла/файлов (например, раз в 60 секунд кэш будет обновляться при запросе страницы со статусами)?
Ответить

Виталий
0
# 2854
(08:16:45  02.12.2015 г.)

Уважаемый автор, спасибо за ваш урок, но он требует продолжения - вы обещали рассказать, как получить статусы сразу нескольких пользователей одним запросом! Уже год прошёл. Пожалуйста, расскажите нам и об этом!
Ответить

Administrator
0
# 2866
(22:59:27  04.12.2015 г.)

Пожалуйста - Индикаторы для нескольких пользователей vk.com.
Почему-то посчитал, что данный вопрос не должен вызвать больших затруднений, вот и не стал развивать данную тему.
Ответить

Сергей
-1
# 3480
(03:07:07  30.09.2016 г.)

Не работает данный скрипт. Показывает все время что пользватель не в сети.
Ответить

Administrator
0
# 3482
(18:42:41  30.09.2016 г.)

Похоже, что VK API перестали отдавать информацию о статусе пользователя и еще много чего тоже прикрыли.
Ответить

Виталий
2
# 3829
(18:39:28  14.04.2017 г.)

Ничего подобного! VK API отдаёт информацию. Просто устарел домен, по которому вы делали запросы. Вместо "http://api.vkontakte.ru/method/users.get" следует указывать "https://api.vk.com/method/users.get" и всё!
Ответить

Юзер
0
# 4937
(09:24:13  29.08.2022 г.)

Данный скрипт, к сожалению, уже давно не работает. Теперь нужно обязательно передавать access_token.
Ответить

Закрыть
Ваше имя:
907 + 1 =
Добавить комментарий:
Ваше имя:
907 + 1 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 6

Какой браузер Вы используете?