iT邦幫忙

2026 iThome 鐵人賽

DAY 10
0
自我挑戰組

30 天養大一個開源專案:baodao-skill 從零開始系列 第 10

【Day 10】台股行情不用 key:兩個證交所主機,和慢半天的 openapi

  • 分享至 

  • xImage
  •  

先講結論:baodao-skill 現在查得到台股了。taiwan-stock 用證交所和櫃買中心的公開 JSON,免金鑰免登入,台積電收盤價、漲跌幅排行、大盤指數都答得出來。2026-09-12 全部端點實測通過。

台股的公開資料比想像中大方。上市(TWSE)全市場每日收盤:

curl -sm 30 'https://openapi.twse.com.tw/v1/exchangeReport/STOCK_DAY_ALL' -o /tmp/twse.json

回來約 319KB,一檔股票一筆,查台積電就是一行 jq:

jq -r '.[] | select(.Code=="2330") | "(.Name) 收 (.ClosingPrice) 漲跌 (.Change)"' /tmp/twse.json

上櫃(TPEX)也有對應的 openapi,4.4MB 全部櫃檯股一次給你。看起來一帆風順?然後就踩到這個系列的第 N 個雷。

9/12 清晨實測時我發現一件怪事:openapi 的 STOCK_DAY_ALL 還停在 1150910(9/10),但 www.twse.com.tw 的 STOCK_DAY 已經有 1150911(9/11)的資料了。同一個證交所,兩個主機,openapi 端慢大約半天。收盤當晚想要最新交易日的資料,得走 www 主機的 STOCK_DAY 或 MI_INDEX,openapi 留給「最近一個交易日就好」的查詢。文件沒寫這件事,是比對兩邊資料才抓到的。

其他該記下來的:

日期是民國年。1150911 就是 2026-09-11,換算減 1911。個股本月每日成交的 STOCK_DAY 裡日期甚至是「115/09/01」這種格式,解析前要有心理準備。

數字全是字串。ClosingPrice、Change 都是字串,jq 要排序先 tonumber,不然 9 會排在 10 後面。

非交易日不是錯誤。週末或國定假日查 MI_INDEX 會回「很抱歉,沒有符合條件的資料!」,這時候往前回推到最近交易日再查,不要回報資料源掛了。

還有一個防守條款:偶爾 HTTP 200 但內容是 HTML,那是 WAF 暫時攔截,換另一個主機再試;兩個都失敗才回報異常,絕對不要靜默編造數字——行情這種東西,錯的數字比沒有數字更糟糕。

到這裡 baodao-skill 的金融類有發票對獎和台股收盤兩支了。共同點是台灣的公開資料真的不用 key,代價是你要讀懂它的脾氣。


上一篇
【Day 9】統一發票對獎:被 HTML 切開的中獎號碼,和過期的領獎期間
下一篇
【Day 11】寄信到台灣:郵遞區號、Big5,和 Windows 才能查的 3+3
系列文
30 天養大一個開源專案:baodao-skill 從零開始15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言