Автор:
Иван Глинкин

Контроль активности пользователей в сети

Актуальность

Сегодня трудно представить современную жизнь без инновационных технологий, используемых для автоматизации бизнес-процессов, их удаленного управления, обмена информацией. Это стало возможным благодаря активному интегрированию интернета в повседневную жизнедеятельность человека. Возможности новых технологий сокращают экономические затраты предприятия, минимизируют время исполнения задач, а также предоставляют другие дополнительные преимущества. 
Вместе с тем, удобство использования новых технологий зачастую пренебрегается безопасностью, что открывает путь к уязвимостям пользователей. Анализируя использование Интернета, как главного элемента инфраструктуры новых технологий, дает возможность получить достаточно много информации о пользователе. Это становится возможным с помощью создания специального программного обеспечения, использование которого дает возможность, например, в корпоративной сфере проследить рабочую активность персонала. 
В связи с этим, предлагаем в рамках настоящей статьи рассмотреть на реальных примерах методы и средства контроля активности пользователей в сети.

Методы и средства

В качестве примера, для контроля активности пользователя в сети рассмотрим социальную сеть «ВКонтакте». Данный ресурс предлагает нам не только данные пользователей, но также ряд возможностей по их обработке. Воспользуемся этими возможностями.

На странице https://vk.com/dev (меню сайта «Разработчикам») «ВКонтакте» предлагает пользователям широкие возможности по интеграции их сервисов на домашнюю страничку, приложение на телефон, дает возможность построить бизнес и даже разработать интернет-магазин.

Для решения поставленной задачи в рамках данной статьи будет достаточно одной функции – users.get [1], которая возвращает расширенную информацию о пользователях. При этом, возвращаются только те данные, которые являются общедоступными: фамилия, имя, идентификатор пользователя (id), дата рождения, ссылка на фотографии и др [2].

Для контроля активности пользователя в рамках функции users.get будем использовать поля id (идентификатор пользователя), first_name (имя), last_name (фамилия), photo_100 (url квадратной фотографии пользователя шириной 100 пикселей) и online (находится ли пользователь сейчас на сайте). Объектом исследования выберем основателя социальной сети «ВКонтакте» Павла Дурова - https://vk.com/id1. Для вызова функции с нужными полями по данному пользователю используем запрос вида:

https://api.vk.com/method/users.get?user_ids=1&fields=id,first_name,last_name,photo_100,online






Разработка программы

В качестве языка программирования выберем PHP – скриптовой язык для разработки веб-приложений. Программа будет запрашивать активность (нахождение на сайте) Павла каждую минуту, и записывать полученные сведения в базу данных для дальнейшего анализа. При этом, следует обратить внимание на одну важную особенность: пользователь остается активным в течение 15 минут после выхода с сайта. Поэтому при обработке результатов и написания кода обязательно должно учитываться указанное обстоятельство. 

Алгоритм построения будущей программы следующий: 

1. Запрашиваем ВКонтакте интересующие сведения по вышеописанному алгоритму;

$vk_query = "https://api.vk.com/method/users.get?user_ids=1&fields=id, first_name,last_name,photo_100,online";

2. Получаем от ВКонтакте данные и обрабатываем их;

$vk_info = file_get_contents($vk_query);

$info_array = json_decode($vk_info, true); 

3. Формируем выходные данные;

$uid = $info_array["response"][0]["uid"]; $first_name = $info_array["response"][0]["first_name"]; $last_name = $info_array["response"][0]["last_name"]; $photo = $info_array["response"][0]["photo_100"]; $online_value = $info_array["response"][0]["online"]; if ($online_value == 0) {$online = "Не в сети";} else {$online = "В сети";}; if (isset($info_array["response"][0]["online_mobile"])){$online_mobile = $info_array["response"][0]["online_mobile"]; if ($online_mobile = 1) {$online_type = " (Телефон)";} } else {$online_type = " (Компьютер)";} if ($online == "Не в сети") {$online_type = "";} 

4. Записываем данные в базу данных
$query = "INSERT INTO vk_stat (uid, first_name, last_name, photo, online, type, date, time) VALUES ($uid, $first_name, $last_name, $photo, $online, $online_type, date(d.m.Y), date(H:i))";

5. Выводим результат.
<div style="display:inline-block;">
<div style="display:inline-block"><img src="<?=$photo?>" style="border-radius:50px;"></div><div style="display:inline-block"><?php echo $first_name . " " . $last_name; ?><br>
Статус: <?php echo $online . $online_type; ?></div></div>

6. Автоматизируем ежеминутные запросы

header('refresh: 60');

После исполнения указанного кода программа нам выдаст один из следующих результатов:




Обработка полученных результатов

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


Количество строк напрямую зависит от времени работы программы и при наших настройках составит 1440 записей в сутки (1 строка в минуту).

Располагая указанной информацией, можно приступать к анализу. Вид представления сведений можно выбрать в разных вариантах, в зависимости от предпочтений оператора базы данных. В рамках настоящей статьи предлагаем рассмотреть 2 варианта представления: график и диаграмма Ганта.

При анализе сведений в рамках «Графика» возьмем Декартову систему координат. По оси «Y» разграничим 2 наименования: 0 - «Не в сети» и 1 - «В сети»; по оси «X» - дату и время.


Более интересный, с нашей точки зрения, и наглядный анализ активности пользователя в сети реализуется при помощи диаграммы Ганта.


При условиях контроля одного пользователя диаграмма Ганта мало чем отличается от графического представления. Однако, вся сила указанного метода проявится, когда мы расширим функции нашей программы.

Расширение функционала

Контроль одного пользователя вряд ли может быть удобным. В условиях реального времени необходимо контролировать от 10 (субъекты малого предпринимательства) до 3000-5000 человек (корпорации, общественные объединения и т.д.)

Выполнение указанных требований реализуемо. Так, в соответствии с документацией ВКонтакте, функция users.get поддерживает возможность одномоментно получать информацию до 1000 пользователей.

Для того, чтобы получить информацию о нескольких лицах, необходимо идентификаторы пользователей (uid) перечислить через запятую. Таким образом, запрос будет выглядеть следующим образом (на примере 4 пользователей):

https://api.vk.com/method/users.get?user_ids=1,5,6,7&fields=id,first_name,last_name,photo_100,online.


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

Так, узнаем общее количество пользователей:

$users_under_control = count($info_array["response"]);

И добавляем цикл перебора вместе с номером элемента массива в конец используемых переменных:

for ($i = 0; $i < $users_under_control; $i++)

{

         $uid[$i] = $info_array["response"][$i]["uid"];

         $first_name[$i] = $info_array["response"][$i]["first_name"];

         …

}

В результате работы программы получим следующее:


Практическая значимость

Рассмотрим практическое применение созданной программы.

Для наглядности примеров, вернемся к диаграмме Ганта и заполним ее активностью наших пользователей. Продемонстрируем какую информацию можно извлечь из полученного графика.


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

Обратите внимание, Павел Дуров и Николай Дуров находятся в сети в одно и то же время. При этом, Николай находится в сети исключительно во время активности Павла. Если указанная тенденция продолжается в течение длительного времени, то можно с уверенностью утверждать, что Павел и Николай не только знают друг друга, но и находятся в дружеских отношениях, даже если они усиленно стараются это скрыть.

Также, руководство корпоративного сектора может обратить внимание на пониженную трудовую активность работников и не вовлеченность в рабочий процесс. Проанализируем активность Ильи Перекопского. Из графика видно, что Илья в течение всего трудового дня находится в сети, что не является его основной работой. Чем Илья занимается в сети ВКонтакте, можем только предполагать. Однако, мы точно уверены, что Илья не занимается работой.

Другой тип работников: Алексей Кобылянский. В течение дня Алексей занимается повседневной рутинной работой, на интернет не отвлекается и ресурсами компании в личных целях не пользуется. Однако, Алексея тяжело разговорить, он безынициативный и активности не проявляет. Проанализируем диаграмму. Алексей находится в сети в течение 8 часов и ложится спать в 3 часа ночи. С учетом того, что в 6 утра он просыпается и собирается на работу, на сон у него уходит всего 3 часа.

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

Выводы

С использованием специализированного программного обеспечения можно не только получить доступ к личным сведениям, но и автоматизировать данный процесс.

Методы и средства контроля активности пользователей являются совершенно легальными: для работы программы используются открытые источники информации.

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

Все зависит от поставленных целей и решаемых задач. Главное – не бояться экспериментировать и нестандартно мыслить.


[1] Описание метода подробно раскрыто по адресу https://vk.com/dev/users.get

[2] Все возвращаемые данные и их описание раскрыто по адресу https://vk.com/dev/objects/user