Я обожаю данные! По большей части я люблю программирование не столько за код, сколько за то, что код оперирует огромным количеством разнообразных данных и переменных. Я люблю оптимизировать данные, структурировать и логически организовывать. Возможно мне надо было пойти в Data Scientists, но я знаю свои ограничения – не хватает сильной математической базы и знания инструментов для анализа статистических данных
Тем не менее я обожаю наблюдать за разного рода графиками, анализировать их и находить паттерны. Возьмём, например, данные об активности в GitLab. Они хранятся всего 2-3 года, что для меня неудобно – мне бы хотелось наблюдать активность по годам. Для этих целей я и создал следующий скрипт. Совершенно примитивный код, который просто берёт данные и конвертирует их в CSV. Запускайте регулярно и вы тоже сможете иметь такую красивую инфографику
Зачем это надо? Ну… Я могу сразу посмотреть все 9 лет работы в компании (да, я не сразу додумался до скрипта, так что первый год безвозвратно потерян). Могу посмотреть когда у меня случилось выгорание, когда я от него оправился и вернулся в компанию, переработки и отпуска. В конце концов это просто интересная часть моей жизни
<?php /** @noinspection PhpUnnecessaryFullyQualifiedNameInspection */
require_once __DIR__.'/vendor/autoload.php';
// const GITLAB_API_URI = ;
// const GITLAB_API_TOKEN = ;
// const GITLAB_USER_ID = ;
try {
$client = new Gitlab\Client();
$client->setUrl(GITLAB_API_URI);
$client->authenticate(GITLAB_API_TOKEN, Gitlab\Client::AUTH_HTTP_TOKEN);
$eventsArray = [];
$page = 1;
$fetched = 0;
while (!isset($events) || !empty($events)) {
$events = $client->users()->events(GITLAB_USER_ID, [
'page' => $page,
'per_page' => 50,
]);
$fetched += \count($events);
foreach ($events as $event) {
$creationDate = new \DateTimeImmutable($event['created_at']);
$createdAt = $creationDate->format('Y-m-d');
$eventsArray[$createdAt] = ($eventsArray[$createdAt] ?? 0) + 1;
unset($creationDate);
}
echo \sprintf('Page: %d', $page).PHP_EOL;
$page++;
}
echo \sprintf('Fetched: %d', $fetched).PHP_EOL;
// \file_put_contents(
// __DIR__.'/events.json',
// \json_encode(\array_map(function ($value, $key) {
// return ['date' => $key, 'count' => $value];
// }, \array_values($eventsArray), \array_keys($eventsArray)))
// );
$eventsCSV = 'date,value'.PHP_EOL;;
foreach ($eventsArray as $date => $count) {
$eventsCSV .= $date.','.$count.PHP_EOL;
}
\file_put_contents('events_fetched.csv', $eventsCSV);
return 0;
} catch (\Throwable $throwable) {
echo \sprintf('Error: %s', $throwable->getMessage());
return 1;
}
{
"type": "project",
"license": "CC-BY-4.0",
"minimum-stability": "stable",
"prefer-stable": true,
"require": {
"php": ">=7.4",
"ext-json": "*",
"m4tthumphrey/php-gitlab-api": "^11.4",
"guzzlehttp/guzzle": "^7.2",
"http-interop/http-factory-guzzle": "^1.0"
}
}