證交所 OpenAPI:試算表取得 244 筆重大訊息
證交所 OpenAPI 是臺灣證券交易所正式提供的資料介接管道,讓程式可以直接取得上市公司重大訊息等結構化資料。本篇從認識 Swagger 介面出發,依序確認使用條款、解析端點欄位、撰寫 Apps Script 程式碼,最後在 Google 試算表成功抓取 244 筆重訊。讀完整篇,就能自己動手建一套輕量但實用的重大訊息追蹤工具。


✨ 證交所 OpenAPI × 試算表自動化精華懶人包 ✨
輕鬆打造輕量級重大訊息追蹤工具 | 贊贊小屋高效學習筆記
嗨大家!我是李老師👋。你是不是也常被公開資訊觀測站密密麻麻的網頁看得頭暈眼花?今天小屋要帶大家用官方提供的 OpenAPI,搭配熟悉的 Google 試算表,把重大訊息一鍵自動抓下來!打造專屬的投資數位工具,其實非常簡單喔!
為什麼選 OpenAPI 而非網頁爬蟲?
一般網頁是設計給人看的,結構容易因改版而失效。如果未經同意使用自動化程式大量擷取,往往會觸犯使用條款。而 OpenAPI 是官方主動開放、歡迎介接的正式管道,不僅合規,更能確保資料格式的長期穩定性!
先在 Swagger 測試,再動手寫程式
證交所的 API 文件採用直觀的 Swagger 介面。養成在寫 Apps Script 前先點擊 Try it out 進行測試的好習慣,提早確認回傳格式與欄位名稱,能幫我們省下後續大量的除錯時間。
關鍵 JSON 結構:主旨與說明分流
重訊 API 已經直接提供了完整的「說明」欄,免去解析複雜網頁表格的麻煩。需要特別注意的是,「主旨」是一行標題,「說明」才是詳細事件。未來若想搭配 AI 工具進行自動摘要分析,務必將這兩個欄位同步傳入,才能提供充足的上下文資訊。
Google Apps Script 輕鬆串接落地
利用 UrlFetchApp.fetch 發出請求索取資料,並透過 onOpen() 在試算表上方直接建立自訂選單。如此一來,Google 試算表本身就變成了最直覺的操作畫面,一鍵即可抓取,不需要每次都開啟黑底白字的程式編輯器。
實測回傳 244 筆:重視初始資料觀察
實測成功抓取單日 244 筆重大訊息,呈現出龐大的資訊體量。成功落地後,小屋建議先別急著做複雜分析,而是先花點時間觀察這份原始資料的樣貌(如日期格式是否一致、文字長度等)。先摸透資料品質,後續自己查閱或交給 AI 處理都會順暢無比。
建立散戶版的自選股關注機制
將資料帶入試算表後,配合內建的篩選功能或搭配 FILTER() 函數 抽取特定標的,就能在另一個工作表輕鬆做出專屬的關注清單。當主資料工作表更新時,追蹤面板便會同步跳出符合條件的公司重訊,隨時隨地精準監控!
一、臺灣證交所 OpenAPI 官方介面
瀏覽器網址列顯示「openapi.twse.com.tw」,頁面標題紅框圈出「臺灣證券交易所 OpenAPI」,右側帶有「1.0」與「OAS 2.0」的版本標籤,下方說明文字寫著「本平臺提供臺灣證券交易所服務 API,歡迎各位介接使用。」並附有「使用條款」連結,頁面底部則列出「公司治理」類別下的幾支 GET 端點。這個頁面採用 Swagger 介面呈現,是證交所公開的 API 文件入口,可以直接在網頁上瀏覽所有可用端點,也可以點選「Try it out」即時測試每一支 API 的回傳狀況。
所謂 OpenAPI,可以把它理解成證交所特別整理出來、讓外部程式正式讀取的資料入口。它跟一般網頁最大的差別在於,網頁是設計給人看的,API 則是設計給程式讀的,因此回傳格式比較規則,也比較適合後續整理到 Google Sheets、資料庫或 AI 工具中。贊贊小屋自己的做法是養成「先在 Swagger 測試,再寫程式」的習慣,動手寫 Apps Script 之前,就已經確認這支 API 的回傳格式和欄位名稱長什麼樣子,可以省去大量除錯時間。


二、API 使用條款確認合規介接方式
第一張截圖是臺灣證券交易所官網的「使用條款」頁面,頁面左上角帶有麵包屑「首頁 ▶ 使用條款」,標題正是「使用條款」。紅框圈出第二條「與第三人網站的連結」中的關鍵句:「本網站提供相關機構與資訊連結之服務,旨在便利您迅速獲得相關投資與研究資訊。」這一條主要說明外部連結的性質,確認連結資源由各該單位自行負責,對我們選擇透過 OpenAPI 介接資料的做法並無限制。
第二張截圖延續條款內文,紅框分別標出三條關鍵規定。第五條「服務變更及通知」說明「臺灣證券交易所有權於任何時間點,不經通知隨時修改、暫時或永久停止繼續提供本網站部分或全部之服務」;第六條「下載軟體或資料」的重點在於,若不是依臺灣證券交易所同意的方式或未經同意,不應透過自動化裝置、蜘蛛程式、爬蟲程式或擷取程式等方式下載網站資料;第七條補充說明,透過網站取得之資訊或建議不擔保完全正確無誤,做任何規劃與決定之前仍應請教專業人員。第六條正好說明了本文選擇走 OpenAPI 而非直接爬 MOPS 網頁的原因:OpenAPI 是證交所主動開放、「歡迎各位介接使用」的正式介接管道,兩者性質截然不同。爬網頁的結構隨時可能因改版而失效,OpenAPI 則有明確端點與欄位格式,通常更適合長期維護;至於一般網站頁面,若沒有明確提供 API 或下載功能,就不應直接假設可以用程式大量擷取。相關的重大訊息法規細節,贊贊小屋另有一篇完整介紹,可以對照參考。



三、重大訊息端點與 JSON 欄位結構
截圖紅框圈出端點標題「GET /opendata/t187ap04_L 上市公司每日重大訊息」,右側顯示「Try it out」按鈕,下方「Responses」區塊的「Response content type」設定為「application/json」。黑底視窗的「Example Value」中列出完整回傳欄位:「出表日期」、「發言日期」、「發言時間」、「公司代號」、「公司名稱」、「主旨」、「符合條款」、「事實發生日」、「說明」,每個欄位的值型態均標示為「”string”」。欄位名稱在官方文件中已明確定義,不像解析網頁 HTML 那樣隨時可能因改版而失效,後續篩選、排序與查詢也更穩定。
從回傳欄位可以看出,這支 API 已經直接提供「說明」欄,也就是重大訊息的主要說明內容,不像爬網頁 HTML 還需要另外解析巢狀表格。這裡有個值得注意的細節:「主旨」和「說明」是兩個不同欄位,「主旨」是一行標題,「說明」則通常包含條款引用、事件內容與補充說明。若後續要搭配 AI 工具進行分析,建議把兩個欄位都一起傳入,讓模型有足夠的上下文,而不是只傳主旨標題——畢竟「召開股東常會」這六個字,和完整說明裡面的議案清單,對 AI 來說分析品質差距很大。


四、Apps Script 串接程式碼說明
截圖左上角標示「Apps Script」,專案名稱為「上市公司重大訊息」,左側欄位的「程式碼.gs」檔案已被選取。右側紅框圈出第 1 至 14 行的核心程式碼:第 1 至 6 行是 onOpen() 函式,透過 SpreadsheetApp.getUi() 呼叫介面,.createMenu('重大訊息工具') 新增自訂選單,.addItem('抓取上市公司每日重訊', 'fetchTwseDailyMaterialInfo') 把選單項目綁定到主要函式;第 8 至 14 行是 fetchTwseDailyMaterialInfo() 函式的開頭,第 9 行直接寫入 API 完整 URL,第 11 至 14 行則使用 UrlFetchApp.fetch 發出 GET 請求,並設定 muteHttpExceptions: true。
UrlFetchApp.fetch 是 Google Apps Script 最實用的功能之一,它能代替瀏覽器向證交所索取資料,程式執行之後資料就直接落地到試算表中。onOpen() 則是把程式碼包裝成試算表上方按鈕的關鍵,讓整套工具不需要另外刻前端介面,Google Sheets 本身就是最直覺的操作畫面。圖中第 9 行把 API URL 直接寫在程式碼裡,這沒有問題,因為證交所 OpenAPI 是完全公開的免驗證端點,這個網址本來就沒有任何機密性。然而如果日後這段程式碼要進一步串接需要付費金鑰的 AI 服務,那個金鑰就不應直接寫死在程式碼裡,這時候才是 PropertiesService 發揮作用的時機。


五、Google 試算表自訂選單設置
截圖畫面是名為「上市公司重大訊息」的 Google 試算表,頂端選單列中的「重大訊息工具」選單已展開,顯示「抓取上市公司每日重訊」選項,左下角的工作表標籤名稱為「工作表1」,試算表本體目前是空白狀態,尚未有任何資料。這個自訂選單正是前一小節 onOpen() 函式執行後的呈現成果,每次開啟試算表時,Apps Script 會自動在選單列建立這個工具入口,不需要每次進入編輯器手動執行程式。
很多人對寫程式的想像還停留在黑底白字的終端機畫面,但其實程式也可以被包裝成很直覺的小工具。像本文這樣在 Google Sheets 上方加一個「重大訊息工具」選單,好處是日後想重新抓資料時,不必每次回到 Apps Script 編輯器按執行,只要在試算表點一下選單就好。程式碼中已設定工作表名稱為「上市公司每日重訊」,執行時若試算表裡尚未有這個工作表,程式會自動建立;若想改用其他名稱,同步修改程式碼中的工作表名稱設定即可,不需要事先手動新增。


六、執行腳本成功抓取 244 筆重大訊息
截圖上方黑色提示列顯示「正在執行指令碼」,並提供「取消」與「關閉」按鈕,畫面中央彈出完成視窗,寫著「完成,已抓取 244 筆上市公司每日重大訊息。」底部確認按鈕為「確定」。試算表第一列欄位標題已自動建立,包含「抓取時間」、「出表日期」、「發言日期」、「發言時間」、「公司代號」、「公司名稱」、「主旨」、「符合條款」、「事實發生日」、「說明」,第二列起已寫入 2026/5/21 的資料,資料順利落地在程式指定的「上市公司每日重訊」工作表中。
「244 筆」是本次實測的結果,提供了很好的量感:上市公司每日重大訊息的體量,絕不是幾筆零星公告,而是一份需要整理與篩選的資料表。成功看到完成提示之後,贊贊小屋的習慣是先不急著分析,而是先觀察這份資料本身長什麼樣子——欄位是否完整、說明欄文字長度如何、日期格式是否一致。資料整理真正困難的地方,往往不是抓不到,而是抓到之後發現格式不一,導致後續分析卡住。先把資料品質看清楚,不管是自己查閱還是交給 AI 處理,都會順很多。


七、證交所 OpenAPI 資料篩選與關注公司追蹤
證交所 OpenAPI 把資料帶進試算表之後,篩選功能就是下一步的核心操作。截圖中「公司名稱」欄的篩選下拉選單已展開,顯示「選取全部 113 項」,搜尋框下方列出「中鋼」、「中環」、「元禎」、「友通」等公司名稱並附有勾選方塊;右側說明欄可以看到幾筆重訊的完整內文,包含議案清單、法人說明會日期、地點等詳細資訊,資料量相當豐富。重大訊息的數量比許多人想像中還多,不先做篩選很容易被大量公告淹沒,這也正是把資料放進 Google Sheets 特別有價值的原因——可以依公司名稱、符合條款甚至只挑自己持有的標的來看。
善用篩選功能,其實就是建立一套散戶版的關注清單機制。外資法人的系統會針對特定標的設定警示條件,這裡的篩選器雖然是手動操作,但搭配 FILTER() 函數在另一個工作表做成自選股追蹤清單,當主資料工作表有新資料寫入,追蹤清單就能自動顯示符合條件的公司。尤其「說明」欄通常是資訊量最大的地方,文字雖然密集,卻正是最值得深入閱讀的部分。如果想同步掌握上市公司財務報表的結構脈絡,贊贊小屋在公開資訊觀測站財報一文整理了 2026 新版網站的操作方式,兩者搭配可以建立更完整的資訊監看流程。


從 OpenAPI 到試算表,財務資訊的距離只剩一段程式碼
整個流程走完,從確認 Swagger 端點、閱讀使用條款、理解 JSON 欄位結構,到用 Apps Script 寫出一段輕量程式碼,最後在試算表一鍵抓到 244 筆重訊——贊贊小屋覺得整個門檻比想像中低很多。真正要花心思的,不是寫程式本身,而是一開始搞清楚「哪支端點提供的資料是需要的」,以及「使用條款裡哪些行為被限制、哪些是官方允許的介接方式」。
這套工具的可延伸性也很高。資料落地之後,既可以配合試算表篩選自選股,也可以進一步串接 AI 工具摘要說明欄位的內容,把密密麻麻的公告文字轉換成一段白話摘要。重大訊息涵蓋的法律背景,從重大訊息法規的 51 項條款,到證券發行人財務報告編製準則的六層架構,程式只是取得資料的管道,判斷仍需要對制度有一定的理解。這正是臺灣證券交易所 OpenAPI 最值得善用的地方:它讓資料變得容易取得,但也同時提醒使用者,資料背後的責任從來沒有消失。
贊贊小屋公開資訊觀測站財報:
歡迎報名贊贊小屋股票投資大全集課程。

