使用 Yahoo Finance API 實現農產品交易數據的自動化擷取與儲存
一、教學目標
- 知識目標:理解 Yahoo Finance API、FastAPI 服務及自動化工具(如 Make.com)的運作原理。
- 技能目標:學會使用
yfinance
抓取農產品交易數據,建立 FastAPI 服務,並透過 Make.com 將數據自動存入 Notion。
- 態度目標:培養學生對金融數據分析與自動化流程的興趣,並認識其在市場研究中的價值。
二、前置準備
適用對象
- 對象:大學生、資料科學初學者或對金融數據與自動化有興趣者。
- 先備知識:基礎 Python(函數、字典)、API 概念。
所需軟硬體
- 硬體:具備網路連線的電腦。
- 軟體:
- Python 3.x(建議搭配 Anaconda)。
- Python 套件:
yfinance
、fastapi
、uvicorn
、pandas
、requests
。
- 文字編輯器(如 VS Code)。
- Make.com 帳號、Notion 帳號。
- 其他:
- 穩定的網路環境。
- Notion 資料庫(預先建立,包含相關欄位)。
教師準備
- 預先安裝所有套件並測試程式碼。
- 準備 Notion 資料庫範例(包含欄位:開盤價、最高價、最低價、收盤價、成交量)。
- 提供 Make.com 操作截圖或影片。
三、教學流程
時間分配:總計 120 分鐘
- 導入(15 分鐘)
- 方法 1:使用
yfinance
抓取數據(30 分鐘)
- 方法 2:建立 FastAPI 服務(30 分鐘)
- 方法 3:使用 Make.com 自動化(35 分鐘)
- 總結與討論(10 分鐘)
1. 導入(15 分鐘)
活動:情境引導
- 教師提問:
「如果你想追蹤農產品(如黃豆、玉米)的價格變化,如何快速獲取並記錄數據?」
- 簡介內容:
- Yahoo Finance API:提供免費金融數據。
- FastAPI:快速建立 API 服務。
- Make.com:自動化工具,連接 API 與 Notion。
- 目標導引:
「今天我們將學習如何用 Python 抓取農產品交易數據,建立 API,並透過自動化工具存入 Notion,實現全流程自動化!」
2. 方法 1:使用 yfinance
抓取交易數據(30 分鐘)
講解(10 分鐘)
- 環境設定:
- 安裝套件:
pip install yfinance pandas
- 程式說明:
yfinance.Ticker()
:獲取商品數據。
history()
:提取 OHLC 與交易量。
- 數據結構:字典格式。
- 展示範例:運行程式並顯示黃豆數據。
實作活動(20 分鐘)
- 學生任務:
- 執行以下程式碼,抓取黃豆、玉米、小麥數據:
import yfinance as yf
import pandas as pd
commodities = {
"黃豆": "ZS=F",
"玉米": "ZC=F",
"小麥": "ZW=F"
}
def fetch_commodity_data():
result = {}
for name, symbol in commodities.items():
data = yf.Ticker(symbol).history(period="1d")
if not data.empty:
latest = data.iloc[-1]
result[name] = {
"開盤": latest["Open"],
"最高": latest["High"],
"最低": latest["Low"],
"收盤": latest["Close"],
"成交量": latest["Volume"]
}
return result
data = fetch_commodity_data()
print(data)
- 修改
period="1d"
為 "5d"
,觀察多日數據變化。
3. 方法 2:使用 FastAPI 建立 API 服務(30 分鐘)
講解(10 分鐘)
- 環境設定:
- 安裝套件:
pip install fastapi uvicorn
- 程式說明:
@app.get()
:定義 API 端點。
uvicorn.run()
:啟動服務。
- 展示範例:啟動服務並用瀏覽器訪問
http://localhost:8000/commodities
。
實作活動(20 分鐘)
from fastapi import FastAPI
import uvicorn
from your_module import fetch_commodity_data # 假設前述函數在另一檔案
app = FastAPI()
@app.get("/commodities")
def get_commodities():
return fetch_commodity_data()
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
- 在瀏覽器或工具(如 Postman)訪問
http://localhost:8000/commodities
,檢查回傳數據。
- 成果檢查:確認 API 回傳 JSON 格式的交易數據。
講解(15 分鐘)
- Make.com 設定:
- HTTP 模組:發送 GET 請求。
- Notion 模組:連接資料庫並映射欄位。
- 排程設定:每日更新。
- 展示範例:展示 Make.com 流程並檢查 Notion 更新。
實作活動(20 分鐘)
- 學生任務:
- 在 Make.com 创建流程:
- 添加 HTTP GET 模組:
- URL:
http://localhost:8000/commodities
(或公開伺服器 URL)。
- 添加 Notion 模組:
- 選擇已有資料庫,映射字段(如
開盤價
→ Open
)。
- 設定排程:每日 UTC 23:00。
- 執行流程並檢查 Notion 是否新增數據。
- 成果檢查:確認 Notion 資料庫顯示最新交易數據。
5. 總結與討論(10 分鐘)
- 教師總結:
yfinance
:快速獲取金融數據。
FastAPI
:提供外部存取介面。
Make.com
:實現自動化與資料整合。
- 學生討論:
- 「哪種農產品的價格波動最大?」
- 「這個流程可以用在哪些實際場景?(如投資決策、市場報告)」
四、評量方式
- 實作成果(70%):
- 成功抓取並顯示交易數據(方法 1)。
- 成功啟動 FastAPI 並訪問數據(方法 2)。
- 成功設定 Make.com 並更新 Notion(方法 3)。
- 參與討論(30%):
五、延伸應用
- 進階挑戰:
- 修改
yfinance
程式,抓取多月數據並計算平均價格。
- 在 FastAPI 中新增端點(如
/commodities/weekly
)。
- 在 Notion 中加入圖表視覺化。
- 實務專案:
- 追蹤其他商品(如黃金、原油)的價格趨勢。
- 設計每周市場報告自動生成系統。
六、教學資源
- 參考連結:
- 附件:
- 程式碼檔案(
.py
格式)。
- Notion 資料庫範例(截圖或模板)。