GitHub Actions 自動化工作流程#
目標#
利用 GitHub Actions實現自動化流程,執行測試、部署等任務。這裡的範例是設計一個自動化程式,每天抓取PTT股票版的前十頁,將標題分類為「標的」或「Re:標的」,並每8小時透過Slack發送通知。
前期準備#
你可以創建一個自己的 GitHub 儲存庫,或者直接使用我提供的 PTT 股票版爬蟲 儲存庫。該專案已經集成了Slack 通知功能。
- 如果需要使用 Slack,請參照其他教學來取得 SLACK_WEBHOOK。
- 若不打算使用 Slack,則可以根據需要,修改 python-app.yaml 和 main.py 文件,讓程式不涉及 Slack 通知。
首先,你可以使用以下命令來 Fork 或 clone 此儲存庫:
git clone https://github.com/a607ernie/Ptt-Stock-Data
如果你希望每次執行完程式後將更新推送到 main 分支,則需要申請一個 Personal Access Token 來授權自動提交。
申請 Personal Access Tokens#
請按照以下步驟生成你的 Personal Access Token:
- 在 GitHub 首頁點擊右上角的使用者頭像,選擇「Settings」。
- 在左側選單中選擇「Developer settings」,接著進入「Personal access tokens」。

- 點擊「Generate new token」,並勾選以下兩個權限:
- repo
- workflow
生成 Token 之後,請將其複製並保存在安全的地方,因為將無法再次查看它。
設定儲存庫的 Token#
如果需要使用 Slack 通知,也可以在此步驟中將 SLACK_WEBHOOK 設定到儲存庫的密鑰中。
得到 Personal Access Token 後,我們接下來要將此 Token 設定到你的 GitHub 儲存庫中。請遵循以下步驟:
- 進入 PTT 股票版爬蟲 儲存庫。
- 點擊「Settings」,然後選擇「Secrets and variables」>「Actions」。

- 點擊右上角的「New repository secret」,並填寫以下欄位:
- Name:例如填入 GIT_TOKEN。
- Secret:貼上之前複製的 Personal Access Token。

設定 Repository Permissions#
若你希望推送提交,你需要允許 GitHub Actions 擁有「讀寫」權限。
- 進入 PTT 股票版爬蟲 儲存庫。
- 點擊「Settings」>「Actions」>「General」,然後找到「Workflow permissions」。
- 設定為「Read and write permissions」,並儲存變更。

建立 GitHub Actions 工作流程#
如果你不需要 Slack 通知功能,可以註解掉在 .env 中的設定。
在 GitHub 儲存庫中,我們需要建立一個工作流程來自動化執行。你可以在儲存庫中選擇「Actions」頁面,或手動建立 .github/workflows 目錄並添加一個 YAML 配置文件。
以下是一個範例的工作流程 YAML 文件:
name: Run PTT Stock Scraper
on:
# 設定工作流程定時執行。這裡設定每八小時執行一次
schedule:
- cron: '0 */8 * * *'
# 若需要手動觸發工作流程,可以使用以下配置
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
# 檢出源碼
- uses: actions/checkout@v3
# 設定 Python 3.10 環境
- name: Set up Python 3.10
uses: actions/setup-python@v3
with:
python-version: "3.10"
# 安裝依賴
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
# 執行 Python 程式
- name: Run python file
run: python3 main.py
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
# 提交變更
- name: Commit changes
continue-on-error: true
run: |
git config --global user.email ${{ secrets.CI_COMMIT_EMAIL }}
git config --global user.name ${{ secrets.CI_COMMIT_AUTHOR }}
git add .
git commit -m "Log: Update stock information from PTT"
# 推送提交
- name: Push changes
if: success()
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GIT_TOKEN }}
本地運行 (不使用 Slack)#
若你不打算啟用 Slack 通知功能,可以在 main.py 中註解掉 Slack 通知的部分,範例如下:
if __name__ == '__main__':
...
# 註解掉以下這行來禁用 Slack 通知
# slack_notify(result)
本地運行 (使用 Slack)#
若你希望在本地運行程式並啟用 Slack 通知,則需修改 main.py,將 prod 設定區塊註解,並使用 test 區塊代替。此時,你需要在本地建立 .env 文件來設置必要的環境變數。
# test .ENV
# 用於本地開發環境
config = dotenv_values(".env")
SLACK_WEBHOOK = config['SLACK_WEBHOOK']
# prod .ENV
# 用於 GitHub Actions 或生產環境
# SLACK_WEBHOOK = os.getenv('SLACK_WEBHOOK')
就可以在本地開發環境中運行程式並發送 Slack 通知了。
結論#
透過 GitHub Actions,你可以輕鬆實現自動化的爬蟲運行和結果推送,不僅能自動抓取 PTT 股票版的資訊,還能將結果定時推送至 Slack,以提供即時的資訊。這個流程不僅限於此範例,你可以根據需求擴展其應用場景。
