Последнее время встречаю вопросы о том, как на своем сайте показывать в сети человек или нет в социальной сети 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.
Обновленный код и статья.