【AI】生成式 AI Agent 開發助手 Claude Code - 02 - 簡單實作Side Project : 台股申購提醒排程

本文分享一個利用Claude Code 主導開發的心得,使用 .NET 8 與 Google Calendar API 開發的台股申購自動化工具。透過爬蟲自動監控 ibfs.com.tw 資訊,並依溢價比例自動過濾標的並建立提醒行程。

平常有在關注台股抽籤的話應該都知道,雖然抽中就像領紅包,但手動查資料真的很煩。要去看有哪些新股、算溢價差多少、還要記得在截止日前去下單。為了省下這些瑣碎事,我寫了一個叫 Boren.StockLottery 的排程服務。

為什麼要做這個?

我的需求很單純:

  • 每天自動抓最新的申購清單。
  • 幫我過濾掉那些溢價太低、不值得抽的股票。
  • 只要符合我設定的門檻(比如溢價 10% 以上),就自動塞進我的 Google 日曆提醒我。
  • 最後下單動作還是由我本人把關,避免自動化出錯造成損失。

技術細節與運作邏輯

這套工具是用 .NET 8 (C#) 寫的,架構很簡單,就是一個 BackgroundService

  • 資料來源: 主要是爬 ibfs.com.tw 的網頁資料,因為它已經幫我算好溢價率,省得我再去抓即時股價來算。
  • 資料過濾: 透過 HtmlAgilityPack 解析 HTML,只留「申購中」的標的。
  • 防止重複: 我用了 SQLite 來記錄處理過的股票,避免同一個申購案每天重複塞爆我的日曆。
  • 日曆整合: 透過 Google Calendar API v3,在申購截止前一天跟抽籤當天建立行程。

跟 AI (Claude Code) 協作的經驗

這次開發有個重點是想嘗試用 Claude Code 自動化生成程式碼。我在專案中的貢獻大概是:

  1. 資料來源蒐集、結果驗證
  2. 開通Google Calendar API
  3. 佈上Github Action 執行
  4. 建立空白 .NET 專案 (沒錯)

這邊是我下給他的第一個prompt : 

一個自動的排程,每天抓股票公開申購資料,依照我設定的溢價比例(%),篩選出符合的股票,將該股票的相關日程自動安排到我的行事曆上。

功能跟流程如下:

1.事先設定溢價成數

2.每天固定時間去抓取台灣最新的股票抽籤清單(https://www.twse.com.tw/zh/announcement/public.html)。需要的欄位有(抽籤日期、證券名稱、證券代號、申購結束日、申購價格、申購股數)。抓取條件: 限定在股票代碼會是四碼,當下日期小於申購結束日兩天以內,且沒有抓過的(已經抓過的會記錄在localDB 裡)

3.當每天從網站抓取到新資料,用股票代碼去GET呼叫API,XXXX填入股票代碼(http://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=tse_XXXX.tw) 取得回傳json,解析出裡面y 的數值就是該股票目前價格。

json 範例: { "msgArray": [ { "y": "1840.0000", } ] }

4.取得目前價格,與申購價格做計算,算出"溢價比例"。公式: 溢價比例 = 100.00*(目前價格-申購價格)/申購價格。比對超過事先設定溢價成數的股票,就自動到google 日曆,在申購結束日前一天新增項目,抽籤日期也新增一個項目,兩個項目都要載明 $"{證券代號}{證券名稱} {申購價格*申購股數}:{溢價比例}"。如果沒超過事先設定溢價成數,就跳過不處理。

5.只要有經過2,3 步驟的股票資料,就將 $"{證券代號}-{抽籤日期:yyyyMMdd}" append寫到一個文字檔

我第一次用Claude Code 產生整個專案。下面的結構 99 % 是他第一次生出來的。

說實話,初版出來比我想像的快很多,大概 8 分鐘就搞定了。但後來我花了快 4 小時 ( 不是花 100% 專注力 ) 在微調,也踩了幾個坑:

  1. Prompt 要給得夠細: 一開始沒指定要用 Worker Service,也沒說 Google 日曆要怎麼串,不過 Claude 還是找到一個對的方式。
  2. 別讓 AI 猜錯誤: 解析 HTML 、資料失敗時,最好直接把他哪裡做錯、正確處理方式跟它說,比讓它在那邊"trial and error"效率高很多。
  3. 驗證很重要: 因為爬完資料後解析出來的JSON 內容不正確,但我又不太想人工介入DEBUG,直接讓它寫了單元測試再另外寫一個 HTML 解析邏輯,跟原本的處理Service 結果比對,這對穩定性很有幫助。

實測結果

目前我把這個專案掛在 GitHub Actions 上跑排程。每天 13:00 它會自動動起來,檢查有沒有值得抽的標的。下面是GitHub Actions 的執行LOG

實際跑下來是真的有效,日曆確實添加事件,當我每天開啟 Calendar,就知道有沒有要申購的了。

總結心得

Claude Code 在開發上真的可以幫上大忙。這次只用到了基本的程式碼生成,後續還有更進階的:Skills、更詳細的各種md 檔案。還等待我去研究。

雖然這只是一個 side project,但真的省下不少心力。這個專案的收穫,比起開發出一個功能,更應該是怎麼操作 AI。

AI 的出現,取代掉大部分開發的黑手作業。以前花最多時間的是Coding,現在慢慢轉變成計畫跟驗證。詳細來說,我認為工程師不再是只需要精雕細琢每一行Code、每一個Function。人人從設計師,變成架構師、專案經理甚至老闆。你的心力會轉變到:

  1. 關心、蒐集並理解需求
  2. 做好 QA (品質保證),看系統output 是不是正確、效能是否可接受。而不是像以往一樣,很精準地了解你的某個功能是寫在哪一個介面、哪一個Service。
  3. 顧好系統架構,讓後續AI 甚至需要人工介入 DEBUG 的成本可以小一點

在 AI Coding 時代,就算AI Agent 再怎麼強大,都不可能會讀心。所以要懂得怎麼隨心所欲的控制AI,懂得怎麼樣讓AI 產生一個好的架構,可以利於維護、可測試、穩固可靠的程式碼,正是我們需要學習的。