Please wait!
Please wait!

ALEXEYWORLD.COM

alexeyworld.com

Статус на сайт из вконтакте

Статус на сайт из вконтакте

Последнее время встречаю вопросы о том, как на своем сайте показывать в сети человек или нет в социальной сети vkontakte, наподобие как в ICQ. Частота вопросов меня заинтересовала, и я решил попробовать это реализовать. Реализовал я это в двух вариантах: на PHP и ASP.NET.

Итак, давайте разберем порядок действий. Читая API ресурса, я не заметил средств получения этих данных. Поэтому следующей мыслью было конечно же парсинг.

Значит, первым действием нам необходимо получить страницу пользователя. В этом нам помогут методы: для php - file_get_contents($uri) и для asp.net - WebRequest.Create(uri).GetResponse(). Таким образом мы получаем всю главную страницу пользователя.

Если человек в сети, то есть надпись "Online". Но так как слово может встречаться в нескольких местах, мы более конкретно уточним его месторасположение с помощью регулярных выражений. Рассмотрев html разметку, видно, что нужное нам слово находится в теге <h1 id="title"></h1>. Вот на основании этого и будем составлять регулярное выражение.

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

php - preg_match("#<h1 id=\"title\".*?>(.*?)(Онлайн|Online)(.*?)</h1>#is", $file);

asp.net - Regex.IsMatch(text, "<h1 id=\"title\".*?>(.*?)(Онлайн|Online)(.*?)</h1>", RegexOptions.Compiled);

В результате мы получаем true если человек в сети и false если он вне сети. Теперь можно запросто манипулировать полученными данными и отражать статус пользователя любым способом.

Если кому-то мои пояснения показались непонятными, то выкладываю архив, в котором полностью работоспособный метод для получения данных. В архиве присутствуют обе версии: и для php и для asp.net.

загрузитьОбновленный код и статья.

опубликовано: 01.03.2011, 22:56 | просмотров: 16881 |


poxmel (07.03.2013, 11:19)

Arcon, спасибо, хорошо. Форум вещь нужная...

Arcon (06.03.2013, 07:37)

poxmel, спасибо за отзыв.
Попробую помочь по мере возможности.

P.S.При описании проблемы учитывайте ограничение сообщения по размеру. Для полноценного обсуждения различных вопросов разрабатывается форум.

poxmel (06.03.2013, 01:45)

очень полезная статья! И очень мне помогла! Arcon, не могли бы Вы немного помочь ? по этой же теме ..

pauLL (19.08.2011, 12:47)

Добрый день! Arcon, а Вы бы не могли скинуть мне на почту (pmw28if@mail.ru) переделаный код для файла vk.php используя переменную $isonline о которой вы писали до этого для меня! Потому что я переписал код и у меня выскакивают синтасические ошибки на странице!

Arcon (19.08.2011, 00:04)

После этого в переменной $isonline хранится информация, в сети человек или нет. Теперь можешь выводить результат как хочешь.
if($isonline)
{echo "Online";}
else
{echo "Offline";}

Arcon (19.08.2011, 00:04)

pauLL, давай пойдем по пункту 3, где ты подключаешь через include. Смотри, сам файл из себя представляет функцию, вызвав которую, ты получишь ответ.
т.е. делаешь include("vk.php");
а затем вызываешь этот метод:
$isonline=GetVKOnline("твой id"); //на самом деле, у тебя все равно id есть, посмотри его в настройках.
После этого в переменной $isonline хранится информация, в сети человек или нет. Теперь можешь выводить результат как хочешь.
if($isonline)
{echo &q

pauLL (18.08.2011, 21:00)

то опять-таки на том месте где я прописываю include ни чего не происходит. В чем у меня проблемы? Скажу сразу - можете смело стучать мне по голвое за то что я такой дурной, ибо я во всем этом плохо понимаю и все делаю методом проб и ошибок! Заранее спасибо!

pauLL (18.08.2011, 20:59)

Так вот, после того кака я вставляю код на сайт, то у меня на странице сайта, в том месте куда я вставил код, отображается сам код, а не статус Онлайн или Офлайн! 2) Если же, я все содержимое Вашего кода заключаю в тег script /script то все исчезает (ни чего не отображается). 3) Если я подключаю внешний файл vk.php (который я не меняю а оставляю как он есть за исключением адреса своей страницы Вконтакте) через функцию "include file" , то опять-таки на том месте где я прописываю includ

pauLL (18.08.2011, 20:58)

Arcon, я использовал php версию. Но к сожелению у меня все равно ни чего не выходит! Может быть я ни так что то делаю? Понимаете, я пытаюсь добавить функцию статуса Вконтакте на сайт под управлением CMS DLE 9.2. Что я делаю, мои шаги: 1) вставляю в main.tpl полностью Ваш код от и до заменив соответсвенно в строке file_get_contents свои данные. Где vk.com/my_page моя страница Вконтакте (у меня нет цифрового значения id я измнеил адрес своей страницы через настройки сайта). Так вот, после того ка

Arcon (18.08.2011, 15:35)

pauLL, на странице социальной сети произошли небольшие изменения. Вместо надписи "Онлайн", стали использовать англоязычный вариант "Online". По этой причине код не срабатывал. Теперь я добавил поддержку обоих вариантов и перезагрузил архив. Можете либо скачать заново, либо изменить сами вручную.
Благодарю, что сообщили о проблеме.

P.S. какую версию используете: для php или asp.net?

pauLL (18.08.2011, 12:56)

что то ни чего не выходит ((( Может я что то не так делаю?

kactet (17.04.2011, 20:57)

думаю пригодится

Arcon (31.03.2011, 07:49)

Используя приведенный код - да. На текущий момент все страницы открыты, поэтому передавая в методы id пользователя в ответ ты получишь значение типа bool: true - online, false - offline.

Havek (30.03.2011, 23:50)

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