GitHub и самый продуктивный день
3 апреля 2014 PHP 9771 просмотр
Всем нравятся красивые графики. Поэтому иногда я люблю заходить на GitHub в свои репозитории и смотреть их графики по количеству коммитов, количеству новых файлов и т.д. А тут мне захотелось узнать в какой день я делаю больше всего коммитов. Скорее всего, это и можно назвать самым продуктивным днем. Итак, напишем скрипт, который поможет это сделать.

В GitHub есть стандартная страница, на которой можно посмотреть активность по дням, но только за определенный промежуток, а не за всё время существования репозитория. Эти данные сам GitHub получает асинхронным запросом, который возвращает JSON.

Ссылка на этот запрос - https://github.com/{owner}/{repo}/graphs/commit-activity-data. Где {owner} и {repo} - имя создателя репозитория и название.

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

У GitHub есть API, его и будем использовать, для простоты примера будем использовать Basic Auth. Получим данные с сервера GitHub при помощи CURL. В первых четырех переменных будут ваши личные данные для доступа к статистике.
$username = '';
$password = '';
$owner    = '';
$repo     = '';
$url      = "https://api.github.com/repos/$owner/$repo/stats/commit_activity";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0');

$content = curl_exec($ch);
curl_close($ch);
$data = json_decode($content);

$days = array();
foreach ($data as $week) {
    foreach ($week->days as $dayKey => $day) {
        $days[$dayKey] = isset($days[$dayKey]) ? ($days[$dayKey] + $day) : $day;
    }
}

print_r($days);
В массиве $days будут все дни с количеством коммитов, причем ключ 0 - это воскресенье. В проекте Tuffle у меня самый продуктивный день - Среда. Интересно, какие самые продуктивные у вас.