【實作教學】自動化全球股市數據倉庫:GitHub Actions 關鍵變數設定與避坑指南

更新 發佈閱讀 14 分鐘
投資理財內容聲明

前言

在建置「全球股市數據倉庫 (global-stock-data-warehouse)」時,自動化流程(GitHub Actions)是核心心臟。許多讀者在設定環境變數時常感到困惑。本篇將跳過基本的通知設定(如 Resend 或 Telegram),直接切入最重要的兩大核心變數,並分享一個能幫你節省數小時除錯時間的「403 錯誤」解決方案。


核心變數設定:讓自動化動起來

在 GitHub 專案的 Settings > Secrets and variables > Actions 中,我們必須準確設定以下兩個 Repository secrets

1. GDRIVE_SERVICE_ACCOUNT (Google Drive 服務帳號金鑰)

這個變數是為了讓 GitHub Actions 有權限將抓取到的數據存上雲端硬碟。

設定重點

這是一串 JSON 格式 的內容。

你需要先在 Google Cloud Console 建立一個「服務帳號 (Service Account)」,並下載其金鑰 JSON 檔。

關鍵步驟:請務必將該 JSON 檔中的 client_email 地址,手動加入到你 Google Drive 存放資料夾的「共用對象」中,並給予「編輯者」權限,否則程式會無法寫入。

將整個 JSON 檔案內容完整複製,貼入 GitHub 的 Secret 欄位。

進入 Google Cloud 控制台:用您的 Google 帳號登入 https://console.cloud.google.com/。 然後搜尋google driver api 點選

vocus|新世代的創作平台

因為已經啟用了 所以點選管理進去

vocus|新世代的創作平台

點選憑證後 建立憑證然後選擇服務帳戶

vocus|新世代的創作平台

如下名稱自訂

vocus|新世代的創作平台

點選剛剛建立的服務帳戶

vocus|新世代的創作平台

建立新的金鑰

vocus|新世代的創作平台

選擇建立josn即可 隨後就會自動下戴json檔案 打開檔案內容就可以複製貼上變數

vocus|新世代的創作平台

然後就可以在github上點選下圖中的Secrets and variables > Actions 後產生新的變數如下圖把剛剛建立的json檔案放在裏頭​

vocus|新世代的創作平台

gooogle driver設定共用分享剛剛建立的帳號

vocus|新世代的創作平台

權限要設定編輯者

vocus|新世代的創作平台


2. GH_PAT (Personal Access Token)

這是你的個人訪問令牌,允許 GitHub Actions 以你的身份執行特定操作(如更新專案或執行特定 Workflow)。

  • 設定重點
    • 前往 GitHub 個人設定的 Developer settings > Personal access tokens (建議使用 Fine-grained tokens)。
    • 權限範圍:至少需要具備 Contents (讀寫) 與 Workflows 的存取權限。
    • 注意:Token 生成後只會顯示一次,請務必妥善保存。若失效或過期,GitHub Actions 將會報錯。

github 點選帳號下方settings

vocus|新世代的創作平台

畫面左邊最底下Developer Settings

vocus|新世代的創作平台

點選Personal access tokens 中的Fine-grained tokens

vocus|新世代的創作平台

點選 Generate new token

vocus|新世代的創作平台

輸入github密碼

vocus|新世代的創作平台

名稱自訂

vocus|新世代的創作平台

點選Only Select repositories 選擇指定的repo

vocus|新世代的創作平台

Permissions 選擇Action ,Contents 和Metadata

vocus|新世代的創作平台

Action和Contents點選read and write 後就可以按Generate token


vocus|新世代的創作平台

出現下圖畫面 Generate token

vocus|新世代的創作平台

就可以複製到如下產生的金鑰,但只會出現這一次,所以要妥善保存

vocus|新世代的創作平台


然後就可以在github上點選下圖中的Secrets and variables > Actions 後產生新的變數如下圖把剛剛建立的token放在第二個變數 如果圖片不清楚可以點選圖片放大

點選圖片會有按鈕可以點選放大

raw-image

raw-image

這樣資料庫更新完畢後就會自動呼叫另外一個repo專案https://github.com/grissomlin/Alpha-Data-Cleaning-Lab


自動更新漲停板和異常報酬清洗的動作

🔑 什麼是 GH_PAT?

GH_PAT 全名為 GitHub Personal Access Token,簡單來說就是一張「GitHub 核發的數位通行證」。它取代了傳統的帳號密碼,讓你的程式(機器人)可以代表你與 GitHub 進行互動。
------------------------------------------------------------------------------------------------------
取得google driver共用資料夾的ID
以及取得共用資料夾ID,在共用資料夾的網址中有一串亂數字串複製後

vocus|新世代的創作平台

然後Setting\Secrets and variables 中的Actions 建立新的New repository secret
建立GDRIVE_FOLDER_ID 變數名稱輸入共用資料夾ID,這樣程式碼才能抓到存放資料庫的資料夾

vocus|新世代的創作平台





🚀 在本專案中的主要用途

stock-reminder-bot 或類似的自動化專案中,GH_PAT 通常扮演以下三個角色:

1. 突破 API 存取頻率限制 (Rate Limiting)

GitHub 對於未驗證的請求(匿名存取)有很嚴格的限制(通常每小時僅 60 次)。

  • 情境:如果你的機器人需要頻繁檢查 GitHub 上的設定檔,或是你的專案會從 GitHub 下載最新的代碼/元件。
  • 用途:使用 GH_PAT 進行身分驗證後,限制會提升到每小時 5,000 次,確保機器人在頻繁執行時不會因為「存取過度」而被 GitHub 暫時封鎖 IP。

2. 存取私有儲存庫 (Private Repo)

  • 情境:如果你的機器人程式碼、技術指標設定或敏感的 .db 資料庫是存放在 私有 (Private) 的 GitHub 倉庫中。
  • 用途:一般的網址存取無法讀取私有內容。GH_PAT 讓部署在 Railway 或 Docker 上的程式擁有「開門」的權力,能順利拉取 (Pull) 這些不對外公開的資料。

3. 自動化更新與回寫資料

  • 情境:有些進階玩法會讓機器人在跑完分析後,自動把結果 commit (提交) 回 GitHub 存檔。
  • 用途:GH_PAT 提供了寫入權限,讓機器人可以自動更新專案內的檔案(例如 last_run.txt 或數據快取),而不需要人工介入。

⚠️ 給讀者的安全提醒

在文章中,務必提醒讀者關於 GH_PAT 的安全性:

  • 不要寫死在程式碼裡:GH_PAT 具有極高權限,如果不小心將含有 Token 的程式碼 push 到公開倉庫,別人就能控制你的 GitHub。
  • 使用環境變數:應將 GH_PAT 設定在 Railway 或 GitHub Actions 的 Secrets (環境變數) 中。
  • 最小權限原則:在申請 PAT 時,只需勾選 repo 相關權限即可,不要開啟不必要的權限(如 delete_repoadmin)。



💡 特別提醒:關於通知系統 (Resend / Telegram)

雖然專案中可以看到 RESEND_API_KEYTELEGRAM_BOT_TOKEN 等變數,但這些屬於「選配」功能。

  • 你可以根據需求二選一(用郵件通知或 Telegram 機器人通知)。
  • 如果你不需要即時通知,甚至可以不設定。關於這部分的設定教學,可以參考我之前的文章 如下有telegram的設定教學

Resend 設定教學



⚠️ 避坑指南:如何解決惱人的 403 錯誤?

vocus|新世代的創作平台


這是在設定此專案時最容易遇到的「隱藏地雷」。

現象:明明變數都設對了,GitHub Actions 執行時卻出現 403 Forbidden 錯誤。

解決方案: 在使用此程式碼進行同步前,你必須先在指定的 Google Drive 資料夾中手動建立一個空的 SQLite 資料庫文件(.db 檔案)

  • 原因:程式在執行初期會嘗試連接或初始化現有的資料庫,若資料夾空無一物,權限校驗或路徑指向可能會觸發 Google API 的安全限制,進而導致 403 錯誤。
  • 做法:在本地端建立一個空的檔案(例如 stock_data.db),先上傳到雲端硬碟指定資料夾中。有了這個「佔位符」,GitHub Actions 就能順利進行後續的寫入與更新。

如下事件利空db的方法

1. Google Colab 版本 (直接下載到電腦)

這段程式碼會在你執行後自動建立六個檔案,並將它們打包成 stock_dbs.zip 自動下載到你的電腦,方便你直接拖拽上傳到 Google Drive。


import sqlite3
import os
from google.colab import files

# 定義六個國家的資料庫名稱
countries = ['US', 'TW', 'JP', 'KR', 'HK', 'EU']
db_files = [f"{country}_stock.db" for country in countries]

# 循環建立空的 .db 檔案
for db_file in db_files:
# 建立連線會自動產生檔案,close 則完成建立
conn = sqlite3.connect(db_file)
conn.close()
print(f"✅ 已建立: {db_file}")

# 打包成 ZIP 並下載
zip_filename = "stock_dbs.zip"
os.system(f"zip {zip_filename} *.db")
files.download(zip_filename)
print("🚀 正在下載 ZIP 檔,解壓縮後上傳至 Google Drive 即可!")



2. VSCode / 本地端終端機版本 (最快一行指令)

如果你在 VSCode 的終端機(Terminal)裡,不需要寫 Python 檔案,直接複製貼上這行 Shell 指令(適用於 Mac/Linux 或 Windows 的 PowerShell/Git Bash):

PowerShell (Windows 預設):

"US", "TW", "JP", "KR", "HK", "EU" | ForEach-Object { New-Item "$($_)_stock.db" -ItemType File }

Bash / Zsh (Mac/Linux/Git Bash):

touch US_stock.db TW_stock.db JP_stock.db KR_stock.db HK_stock.db EU_stock.db

如下圖將空的db檔案放在指定的google driver


vocus|新世代的創作平台



結語

設定自動化流程最難的往往不是寫代碼,而是環境的配置。搞定 GDRIVE_SERVICE_ACCOUNTGH_PAT,並預先準備好空的資料庫檔案,你的全球股市數據監控系統就已經成功了一大半!

目前針對 Google Sheets API 403 Forbidden 的問題,我已嘗試過以下標準流程:

  1. 確保 Google Sheets APIGoogle Drive API 皆已在後台啟用。
  2. 使用 服務帳戶 (Service Account) 並已將 client_email 加為試算表的「編輯者」。
  3. 程式碼中的 Scopes 已包含 Drive 與 Spreadsheets 的讀寫權限。

儘管如此,有時仍會遇到權限阻擋的狀況。如果各位網友或開發前輩知道還有哪些隱藏的設定(例如 Google Workspace 組織權限或特定環境變數衝突)可能導致 403 錯誤,還望不吝告知、指點迷津! 您的建議將是我極大的幫助,非常感謝!


本專案 GitHub 倉庫:




留言
avatar-img
《炒股不看周月年K漲幅機率就是耍流氓》
16會員
290內容數
普通上班族,用 AI 與 Python 將炒股量化。我的數據宣言是:《炒股不做量化,都是在耍流氓》。
你可能也想看
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
在AI浪潮下,009819 中信美國數據中心及電力ETF 直接卡位算力與電力雙主軸,等於掌握AI最核心基建。2008從 Apple Inc. 與 iPhone 帶動供應鏈,到如今AI崛起,主線已由應用端轉向底層。AI發展離不開算力與電力支撐,009819的價值,在於押中「沒有它不行」的核心資產。
Thumbnail
在AI浪潮下,009819 中信美國數據中心及電力ETF 直接卡位算力與電力雙主軸,等於掌握AI最核心基建。2008從 Apple Inc. 與 iPhone 帶動供應鏈,到如今AI崛起,主線已由應用端轉向底層。AI發展離不開算力與電力支撐,009819的價值,在於押中「沒有它不行」的核心資產。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
c文組女生 如何善用 figma 和 GitHub 幸福課程 幸福教練黃老師 潮資訊媒體 社群編輯 文組女生可以善用 Figma 和 GitHub 來提升團隊協作和專案管理的效率。以下是一些建議: #Figma: 設計協作: Figma 是一個協作性極強的設
Thumbnail
c文組女生 如何善用 figma 和 GitHub 幸福課程 幸福教練黃老師 潮資訊媒體 社群編輯 文組女生可以善用 Figma 和 GitHub 來提升團隊協作和專案管理的效率。以下是一些建議: #Figma: 設計協作: Figma 是一個協作性極強的設
Thumbnail
這個自定義的 GitHub CLI 自動完成腳本提升了 `gh repo clone` 指令的使用體驗,支援儲存庫名稱和 `git clone` 選項的自動補全,有效減少輸入錯誤和時間浪費。腳本支援 bash 和 zsh,安裝簡單,並提供詳細的安裝和測試步驟。
Thumbnail
這個自定義的 GitHub CLI 自動完成腳本提升了 `gh repo clone` 指令的使用體驗,支援儲存庫名稱和 `git clone` 選項的自動補全,有效減少輸入錯誤和時間浪費。腳本支援 bash 和 zsh,安裝簡單,並提供詳細的安裝和測試步驟。
Thumbnail
這是我跟chatgpt協作整理出來的一些知識: 蠻神奇的事情是我記得CHATGPT無法連網,他居然能知道我這個專案是做 投資建議訊號推送的telegrambot機器人,我完全沒有頭緒他怎麼知道的
Thumbnail
這是我跟chatgpt協作整理出來的一些知識: 蠻神奇的事情是我記得CHATGPT無法連網,他居然能知道我這個專案是做 投資建議訊號推送的telegrambot機器人,我完全沒有頭緒他怎麼知道的
Thumbnail
對程式新手或文組轉職者來說,Git、GitHub、IDE 常令人困惑。其實IDE 像是寫程式的桌子,Git 是記錄版本的日記,GitHub 是作品展覽廳。也可以用 Google Colab 寫 Python,直接存到 GitHub,先從簡單方法開始,讓程式碼管理更完整,也為履歷加分。
Thumbnail
對程式新手或文組轉職者來說,Git、GitHub、IDE 常令人困惑。其實IDE 像是寫程式的桌子,Git 是記錄版本的日記,GitHub 是作品展覽廳。也可以用 Google Colab 寫 Python,直接存到 GitHub,先從簡單方法開始,讓程式碼管理更完整,也為履歷加分。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News