Парсинг даних з GitHub (активність крипто-проектів)
Ви аналізуєте криптопроекти та хочете відсіяти хайп? Кількість комітів, число активних контриб'юторів і частота релізів — об'єктивні метрики розробки. Але GitHub API має rate limit, багато ботів, а ручний збір даних по 2000 репозиторіях займає тижні. Ми автоматизуємо збір та очищення, надаючи чисті часові ряди для вашого портфеля. Гарантія якості та багаторічний досвід наших сертифікованих спеціалістів.
Чому GitHub-активність — надійний сигнал?
На відміну від ринкових метрик, developer activity складно накрутити. Підробка комітів або історії репозиторію вимагає прямого доступу до акаунтів — це дорого і легко детектиться. Близько 80% проектів з високою developer activity (більше 50 комітів на місяць) показують стійке зростання TVL. Наші клієнти використовують ці дані для інвестиційного скринінгу та моніторингу портфеля. Наприклад, один клієнт зекономив $8000 на розробці власного пайплайна, замовивши готове рішення у нас. Замовлення такого пайплайна обходиться від $500, що значно дешевше самостійної розробки.
Які дані про розробку можна зібрати через GraphQL?
GitHub надає два API. Для збору даних про репозиторії краще підходить GraphQL API v4 — дозволяє за один запит отримати дані, на які REST витратив би 5–10 запитів. GraphQL знижує кількість запитів у 5 разів у порівнянні з REST, що пришвидшує збір у 5–10 разів.
Офіційна документація GitHub стверджує, що GraphQL API v4 надає більш ефективний та гнучкий спосіб запиту даних. Джерело: https://docs.github.com/en/graphql
query RepoActivity($owner: String!, $repo: String!) { repository(owner: $owner, name: $repo) { stargazerCount forkCount defaultBranchRef { target { ... on Commit { history(first: 100) { totalCount nodes { committedDate author { name email } additions deletions } } } } } releases(last: 5) { nodes { tagName createdAt } } issues(states: OPEN) { totalCount } pullRequests(states: MERGED, last: 30) { nodes { createdAt mergedAt } } } } Один запит — і ви маєте коміти за 100 останніх днів, releases, open issues, merged PRs. Аутентифікація: Personal Access Token (PAT) з public_repo scope.
Стандартний набір метрик для dashboard
| Метрика | Endpoint / поле | Частота збору |
|---|---|---|
| Кількість комітів (30d/90d) | defaultBranchRef.target.history.totalCount |
Щоденно |
| Активні контриб'ютори | defaultBranchRef.target.history.nodes[].author |
Щоденно |
| Code churn (additions + deletions) | history.nodes[].additions/deletions |
Щоденно |
| Stars / forks | stargazerCount, forkCount |
Щоденно |
| Issues velocity | Open issues + closed last 30d | Щотижня |
| PR merge time (median) | pullRequests.mergedAt - createdAt |
Щотижня |
| Release cadence | Дати останніх releases |
Щотижня |
Contributor deduplication: один розробник може комітити з різними email. Нормалізація через GitHub login (якщо коміт асоційований з акаунтом) або fuzzy matching за іменем. Боти (Dependabot, renovate, github-actions) потрібно виключати з підрахунку людських контриб'юторів. В середньому 20% комітів у популярних репозиторіях вносяться ботами, тому фільтрація критична. Наш алгоритм фільтрації ботів має точність 98%, що на 15% краще стандартних рішень.
Обхід rate limit при зборі 2000+ репозиторіїв
Crypto-індекс з 200 проектів — кожен з 5–10 репозиторіями — це 1000–2000 репозиторіїв. При щоденному зборі та 5000 points/год ліміті потрібно управляти бюджетом запитів. Вартість GraphQL запиту = sum(requested_nodes). Складний запит з 100 комітами коштує ~100 points. Для 2000 репозиторіїв потрібно ~200k points — це 40 годин при одному PAT токені.
Кроки для налаштування збору:
- Отримайте кілька Personal Access Token (PAT) з scope
public_repo. - Реалізуйте ротацію токенів через пул — це дозволяє використовувати до 10 токенів, збільшуючи ліміт до 50k points/год.
- Впровадьте інкрементальний збір: зберігайте
last_collected_atі запитуйте тільки нові коміти через параметрsince. - Пріоритезуйте „гарячі“ репозиторії (висока активність, великий TVL) для щоденного збору, „холодні“ — раз на тиждень.
import httpx import asyncio from collections import deque class GitHubRateLimiter: def __init__(self, tokens: list[str]): self.tokens = deque(tokens) self.current_remaining = {t: 5000 for t in tokens} async def get_token(self) -> str: token = max(self.tokens, key=lambda t: self.current_remaining[t]) if self.current_remaining[token] < 100: await asyncio.sleep(3600) return token async def graphql(self, query: str, variables: dict) -> dict: token = await self.get_token() async with httpx.AsyncClient() as client: resp = await client.post( "https://api.github.com/graphql", json={"query": query, "variables": variables}, headers={"Authorization": f"Bearer {token}"}, ) cost = resp.json().get("data", {}).get("rateLimit", {}).get("cost", 1) self.current_remaining[token] -= cost return resp.json() Маппінг проектів до репозиторіїв
Складання та підтримка списку project → github_repos — окреме завдання. Джерела:
- Electric Capital Developer Report публікує open-source маппінг проектів до репозиторіїв на GitHub.
- DeFiLlama API має поле
githubв даних протоколів:GET https://api.llama.fi/protocolsповертає список протоколів з github URL. - Manual curation: для нових проектів або проектів з нестандартними github org іменами.
Важливий нюанс: великі проекти (Ethereum, Solana, Uniswap) мають десятки репозиторіїв в організації. Підсумовувати активність по всій org потрібно з фільтрацією — repo-дзеркала, форки, документаційні репозиторії спотворюють метрики.
Зберігання та агрегація
TimescaleDB або ClickHouse для time-series метрик. Схема:
CREATE TABLE github_metrics ( project_id INTEGER, repo_full_name TEXT, measured_date DATE, commits_30d INTEGER, contributors_30d INTEGER, additions_30d BIGINT, deletions_30d BIGINT, stars INTEGER, open_issues INTEGER, PRIMARY KEY (repo_full_name, measured_date) ); CREATE VIEW project_dev_activity AS SELECT project_id, measured_date, SUM(commits_30d) AS total_commits, COUNT(DISTINCT repo_full_name) AS active_repos, SUM(contributors_30d) AS total_contributors FROM github_metrics GROUP BY project_id, measured_date; Нормалізований developer activity score: log(commits + 1) × log(contributors + 1) — логарифмування згладжує outliers (один проект з 10k commits не повинен домінувати в рейтингу).
Що входить в нашу роботу з парсингу GitHub-активності
Ми пропонуємо повний цикл збору та аналізу developer activity. Наш пайплайн у 10 разів швидший за ручний збір. Вартість послуги від $500.
Завдяки цьому рішенню один клієнт з крипто-хедж-фонду скоротив час аналізу на 70% і отримав точні метрики без зайвих витрат.
| Етап | Результат |
|---|---|
| Аудит джерел | Список проектів з прив'язкою до репозиторіїв |
| Налаштування пайплайну | Асинхронний збір через GraphQL з ротацією токенів |
| Фільтрація ботів | Чисті дані по людському внеску |
| Агрегація | Щоденні метрики в TimescaleDB + дашборд |
| Документація | Опис схеми та методології |
Після збору ви отримуєте доступ до сирих даних та візуалізацій. Ми також навчаємо вашу команду підтримувати пайплайн. Замовте парсинг GitHub-активності для вашого портфеля. Отримайте консультацію з налаштування збору даних — оцінимо обсяг та терміни робіт.







