每日統計 OffSec 全球排行榜中,台灣(TW)與全球帳號的公開證照資料,並以 GitHub Pages 呈現持有人數及歷史趨勢。全球頁面另提供可拖曳旋轉的互動地球,顯示各國帳號分布。部署時會預先產生完整 HTML,讓搜尋引擎不必執行 JavaScript 就能讀到主要統計內容。
下圖由每日更新流程重新產生,呈現最新快照中持有人數最多的五種證照:
目前歷史資料從 2026-09-29 開始累積;快照增加後,圖表會逐日連成趨勢線。
每日追蹤 OffSec 全球排行榜中台灣帳號的公開證照數量,保存歷史快照並以 GitHub Pages 呈現趨勢。
- 每天抓取台灣累計排行榜資料,統計各證照列出的帳號數。
- 每天分頁擷取完整全球排行榜,彙總各國帳號與證照人數;全球資料獨立保存在
data/global-snapshots.json。 - 以互動地球依國家顯示全球持有人數,支援拖曳旋轉、縮放及點選國家查看證照統計。
- 以國名下拉選單快速選擇國家或地區,並同步查看地圖與證照統計。
- 將未設定國家的帳號獨立列出,並提示國別證照數會受個人檔案設定影響。
- 全球頁面以英文呈現,並支援繁體中文、日文切換。
- 全球頁面載入時用 ipapi.co 判斷瀏覽者國家並預選;ipapi.co 會收到瀏覽者公開 IP,手動選擇不會被覆蓋。
- 顯示 OffSec 台灣帳號總數、至少擁有一張證照的帳號數、證照種類及持有人數趨勢。
- 列出所有公開證照的 Badge 圖片與持有人數。
- 以階梯排行榜突顯持有證照張數最多的前三個台灣帳號。
- 使用台北時區記錄每日快照;同一天重跑會更新當日資料,不會新增重複日期。
- 保留 Git 歷史,不需要資料庫或 API 金鑰。
data/snapshots.json 保存台灣歷史,data/global-snapshots.json 保存全球及各國的彙總歷史。全球快照不保存完整帳號明細。每日 GitHub Actions 工作流程更新兩個 JSON,並依台灣歷史重繪 assets/certificate-trends.svg,再一併提交;GitHub Pages 隨後重新部署兩個頁面。
第一次執行會建立第一筆快照。本專案已在 2026-09-29(台北時間) 建立起始快照;之後每次成功執行會累積一個新的日期,形成趨勢資料。
- 在 GitHub 建立新的 repository,將本專案推送到
main分支。 - 開啟 repository 的 Settings → Pages,將 Build and deployment 的來源設為 GitHub Actions。
- 確認 repository 的 Actions 有權限提交內容:進入 Settings → Actions → General → Workflow permissions,選擇 Read and write permissions。
- 推送到
main後,Deploy to GitHub Pages工作流程會發布網站。每日資料更新成功後也會觸發重新部署。
網站網址通常是 https://<GitHub 帳號>.github.io/<repository 名稱>/。在 Settings → Pages 可查看實際網址。
.github/workflows/daily-update.yml 設定於每天 08:00 與 20:00(Asia/Taipei) 執行,也可以從 repository 的 Actions 頁面手動執行。更新流程會:
- 從 OffSec Portal 取得台灣累計排行榜,並逐頁擷取完整全球排行榜。
- 依排行榜帳號彙總證照持有人數、國家分布及持有證照張數最多的台灣帳號。
- 更新台灣與全球各自歷史檔中的今天快照並提交變更。
- 成功完成後觸發 GitHub Pages 重新部署,產生含最新統計的兩個 HTML 頁面、
sitemap.xml和robots.txt。
全球快照以實際取得並去重的帳號作為統計值,並另外保留 API 回報的排行榜總數,方便檢視分頁期間排行榜變動造成的差異。
python3 scripts/update_data.py
python3 scripts/update_global_data.py- 台灣資料來自 OffSec Portal 公開全球排行榜 API,篩選
countryCode=TW;全球資料使用相同 API,但不套用國家篩選。兩者皆使用timeFilter=ALL_TIME。 - 統計的是排行榜帳號
credentials欄位中列出的證照,不等同 OffSec 官方完整持證人數。 - 一個帳號可以列出多張證照,因此各證照人數加總會高於持有至少一張證照的帳號數。
- 排行榜成員、國家設定或 API 欄位改變,都可能造成每日數字變動。
- 全球排行榜在分頁抓取期間可能持續更新,因此快照也記錄 API 回報總數,供核對實際取得的去重帳號數。
- 此 API 未公開文件,若 API 格式改變,更新工作流程可能需要調整。
.
├── .github/workflows/
│ ├── daily-update.yml # 每日抓取與提交快照
│ └── pages.yml # GitHub Pages 部署
├── data/snapshots.json # 每日歷史資料
├── data/global-snapshots.json # 全球與各國彙總歷史資料
├── assets/certificate-trends.svg # README 每日趨勢圖
├── scripts/update_data.py # API 擷取與統計
├── scripts/update_global_data.py # 全球分頁擷取與各國彙總
├── scripts/render_site.py # 產生預先渲染的 HTML 與 sitemap
├── scripts/render_global_site.py # 產生全球頁面與國家排行
├── app.js # 儀表板呈現與趨勢圖
├── global.js # 互動地球與全球統計
├── global.html # 全球證照頁面
├── index.html # 網站頁面
├── global.css # 全球頁面樣式
└── style.css # 共用網站樣式