Написал небольшой гаджет получения онлайн пользователей группы, онлайн с телефонов, забаненные и удаленные, страны и когда последний раз были на сайте VK.com.

image

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

В своей разработке применил execute и VKScript. Очень плохо, что от execute я смог принять только текстовые поля, пришлось их переводить из строки. А что касается полей которые есть не у всех пользователей, то там было что то вроде этого ",,,,,1,4,,,,,,,5,54,,,,,5,4,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,2,,,,,,,". Применил ".match(/\d+/g)".

Чтобы принять какой-то параметр из массива ответа, в VKScript нужно обращаться с помощью @ (Например: arrMembers@.last_seen@.time).

Собственно он вышел такой:

var arrMembers = API.groups.getMembers({"group_id": group_id, "v": "5.27", "sort": "id_asc", "fields": "online,online_mobile,last_seen,country", "count": "1000", "offset": 0}).items;
var membersLastSeenTime = arrMembers@.last_seen@.time;
var membersOnline = arrMembers@.online;
var membersOnlineMobile = arrMembers@.online_mobile;
var membersCountry = arrMembers@.country@.id;
var membersDeactivated = arrMembers@.deactivated;
var offset = 1000;
while (offset < 25000 && (offset + memberOnline.length) < members_count)
{
	arrMembers = API.groups.getMembers({"group_id": group_id, "v": "5.27", "sort": "id_asc", "fields": "online,online_mobile,last_seen,country", "count": "1000", "offset": (memberOnline.length + offset)}).items;
	membersOnline = membersOnline + "," + arrMembers@.online;
	membersLastSeenTime = membersLastSeenTime + "," + arrMembers@.last_seen@.time;
	membersOnlineMobile = membersOnlineMobile + "," + arrMembers@.online_mobile;
	membersCountry = membersCountry + "," + arrMembers@.country@.id;
	membersDeactivated = membersDeactivated + "," + arrMembers@.deactivated;
	offset = offset + 1000;
};
return [membersOnline, membersOnlineMobile, membersLastSeenTime, membersCountry, membersDeactivated];

На группах с небольшим количеством участников работает быстро, например, на Хабре медленно.

Демо: romkagolovadvayha.github.io/vk-analiz-group
Github: github.com/romkagolovadvayha/romkagolovadvayha.github.io/tree/master/vk-analiz-group

Использовал:
angular.js (Отлично подходит для CRM системы): github.com/angular/angular.js
angular-chart.js: github.com/jtblin/angular-chart.js
bootstrap: github.com/twbs/bootstrap
Алгоритм дорабатывал из своей предыдущей статьи: habrahabr.ru/post/248725

Комментарии (11)


  1. begemot_nn
    17.07.2015 16:06
    +1

    Приложение test запрашивает доступ к Вашему аккаунту.

    Подскажите зачем приложению test доступ к моему аккаунта?


    1. dooza Автор
      17.07.2015 16:41

      запрос не идет с клиента на получение пользователей группы (именно с их JS фреймворка), или у меня не получилось это сделать. (не достаточно прав)


  1. ser0t0nin
    17.07.2015 17:16

    прикольно, но результат несколько странный
    для группы в 75000 подписчиков наблюдаю скачки пользователей онлайн плюс минус 3000 человек за 10 секунд при среднем числе онлайн в 14000, так правда бывает?


    1. dooza Автор
      17.07.2015 17:53

      старался тестировать на разных сообществах, было все верно (примерно)


    1. MrMmka
      19.07.2015 00:50

      для группы в 75000 подписчиков наблюдаю скачки пользователей онлайн плюс минус 3000 человек за 10 секунд при среднем числе онлайн в 14000, так правда бывает?

      Может кэширование поэтому? Когда кэш обновляется — то сразу +- люди
      Самому тоже стало интересно


  1. emagdnim
    17.07.2015 20:45

    {«error»:«invalid_request»,«error_description»:«Security Error»}
    в чем может быть проблема?


  1. sergiks
    17.07.2015 23:25

    C группой /live (3+ млн. участников) не работает вовсе.


    1. dooza Автор
      18.07.2015 00:09

      У меня сработало.

      Нужно ждать, за один запрос возможно получить только 1 тыс. участников, с помощью execute я получаю за раз 25 тыс. участников.

      3 млн участников я получу примерно за:
      ((3 300 000 участников / 25 000 участников) запросов * 10 с (средний отклик от vk и задержка одной итерации)) / 60 с = 22 минут

      Скриншот
      image


  1. rpisarev
    18.07.2015 01:17
    -2

    А можете поделиться как такое вообще запускать? На демо посмотреть группы не получается, а опыта создания приложений VK нет.


  1. sova
    18.07.2015 01:29

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


  1. rocket
    20.07.2015 17:16

    на небольших группах (примерно менее 1000 участников) вываливается javascript exception и прогресс-бар устремляется в бесконечность:

    image