Всем нравятся красивые графики. Поэтому иногда я люблю заходить на 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 у меня самый продуктивный день — Среда. Интересно, какие самые продуктивные у вас.