先講結論: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,代價是你要讀懂它的脾氣。