Мой блог
Утилита для статистики скачиваний релизов GitHub в одном файле
Интерфейс платформы GitHub показывает пользователям общую информацию о репозиториях, включая количество звезд и форков, однако точные данные о загрузках файлов из релизов по умолчанию остаются скрыты. Подобная статистика зафиксирована в API в поле download_count для каждого отдельного файла, но для отслеживания этих показателей по всем личным проектам с сохранением истории потребовалось разработать специализированную компактную winforms-утилиту на C#.
Инструмент для сбора статистики скачиваний релизов распространяется в виде исходного кода и готового исполняемого файла, работая под управлением операционной системы Windows без необходимости устанавливать дополнительные среды разработки или громоздкие пакеты.


Откуда берутся данные для утилиты
Процесс сбора информации строится на использовании REST API платформы. Программа выполняет запросы к эндпоинтам для получения списка репозиториев с базовыми параметрами вроде описания, языка, звезд и форков, а также запрашивает релизы, где в массиве активов содержится искомый счетчик скачиваний.
В процессе обработки форки репозиториев и находящиеся в статусе черновиков релизы автоматически пропускаются. При наличии токена доступа задействуются дополнительные запросы к разделам просмотров, клонирований и источников трафика, что позволяет дополнительно фиксировать посуточные статистические показатели.
Ограничения подсчета
Стоит учитывать, что счетчик API учитывает загрузки исключительно прикрепленных к релизам файлов. Стандартное скачивание исходного кода в архиве, клонирование репозитория через Git или использование кнопки загрузки архива на главной странице репозитория в эту статистику не попадают, выступая лишь нижним порогом оценки реальной аудитории программного продукта.
Лимиты запросов к API и ограничения
Без использования персонального токена авторизации разработчики GitHub предоставляют лимит в шестьдесят запросов в час для одного IP-адреса. Каждое обновление списка проектов требует базового набора запросов плюс по одному запросу на каждый отдельный репозиторий для проверки релизов.
Интеграция токена увеличивает лимит до пяти тысяч запросов, однако сбор детальной статистики трафика добавляет еще по три запроса на проект. Программа отслеживает служебные заголовки ответа сервера для контроля оставшегося лимита и времени сброса, выводя предупреждения в строке состояния.
Права доступа и безопасность
Для корректного сбора данных о посещениях и трафике требуется использовать персональный токен с ограниченными правами на чтение административной информации. Если сервер возвращает ошибки доступа, программа продолжает корректно отображать базовые данные релизов без прекращения работы.
Ведение истории скачиваний
Интерфейс GitHub предоставляет исключительно текущее значение счетчиков без возможности запросить ретроспективные данные за прошлые периоды. Для решения этой задачи утилита после каждого успешного сканирования сохраняет локальный снимок состояния в специальный файл истории в каталоге пользовательских данных.
Локальные снимки фиксируют общие показатели загрузок, данные по отдельным проектам, количество звезд, форков и подписчиков. Запись добавляется только при реальном изменении показателей, формируя базу данных для построения графиков роста и вычисления динамики за различные временные интервалы.
Платформа разработки и компиляция
Для создания портативного решения без использования среды Visual Studio был выбран стандартный инструмент .NET Framework, который изначально присутствует в операционных системах Windows десятой и одиннадцатой версий. Встроенный компилятор позволяет осуществлять сборку с помощью одной команды в терминале.
В качестве основы используется пятая версия языка C#, что накладывает определенные ограничения на синтаксис — в коде отсутствуют современные операторы интерполяции строк и проверки на null. Для разбора формата JSON применяется стандартный класс из системных библиотек без привлечения сторонних зависимостей.
Особенности реализации и технические ловушки
При разработке приложения разработчик столкнулся с несколькими системными нюансами, потребовавшими программных обходов. В частности, для корректного соединения с удаленным сервером потребовалось принудительно активировать защищенный протокол передачи данных.
Безопасность и хранение данных
Авторизационный токен пользователя шифруется с использованием системных средств защиты текущей учетной записи Windows и сохраняется в реестре. Расшифровать эти данные способна исключительно та же самая учетная запись на конкретном компьютере.
Графический интерфейс
Окно приложения и разделы дашборда отрисовываются вручную через графические примитивы на холсте для достижения высокой производительности. Таблица проектов оптимизирована с помощью двойной буферизации, а система интернационализации поддерживает динамическое переключение языков интерфейса и локализацию числовых форматов “на лету”.
Результаты разработки и доступность
Итоговая утилита объединяет несколько информативных разделов, включая общую сводку с графиком роста, таблицу проектов с динамическими спарклайнами, детальную разбивку релизов по типам файлов, а также разделы аналитики трафика и исторической динамики.
Исходный код проекта, состоящий из единственного файла реализации, а также готовый исполняемый архив программы для операционной системы Windows доступны на профильной странице репозитория на GitHub.

