Skip to main content

top-github-users-ref

gayanvoice/top-github-users 架構參考指南。當需要了解 GitHub 使用者排行榜的資料抓取管線、國家設定、排行計算邏輯、已知問題、或社群需求時使用。

الانتقال إلى التثبيت

معلومات المصدر

المستودع
recca0120/codeatlas
آخر نشاط في المصدر
٢٨ مارس ٢٠٢٦ في ٠٣:١٥
لغة SKILL.md المكتشفة
الصينية
النجوم
١
التفرعات
٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
top-github-users-ref
description
gayanvoice/top-github-users 架構參考指南。當需要了解 GitHub 使用者排行榜的資料抓取管線、國家設定、排行計算邏輯、已知問題、或社群需求時使用。
# top-github-users 架構參考 + 社群回饋 ## 資料抓取管線(從原始碼分析) ### 搜尋策略 - **GraphQL Search API**(非 REST)— 使用 `search(type: USER)` 查詢 - **所有 locations 合併成一個 query** — `location:Taiwan location:Taipei sort:followers-desc` - **Cursor-based 分頁** — 用 `hasNextPage` + `endCursor` 遍歷所有結果,不限固定頁數 - **每頁 10 筆**(`first: 10`),透過 cursor 持續取得直到沒有下一頁 ### 單次 GraphQL 取得所有欄位 一次查詢即取得:`login`、`avatarUrl`、`name`、`location`、`company`、`twitterUsername`、`followers.totalCount`、`contributionsCollection.contributionCalendar.totalContributions`、`contributionsCollection.restrictedContributionsCount` **重點**:不需要逐人打 REST API 取 profile,效率遠高於 REST Search + 逐人 REST profile + 逐人 GraphQL contributions 的三步驟做法。 ### Rate Limit 策略 - **隨機延遲 1-5 秒** — 每頁請求之間加入 `randomIntFromInterval(1000, 5000)` 延遲 - **錯誤重試** — 失敗時等待 60 秒,最多容許 4 次錯誤(`MAXIMUM_ERROR_ITERATIONS`)後停止 - **Checkpoint 機制** — 每次 cron 只處理一個國家(checkpoint),避免一次跑完所有國家撞 rate limit ### 資料保護 - **最低 750 筆保護** — 如果新抓的結果比快取少,且低於 750 筆,視為 API 錯誤,不覆蓋快取 - **快取機制** — 每個國家有獨立 cache 檔案,只在確認資料品質後才覆蓋 ### 排序與排名 - 搜尋時依 `followers-desc` 排序 - 產出三種排名:Public Contributions、Total Contributions、Followers ## 與我們的差異比較 | 面向 | gayanvoice | CodeAtlas(目前) | |------|-----------|------------------| | 搜尋 API | GraphQL `search(type: USER)` | REST `search/users` | | 每人 API calls | 1(GraphQL 包含全部欄位) | 3(REST search + REST profile + GraphQL contributions) | | 分頁 | Cursor-based,無上限 | Page-based,上限 10 頁 × 100 = 1000 | | Rate limit | 隨機延遲 1-5s + 錯誤等待 60s | Octokit throttle plugin | | 處理單位 | 一次 cron 跑一個國家(checkpoint) | 一次 cron 跑所有國家(逐國 commit) | | 快取保護 | 有(750 筆最低門檻) | 無 | ## 已知問題(從 Issues 學到的) ### Location 歧義問題(最嚴重) - **Georgia(美國州)vs Georgia(國家)** — #291 - **Granada(西班牙城市)vs Granada(尼加拉瓜)** — #287 - **解決方案**:搜尋時加排除條件,如 `location:Georgia NOT location:"Georgia, US"` 或事後用 country code 過濾 ### Emoji Flag Location — #279 - 有些使用者的 location 設為 flag emoji 如 🇹🇼 - **解決方案**:regex 偵測 flag emoji 並 mapping 到國家 ### Contribution 計算不準 — #281 #295 - GraphQL `totalContributions` 和使用者看到的數字可能不同 - 原因:private repo contributions 計算差異 - **接受此限制**,清楚說明我們的計算方法 ### Username 變更 — #123 - 使用者改名後舊資料不更新 - **解決方案**:每次 cron 重新抓取,不依賴快取的 username ### 使用者遺漏 — #222 #198 - 不理解為何沒被列入 - **解決方案**:建立 FAQ 頁面說明:需要設定 location、需要有足夠 followers/contributions ## 社群最想要的功能 1. **更頻繁更新**(weekly 以上)— 他們的 pipeline 壞了導致資料非常舊 2. **Profile info + top repos** — 目前只有 table,沒有個人資訊 3. **Star-based ranking** — 依總 star 數排名 4. **GitHub Pages 呈現** — 不只是 markdown 檔案 5. **容易新增國家/城市** — 目前需要 PR 改 config.json ## 我們的優勢 | 面向 | top-github-users | CodeAtlas | |------|-------------------|---------| | 呈現 | Markdown 表格 | GitHub Pages 網站 | | 個人資料 | 無 | 語言、repos、bio、social | | 搜尋/過濾 | 無 | 語言/城市/搜尋 | | 更新頻率 | 壞了(~195 天一輪) | 每週 cron | | 新增國家 | 需 PR 改 config.json | 加一個 JSON 檔 | | Theme | 無 | Dark/Light toggle | | 分享 | 有社群按鈕 | 有社群按鈕 + OG image | | 3D | 無 | Globe 地球 |
عرض على GitHub