Pull to refresh

Визуализация активности пользователей Google+

IT-companies
Давно уже увлекаюсь визуализацией различной статистики в программе code_swarm и gource.
Недавно я решил освоить Google api для Google Plus, и решил, что самым удобным и интересным будет придумать алгоритм сбора статистки по активности пользователей и потом визуализировать эту информацию выше упомянутыми средствами. В данной статье пойдет речь о результатах проделанной работы.


Что я использовал



Исходники приложения есть на github (Инсталлер).
Я не буду углубятся в реализацию, опишу только основные моменты.


Сначала javascript


Первым делом я решил попробовать получить данные через js. Для этого я сделал страничку на народе. Получить данные оказалось очень просто:
var request = gapi.client.plus.activities.list({
    'userId':profileID,
    'collection':'public',
    'maxResults':nextCount,
    'pageToken':nextPage
}).execute(createLog);


Затем стала задача придумать алгоритм формирования имен файлов для демонстрации активности. Задача была решена использование шаблонов.
правила формирования имен файлов.
Кусочек кода, которым это преобразуется:
  1. fnc = filePattern[o].comment.trim();
  2. fnc = fnc.replace(/type/gi, "comment")
  3.          .replace(/postId/gi, post.id)    
  4.          .replace(/id/gi, comment.id)
  5.          .replace(/postactor/gi, post.actorId)
  6.          .replace(/actor/gi, comment.actor.id)
  7.          .replace(/postdate/gi, post.date)
  8.          .replace(/date/gi, date)
  9.          .replace(/sharepath/gi, fns)
  10.          .replace(/postfilename/gi, fn)
  11.          .replace(////gi, '/');


Любой пользователь может сформировать свои имена файлов. Под файлом здесь понимается какая либо активность пользователя, создание: постов, комментариев, решар, выставление плюсов. Каждая строка лога формируется от имени того кто эту деятельность осуществил.
Результат визуализации лога полученного с помощью этой страницы:

Gource



  • Общие понятия
    • Пользователи google plus — пчелы.
    • Точки (посты, комментарии и тп) — элементы сот, точки разных цветов.
  • Типы точек
    • Изумрудный — пост
    • Зеленый — комментарии
    • Голубой — плюс
    • Светло-зеленый — репост
    • и тд

  • Типы лучей
    • Зеленый — создание элемента
    • Оранжевый — комментирование, плюс, репост
  • Пчелы стоят соты (ну или молекулу).
  • На данном видео снизу, а потом слева, это основные посты пользователя по чьему профилю была сгенерированна активность.
  • Справа это репосты сделанные этим пользователем у других, они имеют свои комментарии и плюсы.

Code_swarm



  • Общие понятия
    • Круги — пользователи google plus
    • Огоньки — деятельность пользователей (создание постов, комментариев, плюсов и другое)
  • Пользователи отталкиваются от пользователей
  • Огоньки отталкиваются от огоньков
  • Огоньки притягиваются к пользователю, который совершает над ним действие.
  • Пользователи притягиваются друг к другу через общее событие, то есть если пользователи комментируют один и тот же пост.
  • Все слетается к пользователю от чьего id был сгенерирован лог. Но также появляются скопление пользователей и огоньков в других местах. Это репосты дргих пользователей сделаных этим профилем, все новые события связанны с ним. Это можно изменить в правилах формирования имен файлов.


Но естественно подобного рода задачи не решаются в браузер и я решил написать приложение на C#.


Сейчас C#


По сути все сделано на простом примере который приведен здесь. Вот кусок:
  1. [STAThread]
  2. static void Main(string[] args)
  3. {
  4.       // Display the header and initialize the sample.
  5.       CommandLine.EnableExceptionHandling();
  6.       CommandLine.DisplayGoogleSampleHeader("Plus user activity");
  7.  
  8.       // Create the service.
  9.       var service = new PlusService();
  10.       RunSample(service);
  11.       CommandLine.PressAnyKeyToExit();
  12. }
  13.  
  14. private static void RunSample(PlusService service)
  15. {
  16.       // Run the request.
  17.       CommandLine.WriteAction("Executing List-request ...");
  18.       var result = service.Activities.List("MY PROFILE ID", Google.Apis.Plus.v1.ActivitiesResource.Collection.Public).Fetch();
  19.  
  20.       // Display the results.
  21.       if (result.Items != null)
  22.       {
  23.           foreach (var item in result.Items)
  24.           {
  25.               CommandLine.WriteResult(item.Id, itme.Actor.DisplayName);
  26.           }
  27.       }
  28. }

Естественно надо подключить к проекту или проект с оберткой для Google Plus Apis или собранную библиотеку.
Но на самом деле все станет понятно из этого руководства.

Исходники приложения на github. Exe здесь

Изменение генерации лога для code_swarm


Так как у массфоловеров очень много подписчиков, то для code_swarm схему, пользователь-активность получаем очень большое колво пользователей и кучу точек по которым ничего не понять. По этому я решил что в роли пользователя будет выступать пост (его id) а вся активность (имена файлов) будет формироваться по id пользователя. Получим, что к посту будут слетаться пользователи причем разного цвета в зависимости от их активности (коммент, решара, плюс и т.д.), и тогда будет наглядно видно кто и как активен. Да имена файлов также формируются используя шаблон:
программа для генерации логов активности

Результаты визуализации логов полученных программой


Code_swarm



  • Центральная точка в круге (или центр круга) — пост.
  • Подсвеченные точки — комментарии, плюсы, решары.

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


Gource



  • Сиреневые точки — решары.
  • Салатовые точки — комментарии.
  • Бирюзовые точки — плюсы.
  • Точка между тремя ветвями — пост.



Результат


Очередной раз убедился, что для изучения какой либо технологии необходимо себя замотивировать, в данном случае мотивацией выступает наглядное представления проанализированных данных, что в моем случае очень стимулирует. В планах изучение Google Analytics и тоже планирую делать визуализация полученной статистики, если есть у кого наработки по данному вопросу можете поделиться, так же интересны api last.fm.

Ваши вопросы, замечания жду в комментариях.

UPD: Как и обещал в комментариях, добавил генерацию лога для logstalgia. Вот результаты визуализации:
Tags:
Hubs:
Total votes 58: ↑51 and ↓7 +44
Views 1.5K
Comments Comments 31