使用 Go 實作「GitHub 排名系統」(一)

前言

本專案使用 Go 實作了一個 GitHub 排名系統,雖然以下網站都可以查詢 GitHub 排名,但是它們各自存在一些問題。

  1. GitHub Advanced Search

利用 GitHub 本身的進階查詢功能,可以查詢到像是使用者的追蹤者數量排名。優點是資料即時且正確,但缺點是有些特殊排名是查詢不到的,例如使用者儲存庫的星星總數的排名。畢竟 GitHub 的進階查詢主要是用來查找特定資源的,而不是用來查看排名的。

  1. Gitstar Ranking

Gitstar Ranking 是一個專門做 GitHub 排名的網站。這個網站的優點是介面簡單清楚。但是它只提供星星總數的排名,而且有廣告干擾。

  1. Git Awards

Git Awards 也是專門做 GitHub 排名的網站。優點是提供程式語言加上使用者地理位置的排名,例如可以查到台灣的 GitHub 使用者以 PHP 為主要語言的儲存庫星星總數的排名,但是缺點是所有的排名都是基於程式語言去做分類後排名的,而且一般使用者和組織的排名是混在一起的。

因此,本專案希望實作一個可以根據不同條件來做 GitHub 排名的網站。

排名內容

對象

為了減輕系統負擔,並過濾掉一些不合適的帳號,不同的排名對象在蒐集時會設下一些門檻。排名對象有以下三種:

  1. 一般使用者(user):追蹤者數量須大於 250 名,儲存庫數量須在 1,000 個以內。
  2. 組織(organization):儲存庫數量須介於 25 到 1,000 個之間。
  3. 儲存庫(repository):星星數量須大於 100 個以上,無論是否為複製(fork)的儲存庫。

如果一般使用者因為追蹤者數量不到 250 個,或是組織的儲存庫數量超過 1,000 個,可以透過將帳號添加到特殊名單的方式讓系統做排名。

時間範圍

2007 年 10 月 1 日至今。

項目

一般使用者

至 2021 年 3 月 1 日為止,符合排名門檻的一般使用者約有 16,500 個。排名項目有以下:

  • 追蹤者(follower)總數排名
  • 追蹤者總數依使用者地理位置排名
  • 儲存庫星星(stargazer)總數排名
  • 儲存庫星星總數依使用者地理位置排名
  • 儲存庫星星總數依主要程式語言排名
  • 儲存庫關注者(watcher)總數排名
  • 儲存庫關注者總數依使用者地理位置排名
  • 儲存庫關注者總數依主要程式語言排名
  • 儲存庫複製(fork)總數排名
  • 儲存庫複製總數依使用者地理位置排名
  • 儲存庫複製總數依主要程式語言排名
  • 程式碼片段(gist)星星總數排名
  • 程式碼片段星星總數依使用者地理位置排名
  • 程式碼片段複製總數排名
  • 程式碼片段複製總數依使用者地理位置排名

組織

至 2021 年 3 月 1 日為止,符合排名門檻的組織約有 55,400 個。排名項目有以下:

  • 儲存庫星星總數排名
  • 儲存庫星星總數依組織地理位置排名
  • 儲存庫星星總數依主要程式語言排名
  • 儲存庫關注者總數排名
  • 儲存庫關注者總數依組織地理位置排名
  • 儲存庫關注者總數依主要程式語言排名
  • 儲存庫複製總數排名
  • 儲存庫複製總數依組織地理位置排名
  • 儲存庫複製總數依主要程式語言排名

儲存庫

至 2021 年 3 月 1 日為止,符合排名門檻的組織約有 224,000 個。排名項目有以下:

  • 星星總數排名
  • 星星總數依主要程式語言排名
  • 關注者總數排名
  • 關注者總數依主要程式語言排名
  • 複製總數排名
  • 複製總數依主要程式語言排名

週期

三種類型的排名都是每週更新一次資料、排名一次。

技術架構

  • 資料:GitHub GraphQL API

  • 後端:Go。

  • 資料庫:MongoDB。

  • 前端:JavaScript、Vue。

  • UI:Vuetify。

  • 主機:1 CPU Core、1 GB RAM 的 Ubuntu 20.04 LTS 虛擬主機。

  • 網頁伺服器:Caddy。

網站

程式碼