Как мы считаем тренды 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.