Как мы считаем тренды GitHub
Открытая методика: откуда данные, почему прирост звёзд — оценка и как отсеивается накрутка.
Откуда берутся данные?
Из GH Archive — открытого архива, который каждый час сохраняет публичные события GitHub. Звезда в нём — событие WatchEvent. Описание, язык и точный счётчик звёзд берём из API GitHub.
Почему прирост звёзд — оценка, а не точное число?
GitHub больше не отдаёт историю звёзд: через API нельзя узнать, кто и когда поставил звезду. Архив событий с осени 2025 года ловит лишь часть звёзд, и эта доля меняется от часа к часу. Поэтому звёзды репозитория мы делим на все звёзды в архиве за тот же час и умножаем на ожидаемое число звёзд на всём GitHub. Объём GitHub калибруем по молодым репозиториям: их точный счётчик сравниваем с тем, что насчитала выборка. Места в рейтинге от этой поправки не меняются. Проверка на репозиториях, созданных за последние три месяца: у проектов с тысячами звёзд оценка в трёх случаях из четырёх расходится с точным счётчиком не больше чем на 25%, у небольших проектов разброс заметно больше.
Как отсеивается накрутка?
У каждой звезды известен номер аккаунта, а номера на GitHub выдаются по порядку. По ним мы оцениваем возраст аккаунта. Если больше половины звёзд репозитория поставили аккаунты моложе месяца, он не попадает в рейтинг. Так отсекаются раздачи «крякнутых» программ и купленные звёзды.
Что такое взлёт?
Репозиторий за 6 часов набрал не меньше 250 звёзд, и это в 8 и более раз быстрее его обычного темпа за предыдущие две недели.
Как часто обновляется рейтинг?
Сутки, неделя и месяц — каждый час, как только в архиве появляется новый час событий. Три месяца — раз в шесть часов.
Можно ли использовать данные?
Да, данные открыты. Есть JSON API и RSS-лента взлётов, ссылка на источник приветствуется.
Текущая калибровка: около 332 750 звёзд в сутки на всём GitHub.
Открытый API
Без ключа, CORS открыт. Ответ — JSON.
GET https://github.royalty-analytics.ru/api/trends?period=month&kind=top&lang=python&limit=100
period: day, week, month, 3m. kind: top, rising, new. lang — слаг языка из адреса страницы, необязательно. limit — до 500.
GET https://github.royalty-analytics.ru/api/spikes?days=7
Взлёты за последние дни, до 30. RSS-лента: https://github.royalty-analytics.ru/feed.xml.