social networks analisys - github api
TRANSCRIPT
github
Общая информация
● git – распределенная система управления версиями файлов
● github = git хостинг + социальная сеть● Возможности: issue tracking, wiki, downloads,
code review● Бесплатно для open-source, коммерческий
хостинг для закрытых репозиториев
Модель взаимодействия
Репозиторий – набор файлов исходного кода с историей изменения
Репозитории можно ветвить и соединять ветки вместе. Ветка – это полноценный репозиторий
Соответственно основные понятия – пользователь, репозиторий, ветка
Немного статистики
495 000 человек 1 490 000 репозиториев Известные пользователи:
Twitter, Facebook, Yahoo, jQuery, Ruby on Rails, CakePHP, curl, Rackspace Hosting
API
http://develop.github.com/ Доступ по HTTP и HTTPS Форматы: yaml, json, xml Bindings для C#, Java, Javascript, Perl, PHP,
Python, Ruby Ограничение: не более 60 запросов в час Для вызова некоторых методов необходима
аутентификация
API – пользователи
Поиск пользователей Получение информации о пользователе Получение following и followers Получение списка watched репозиториев
API – репозитории
Поиск репозиториев Получение информации о репозитории Получение списка репозиториев
пользователя Получение списка contributers Получение списка watchers Получение списка forks
API – другие возможности
Organization Issues Gist Commit Object Network
Disclaimer
Все дальнейшие примеры не представляют никакой ценности с точки зрения анализа социальных сетей, но должны помочь понять, каким образом можно анализировать github при помощи его API.
Рейтинг пользователя по репозиториям
Для заданных репозиториев количество коммитов просматриваемые репозитории
http://gist.github.com/742252
Рейтинг пользователей по репозиториям – код
require_once('php-github-api/lib/phpGitHubApi.php');
$github = new phpGitHubApi();
$repositories = array( array('jquery', 'jquery'), array('madrobby', 'scriptaculous'), array('jashkenas', 'coffee-script'), array('yui', 'yui3'), array('sstephenson', 'prototype'), array('mootools', 'mootools-core') );
function add(&$array, $key, $value){ if (!array_key_exists($key, $array)) { $array[$key] = 0; } $array[$key] += $value;}
foreach ($repositories as $repository) { list($user, $reponame) = $repository; echo "Processing repository '$reponame' of user '$user'" . PHP_EOL;
echo 'Getting watchers' . PHP_EOL; $watchers = $github->getRepoApi()->getRepoWatchers($user, $reponame); foreach ($watchers as $watcher) { add($rating, $watcher, 10); } echo 'Getting contributors' . PHP_EOL; $contributors = $github->getRepoApi()->getRepoContributors($user, $reponame); foreach ($contributors as $contributor) { add($rating, $contributor['login'], $contributor['contributions']); }}
asort($rating);
foreach ($rating as $person => $ratingValue) { echo implode(',', array($person, $ratingValue)) . PHP_EOL;}
Рейтинг пользователей по репозиториям – результат
tjcrowder
kassens
arian
fabiomcosta
tripp
nzakas
kamicane
satyr
sstephenson
flesler
tobie
cpojer
brandonaaron
jenny
savetheclocktower
jzaefferer
kloots
rgrove
madrobby
lsmith
davglass
msweeney
sdesai
apm
jeresig
jashkenas
yui
0 500 1000 1500 2000 2500
Связанность репозиториев
Связанность по контрибьюторам Связанность по watcher'ам Скрипт ~100 строк кода: http://gist.github.com/742247
Связанность по контрибьюторам – результат
Связанность
0
0
0
0
0
0
0
2
0
0
1
0
0
0
0
Репозиторий 1 Репозиторий 2
jquery/jquery madrobby/scriptaculous
jquery/jquery jashkenas/coffee-script
jquery/jquery yui/yui3
jquery/jquery sstephenson/prototype
jquery/jquery mootools/mootools-core
madrobby/scriptaculous jashkenas/coffee-script
madrobby/scriptaculous yui/yui3
madrobby/scriptaculous sstephenson/prototype
madrobby/scriptaculous mootools/mootools-core
jashkenas/coffee-script yui/yui3
jashkenas/coffee-script sstephenson/prototype
jashkenas/coffee-script mootools/mootools-core
yui/yui3 sstephenson/prototype
yui/yui3 mootools/mootools-core
sstephenson/prototype mootools/mootools-core
Связанность по watcher'ам - результат
Связанность
375
275
384
377
309
72
118
547
127
56
96
70
131
122
167
Репозиторий 1 Репозиторий 2
jquery/jquery madrobby/scriptaculous
jquery/jquery jashkenas/coffee-script
jquery/jquery yui/yui3
jquery/jquery sstephenson/prototype
jquery/jquery mootools/mootools-core
madrobby/scriptaculous jashkenas/coffee-script
madrobby/scriptaculous yui/yui3
madrobby/scriptaculous sstephenson/prototype
madrobby/scriptaculous mootools/mootools-core
jashkenas/coffee-script yui/yui3
jashkenas/coffee-script sstephenson/prototype
jashkenas/coffee-script mootools/mootools-core
yui/yui3 sstephenson/prototype
yui/yui3 mootools/mootools-core
sstephenson/prototype mootools/mootools-core