修正版本。本批全部是 fix:,重點是五個沉默的資料正確性錯誤——它們都不會拋錯,其中四個會回傳看起來完全正常、實際上是錯的答案。
資料正確性修正
金融股財報一律回傳空字串
t187ap06/07 依產業切成六個端點變體,工具原本讀 t187ap03_L 的「產業別」欄位去對照中文產業名。但該欄位存的是數字代碼(實測 1095 家公司、33 種值,完全沒有中文;2884=17、2330=24),對照表永遠不匹配,一律落回 _ci(一般業)。_ci 與其餘五個變體互斥,所以每一家金控、銀行、證券、保險(2884、2891、2801、2855、2850…)呼叫 get_company_income_statement/get_company_balance_sheet 都只拿到空字串。
改為逐一探測六個變體。「產業別」本質上無法承擔這個判斷——17 同時涵蓋金控/銀行/證券/保險,且公發公司根本不在 t187ap03_L 裡。
歷史估值查詢回傳當日資料,卻標上所查日期
/exchangeReport/BWIBBU_ALL 完全忽略 date 參數:date=20250102 與 date=20260827 回傳位元組完全相同的內容。工具卻把它標成「【全市場估值資料 - 20250102】」。實測 1101 在 20250102 的真實本益比為 26.55、股價淨值比 0.99,工具印出的卻是當日的 3.29/0.79。
改用會遵守 date 的 /rwd/zh/afterTrading/BWIBBU_d,並比對回應自身的 date 欄位,寧可回報日期不符也不把別天的資料改標成所查日期。該端點欄位順序不同,欄位索引改以 COL_* 常數表示,另補上收盤價。
上游故障被偽裝成「查無此公司資料」
fetch_company_data/fetch_latest_market_data 會吞掉所有例外並回傳 None/[],導致 @handle_api_errors 永遠不觸發、MSG_QUERY_FAILED 形同死碼。逾時、連線拒絕、HTTP 503、維護用 HTML 頁——在 50 多個工具的輸出上與「這家公司真的沒這筆資料」完全無法分辨。現在故障會往上拋,如實回報「查詢失敗」。
此修正同時暴露出 /static/20151104/CSR103 已被證交所下架(302 導向自家 /404.html)。
清單型工具回傳數 MB 字串
get_warrant_basic_info() 實測產出 37.85 MB、get_warrant_yearly_issuance_statistics() 8.2M 字元(且原本連可縮小範圍的參數都沒有)、get_warrant_daily_trading() 3.6M。權證清單模式另外省略「備註」欄(逐筆增額/註銷流水帳,單筆可逾千字),指定 code 時仍回完整欄位。
get_options_daily_history 原本的列數保護帶了 not contract_month 條件,而 docstring 又建議呼叫者指定 contract_month——正好把人推進唯一沒有保護的分支。
彙總列與空殼報價被當成真實資料
BFIAUU/TWT93U/TWTASU 都在資料末尾附一列全市場加總,結構與明細列完全相同。鉅額交易因此多算一筆,並在清單中出現一筆量值為全市場加總的假交易。TWTASU 把代號與名稱放在同一個字串裡,合計 因此變成可被 stock_no 命中的「股票代號」。
MIS 即時報價對不存在的代號回傳佔位物件 {"c": "", "z": "-"} 而非略過,會灌水筆數並讓「查無報價」訊息永遠不可達。
第三方 API 異動
t187ap26_L/t187ap27_L欄位改名:證交所將停止買賣日期改為停止買賣開始日、變更日期改為變更交易開始日,contract test 自 2026-08-14 起連續失敗(#64)。- TAIFEX OpenAPI 間歇回傳 CSV:
openapi.taifex.com.tw會隨機以端點的 CSV 形式(中文欄名)回應,即使請求帶了Accept: application/json。實測退化是分端點、分鐘級區塊(va01/PutCallRatio回 CSV 一陣子後恢復 JSON;MarketDataOfMajorInstitutionalTradersDividedByFuturesAndOptionsBytheDate連續 30 次全 CSV,同時其他端點正常),因此--reruns無法化解,每日 E2E 會隨機變紅。測試改為視同暫時性狀況而 skip,並新增守門測試:若所有探測端點都回 CSV 就 fail,避免真正的全站格式變更被藏起來。
行為變更
get_market_valuation_by_date改用BWIBBU_d,輸出新增收盤價;非交易日不再回傳當日資料,而是明確告知來源實際回傳的日期。- 下列工具新增
limit/offset分頁參數:get_warrant_basic_info、get_warrant_daily_trading、get_warrant_yearly_issuance_statistics、get_margin_balance、get_market_valuation_by_date。 - 公司查詢類工具查無資料時回傳明確的「查無…」訊息,取代原本的空字串。
測試
- 新增 47 個回歸測試涵蓋上述五類錯誤,全部先在修正前確認可重現。
fetch_or_skip補回遺漏的import requests,並將ChunkedEncodingError視為暫時性失敗。