Skip to content

v1.8.1

Latest

Choose a tag to compare

@twjackysu twjackysu released this 28 Aug 14:55
444be6d

修正版本。本批全部是 fix:,重點是五個沉默的資料正確性錯誤——它們都不會拋錯,其中四個會回傳看起來完全正常、實際上是錯的答案。

資料正確性修正

金融股財報一律回傳空字串

t187ap06/07 依產業切成六個端點變體,工具原本讀 t187ap03_L 的「產業別」欄位去對照中文產業名。但該欄位存的是數字代碼(實測 1095 家公司、33 種值,完全沒有中文;2884=17、2330=24),對照表永遠不匹配,一律落回 _ci(一般業)。_ci 與其餘五個變體互斥,所以每一家金控、銀行、證券、保險(2884、2891、2801、2855、2850…)呼叫 get_company_income_statementget_company_balance_sheet 都只拿到空字串。

改為逐一探測六個變體。「產業別」本質上無法承擔這個判斷——17 同時涵蓋金控/銀行/證券/保險,且公發公司根本不在 t187ap03_L 裡。

歷史估值查詢回傳當日資料,卻標上所查日期

/exchangeReport/BWIBBU_ALL 完全忽略 date 參數date=20250102date=20260827 回傳位元組完全相同的內容。工具卻把它標成「【全市場估值資料 - 20250102】」。實測 1101 在 20250102 的真實本益比為 26.55、股價淨值比 0.99,工具印出的卻是當日的 3.29/0.79。

改用會遵守 date/rwd/zh/afterTrading/BWIBBU_d,並比對回應自身的 date 欄位,寧可回報日期不符也不把別天的資料改標成所查日期。該端點欄位順序不同,欄位索引改以 COL_* 常數表示,另補上收盤價。

上游故障被偽裝成「查無此公司資料」

fetch_company_datafetch_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 MBget_warrant_yearly_issuance_statistics() 8.2M 字元(且原本連可縮小範圍的參數都沒有)、get_warrant_daily_trading() 3.6M。權證清單模式另外省略「備註」欄(逐筆增額/註銷流水帳,單筆可逾千字),指定 code 時仍回完整欄位。

get_options_daily_history 原本的列數保護帶了 not contract_month 條件,而 docstring 又建議呼叫者指定 contract_month——正好把人推進唯一沒有保護的分支。

彙總列與空殼報價被當成真實資料

BFIAUUTWT93UTWTASU 都在資料末尾附一列全市場加總,結構與明細列完全相同。鉅額交易因此多算一筆,並在清單中出現一筆量值為全市場加總的假交易。TWTASU 把代號與名稱放在同一個字串裡,合計 因此變成可被 stock_no 命中的「股票代號」。

MIS 即時報價對不存在的代號回傳佔位物件 {"c": "", "z": "-"} 而非略過,會灌水筆數並讓「查無報價」訊息永遠不可達。

第三方 API 異動

  • t187ap26_Lt187ap27_L 欄位改名:證交所將 停止買賣日期 改為 停止買賣開始日變更日期 改為 變更交易開始日,contract test 自 2026-08-14 起連續失敗(#64)。
  • TAIFEX OpenAPI 間歇回傳 CSVopenapi.taifex.com.tw 會隨機以端點的 CSV 形式(中文欄名)回應,即使請求帶了 Accept: application/json。實測退化是分端點、分鐘級區塊va01PutCallRatio 回 CSV 一陣子後恢復 JSON;MarketDataOfMajorInstitutionalTradersDividedByFuturesAndOptionsBytheDate 連續 30 次全 CSV,同時其他端點正常),因此 --reruns 無法化解,每日 E2E 會隨機變紅。測試改為視同暫時性狀況而 skip,並新增守門測試:若所有探測端點都回 CSV 就 fail,避免真正的全站格式變更被藏起來。

行為變更

  • get_market_valuation_by_date 改用 BWIBBU_d,輸出新增收盤價;非交易日不再回傳當日資料,而是明確告知來源實際回傳的日期。
  • 下列工具新增 limitoffset 分頁參數:get_warrant_basic_infoget_warrant_daily_tradingget_warrant_yearly_issuance_statisticsget_margin_balanceget_market_valuation_by_date
  • 公司查詢類工具查無資料時回傳明確的「查無…」訊息,取代原本的空字串。

測試

  • 新增 47 個回歸測試涵蓋上述五類錯誤,全部先在修正前確認可重現。
  • fetch_or_skip 補回遺漏的 import requests,並將 ChunkedEncodingError 視為暫時性失敗。