Давно уже увлекаюсь визуализацией различной статистики в программе code_swarm и gource.
Недавно я решил освоить Google api для Google Plus, и решил, что самым удобным и интересным будет придумать алгоритм сбора статистки по активности пользователей и потом визуализировать эту информацию выше упомянутыми средствами. В данной статье пойдет речь о результатах проделанной работы.
Исходники приложения есть на github (Инсталлер).
Я не буду углубятся в реализацию, опишу только основные моменты.
Первым делом я решил попробовать получить данные через js. Для этого я сделал страничку на народе. Получить данные оказалось очень просто:
Затем стала задача придумать алгоритм формирования имен файлов для демонстрации активности. Задача была решена использование шаблонов.

Кусочек кода, которым это преобразуется:
Любой пользователь может сформировать свои имена файлов. Под файлом здесь понимается какая либо активность пользователя, создание: постов, комментариев, решар, выставление плюсов. Каждая строка лога формируется от имени того кто эту деятельность осуществил.
Результат визуализации лога полученного с помощью этой страницы:
Но естественно подобного рода задачи не решаются в браузер и я решил написать приложение на C#.
По сути все сделано на простом примере который приведен здесь. Вот кусок:
Естественно надо подключить к проекту или проект с оберткой для Google Plus Apis или собранную библиотеку.
Но на самом деле все станет понятно из этого руководства.
Исходники приложения на github. Exe здесь
Так как у массфоловеров очень много подписчиков, то для code_swarm схему, пользователь-активность получаем очень большое колво пользователей и кучу точек по которым ничего не понять. По этому я решил что в роли пользователя будет выступать пост (его id) а вся активность (имена файлов) будет формироваться по id пользователя. Получим, что к посту будут слетаться пользователи причем разного цвета в зависимости от их активности (коммент, решара, плюс и т.д.), и тогда будет наглядно видно кто и как активен. Да имена файлов также формируются используя шаблон:

Очередной раз убедился, что для изучения какой либо технологии необходимо себя замотивировать, в данном случае мотивацией выступает наглядное представления проанализированных данных, что в моем случае очень стимулирует. В планах изучение Google Analytics и тоже планирую делать визуализация полученной статистики, если есть у кого наработки по данному вопросу можете поделиться, так же интересны api last.fm.
Ваши вопросы, замечания жду в комментариях.
UPD: Как и обещал в комментариях, добавил генерацию лога для logstalgia. Вот результаты визуализации:
Недавно я решил освоить Google api для Google Plus, и решил, что самым удобным и интересным будет придумать алгоритм сбора статистки по активности пользователей и потом визуализировать эту информацию выше упомянутыми средствами. В данной статье пойдет речь о результатах проделанной работы.
Что я использовал
- Google+ Platform — Руководство для разработчиков
- Google APIs Client Library for JavaScript — библиотека для js
- Google APIs Client Library for .NET — библиотека для C#
- Библиотека примеров использования Google APIs в C#
- Пакет для визуализации с моими настройками. Запускается из папки data/my файлом run.bat, предварительно надо положить сгенерированные логи в папку data/my/data. Подробней с заголовка Конфиг для code_swarm
Исходники приложения есть на github (Инсталлер).
Я не буду углубятся в реализацию, опишу только основные моменты.
Сначала javascript
Первым делом я решил попробовать получить данные через js. Для этого я сделал страничку на народе. Получить данные оказалось очень просто:
var request = gapi.client.plus.activities.list({
'userId':profileID,
'collection':'public',
'maxResults':nextCount,
'pageToken':nextPage
}).execute(createLog);
Затем стала задача придумать алгоритм формирования имен файлов для демонстрации активности. Задача была решена использование шаблонов.

Кусочек кода, которым это преобразуется:
- fnc = filePattern[o].comment.trim();
- fnc = fnc.replace(/type/gi, "comment")
- .replace(/postId/gi, post.id)
- .replace(/id/gi, comment.id)
- .replace(/postactor/gi, post.actorId)
- .replace(/actor/gi, comment.actor.id)
- .replace(/postdate/gi, post.date)
- .replace(/date/gi, date)
- .replace(/sharepath/gi, fns)
- .replace(/postfilename/gi, fn)
- .replace(////gi, '/');
Любой пользователь может сформировать свои имена файлов. Под файлом здесь понимается какая либо активность пользователя, создание: постов, комментариев, решар, выставление плюсов. Каждая строка лога формируется от имени того кто эту деятельность осуществил.
Результат визуализации лога полученного с помощью этой страницы:
Gource
- Общие понятия
- Пользователи google plus — пчелы.
- Точки (посты, комментарии и тп) — элементы сот, точки разных цветов.
- Типы точек
- Изумрудный — пост
- Зеленый — комментарии
- Голубой — плюс
- Светло-зеленый — репост
- и тд
- Типы лучей
- Зеленый — создание элемента
- Оранжевый — комментирование, плюс, репост
- Пчелы стоят соты (ну или молекулу).
- На данном видео снизу, а потом слева, это основные посты пользователя по чьему профилю была сгенерированна активность.
- Справа это репосты сделанные этим пользователем у других, они имеют свои комментарии и плюсы.
Code_swarm
- Общие понятия
- Круги — пользователи google plus
- Огоньки — деятельность пользователей (создание постов, комментариев, плюсов и другое)
- Пользователи отталкиваются от пользователей
- Огоньки отталкиваются от огоньков
- Огоньки притягиваются к пользователю, который совершает над ним действие.
- Пользователи притягиваются друг к другу через общее событие, то есть если пользователи комментируют один и тот же пост.
- Все слетается к пользователю от чьего id был сгенерирован лог. Но также появляются скопление пользователей и огоньков в других местах. Это репосты дргих пользователей сделаных этим профилем, все новые события связанны с ним. Это можно изменить в правилах формирования имен файлов.
Но естественно подобного рода задачи не решаются в браузер и я решил написать приложение на C#.
Сейчас C#
По сути все сделано на простом примере который приведен здесь. Вот кусок:
- [STAThread]
- static void Main(string[] args)
- {
- // Display the header and initialize the sample.
- CommandLine.EnableExceptionHandling();
- CommandLine.DisplayGoogleSampleHeader("Plus user activity");
- // Create the service.
- var service = new PlusService();
- RunSample(service);
- CommandLine.PressAnyKeyToExit();
- }
- private static void RunSample(PlusService service)
- {
- // Run the request.
- CommandLine.WriteAction("Executing List-request ...");
- var result = service.Activities.List("MY PROFILE ID", Google.Apis.Plus.v1.ActivitiesResource.Collection.Public).Fetch();
- // Display the results.
- if (result.Items != null)
- {
- foreach (var item in result.Items)
- {
- CommandLine.WriteResult(item.Id, itme.Actor.DisplayName);
- }
- }
- }
Естественно надо подключить к проекту или проект с оберткой для Google Plus Apis или собранную библиотеку.
Но на самом деле все станет понятно из этого руководства.
Исходники приложения на github. Exe здесь
Изменение генерации лога для code_swarm
Так как у массфоловеров очень много подписчиков, то для code_swarm схему, пользователь-активность получаем очень большое колво пользователей и кучу точек по которым ничего не понять. По этому я решил что в роли пользователя будет выступать пост (его id) а вся активность (имена файлов) будет формироваться по id пользователя. Получим, что к посту будут слетаться пользователи причем разного цвета в зависимости от их активности (коммент, решара, плюс и т.д.), и тогда будет наглядно видно кто и как активен. Да имена файлов также формируются используя шаблон:

Результаты визуализации логов полученных программой
Code_swarm
- Центральная точка в круге (или центр круга) — пост.
- Подсвеченные точки — комментарии, плюсы, решары.
У каждой точки есть уникальное имя, соответствующее пользователю, который его оставил, поэтому некоторые точки крупней и летают от поста к посту — этот активный пользователь.
Gource
- Сиреневые точки — решары.
- Салатовые точки — комментарии.
- Бирюзовые точки — плюсы.
- Точка между тремя ветвями — пост.
Результат
Очередной раз убедился, что для изучения какой либо технологии необходимо себя замотивировать, в данном случае мотивацией выступает наглядное представления проанализированных данных, что в моем случае очень стимулирует. В планах изучение Google Analytics и тоже планирую делать визуализация полученной статистики, если есть у кого наработки по данному вопросу можете поделиться, так же интересны api last.fm.
Ваши вопросы, замечания жду в комментариях.
UPD: Как и обещал в комментариях, добавил генерацию лога для logstalgia. Вот результаты визуализации: