這份專案 global-stock-data-warehouse 是 stock-reminder-bot 的進階資料後援庫。如果說之前的 Bot 是「傳令兵」,這套系統就是「軍械庫」,負責儲存、同步全球市場(台、美、港)的歷史數據。

在進行量化分析或技術指標篩選時,「資料的穩定性」是成敗關鍵。許多投資人常遇到 API 限制或連線中斷的問題,這套專案正是為了解決這些痛點而生。它不僅能自動爬取全球股市資料,還能將數據結構化儲存在 SQLite 並同步至雲端。
🏗️ 核心架構與程式碼功用
這個儲存庫的設計非常模組化,每個檔案各司其職:
1. main.py — 系統指揮官 (The Orchestrator)
這是整個專案的入口點。
- 功用:負責接收指令(如
python main.py tw),決定現在要抓取哪個市場的資料。 - 邏輯:它會調用
crawler.py獲取清單,並啟動多執行緒下載任務,最後將結果彙整到資料庫中。
2. crawler.py — 資料採集員 (The Web Scraper)
資料庫的源頭。
- 功用:針對不同市場進行「掃描」。例如,它會去公開資訊站或證交所抓取最新的台股成份股、港股清單或美股代碼。
- 技術點:它處理了不同交易所的格式差異,確保輸出的代號格式(如
2330.TW或0700.HK)能直接被後續模組讀取。
3. database.py — 倉儲管理員 (Database Manager)
負責 SQLite 的讀寫邏輯。
- 功用:定義資料表的結構(Schema),確保每一筆歷史股價(開高低收、成交量)都能正確存放。
- 重要性:它確保了數據的一致性,並提供查詢接口,讓
stock-reminder-bot可以快速讀取歷史資料進行 KD 或 MACD 計算。
4. sync_manager.py — 雲端同步專家 (Cloud Sync Specialist)
這是處理 403 錯誤與 GH_PAT 的關鍵核心。
- 功用:負責將本地端跑完的
.db資料庫檔案上傳至 Google Drive 或 GitHub Repo 作為備份。 - 技術挑戰:
- Google Drive API:處理服務帳戶 (Service Account) 的空間配額與權限驗證。
- GH_PAT:利用 GitHub Token 將資料庫推送到私有倉庫,實現「異地備援」。
5. settings.py — 總部秘書 (Config Settings)
管理所有敏感資訊。
- 功用:統一讀取環境變數(Environment Variables),包含
TELEGRAM_TOKEN、GOOGLE_CREDENTIALS以及我們提到的GH_PAT。
💡 為什麼要將資料「倉庫化」?
比起每次執行 Bot 都重新向 Yahoo Finance 抓取資料,建立資料倉庫有三大好處:
- 突破限制:避免頻繁請求 API 導致 IP 被鎖(Rate Limit)。
- 速度極快:Bot 讀取本地 SQLite 資料庫的速度遠快於網路請求。
- 數據回測:有了完整的
.db檔案,你可以隨時進行歷史策略回測,而不僅僅是接收即時通知。
🛠️ 技術筆記:關於 403 錯誤與 GH_PAT
在架設過程中,許多網友會遇到 HttpError 403 的問題。這通常與 Google 服務帳戶 (Service Account) 的儲存空間限制有關。服務帳戶本身沒有 15GB 的免費空間,因此它必須將檔案「寫入」到你共用給它的資料夾中。
同時,為了讓資料庫能安全地同步到 GitHub 私有儲存庫,我們必須配置 GH_PAT (Personal Access Token)。這張「數位通行證」確保了你的敏感數據能被加密傳輸且不對外公開。
💬 交流與回饋
目前這套系統已能穩定運行全球市場的資料同步,但在 Google Drive API 的配額管理上,仍有一些優化空間。
如果有網友在處理「服務帳戶空間配額 (Storage Quota)」或「GitHub Actions 自動同步資料庫」有更優雅的解法,還望不吝告知、指點迷津!歡迎在下方留言一起交流技術心得。
🚀 相關連結
- 本專案 GitHub 倉庫: