fix(api): 移除行情请求的 s_ 前缀,强制获取全量数据以修复日期缺失问题
This commit is contained in:
parent
2fb5629a89
commit
2570144112
@ -1,5 +1,14 @@
|
|||||||
# Omniledger 架构与开发记忆 (Memory)
|
# Omniledger 架构与开发记忆 (Memory)
|
||||||
|
|
||||||
|
## 修复腾讯行情接口 URL 拼接逻辑,剔除导致数据残缺的 s_ (简易版) 前缀,确保所有市场强制获取包含时间戳的全量报文 (Task 67)
|
||||||
|
- 在 `app/api/cron/fetch-prices/route.ts` 的 `fetchStockPrice()` 函数与 `src/actions/market.ts` 的 `getTencentSymbol()` 函数中,将美股资产的前缀映射从 `'s_us'` 强制重构为 `'us'`。
|
||||||
|
- **根因分析:** 腾讯财经 gtimg 接口使用 `s_us` 前缀时返回的是"简易版"报文(仅 ~10 个字段),缺失 Index 30 的日期时间字段;使用 `us` 前缀时返回"全量版"报文(60+ 个字段),包含完整的交易时间戳 `2026-05-01 16:00:06`。
|
||||||
|
- 修改前的错误拼接:`https://sqt.gtimg.cn/q=s_usGOOG` → 10 字段,无日期 → 触发 `[Date Parse Fatal Error]`。
|
||||||
|
- 修改后的正确拼接:`https://sqt.gtimg.cn/q=usGOOG` → 60+ 字段,Index 30 含日期 → `parseMarketDate()` 成功解析 `2026-05-01`。
|
||||||
|
- 其他市场前缀保持不变:港股 `hk` (如 `hk01810`)、A股沪市 `sh` (如 `sh600009`)、A股深市 `sz` (如 `sz002594`)。
|
||||||
|
- **验证:** `curl` 对比 `s_usGOOG` (10字段) vs `usGOOG` (60+字段),Cron 接口成功同步 21 条记录,0 失败,控制台无任何 `[Date Parse Fatal Error]` 报错,美股日期正确解析为 `2026-05-01`。
|
||||||
|
|
||||||
|
|
||||||
## 部署防弹级 parseMarketDate 解析引擎,增加 payload 脏前缀清洗逻辑,彻底解决美股日期解析崩溃触发 fallback 的幽灵 Bug (Task 66)
|
## 部署防弹级 parseMarketDate 解析引擎,增加 payload 脏前缀清洗逻辑,彻底解决美股日期解析崩溃触发 fallback 的幽灵 Bug (Task 66)
|
||||||
- 在 `app/api/cron/fetch-prices/route.ts` 中一字不差地替换 `parseMarketDate(rawString: string)` 为工业级防污染版本。
|
- 在 `app/api/cron/fetch-prices/route.ts` 中一字不差地替换 `parseMarketDate(rawString: string)` 为工业级防污染版本。
|
||||||
- **核心修复:** 新增 `payload.includes('="')` 脏前缀清洗逻辑,从腾讯 gtimg 原始响应中提取 `="` 之后的纯净数据段,剔除结尾 `";`,从根本上消除 `v_usGOOG="...` 前缀导致的数组偏移与数据污染风险。
|
- **核心修复:** 新增 `payload.includes('="')` 脏前缀清洗逻辑,从腾讯 gtimg 原始响应中提取 `="` 之后的纯净数据段,剔除结尾 `";`,从根本上消除 `v_usGOOG="...` 前缀导致的数组偏移与数据污染风险。
|
||||||
|
|||||||
@ -71,7 +71,7 @@ async function fetchStockPrice(asset: { symbol: string; exchange: string | null
|
|||||||
break;
|
break;
|
||||||
case 'US':
|
case 'US':
|
||||||
default:
|
default:
|
||||||
tCode = 's_us' + cleanSymbol;
|
tCode = 'us' + cleanSymbol;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -15,7 +15,7 @@ function getTencentSymbol(asset: { symbol: string; exchange: string | null }): s
|
|||||||
case 'SZSE': return 'sz' + cleanSymbol;
|
case 'SZSE': return 'sz' + cleanSymbol;
|
||||||
case 'HKEX': return 'hk' + cleanSymbol;
|
case 'HKEX': return 'hk' + cleanSymbol;
|
||||||
case 'US':
|
case 'US':
|
||||||
default: return 's_us' + cleanSymbol;
|
default: return 'us' + cleanSymbol;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user