From 9f82ad0a81d43a6ce63879f4f33f0cfa3021cb65 Mon Sep 17 00:00:00 2001 From: OpenClaw Agent Date: Mon, 16 Mar 2026 09:15:12 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=85=BE=E8=AE=AF=E5=8E=86=E5=8F=B2K?= =?UTF-8?q?=E7=BA=BF=E6=8E=A5=E5=8F=A3=E5=B7=B2=E5=BA=9F=E5=BC=83=EF=BC=8C?= =?UTF-8?q?=E6=94=B9=E8=BF=9B=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E4=BC=98?= =?UTF-8?q?=E9=9B=85=E9=99=8D=E7=BA=A7=E5=88=B0Tiingo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/TencentMarketService.cs | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/AssetManager.Infrastructure/Services/TencentMarketService.cs b/AssetManager.Infrastructure/Services/TencentMarketService.cs index ed7060d..8caaeee 100644 --- a/AssetManager.Infrastructure/Services/TencentMarketService.cs +++ b/AssetManager.Infrastructure/Services/TencentMarketService.cs @@ -102,34 +102,46 @@ public class TencentMarketService : ITencentMarketService var responseBytes = await _httpClient.GetByteArrayAsync(url); var response = Encoding.GetEncoding("GBK").GetString(responseBytes); - if (string.IsNullOrEmpty(response) || !response.Contains("kline")) + if (string.IsNullOrEmpty(response)) { - _logger.LogWarning("腾讯财经返回无效数据: {Symbol}", symbol); - return new List(); + throw new Exception($"腾讯财经历史数据接口返回空数据,标的: {symbol}"); } // 解析JSON var jsonStart = response.IndexOf('{'); - if (jsonStart < 0) return new List(); + if (jsonStart < 0) + { + throw new Exception($"腾讯财经历史数据接口返回非JSON格式,标的: {symbol}"); + } var jsonStr = response.Substring(jsonStart); - var jsonDoc = JsonDocument.Parse(jsonStr); + using var jsonDoc = JsonDocument.Parse(jsonStr); var root = jsonDoc.RootElement; + // 检查API错误响应 + if (root.TryGetProperty("code", out var codeEl) && codeEl.GetInt32() != 0) + { + var errMsg = root.TryGetProperty("msg", out var msgEl) ? msgEl.GetString() : "未知错误"; + throw new Exception($"腾讯财经历史数据接口错误: {errMsg},标的: {symbol}"); + } + + // 检查 data 字段类型(错误响应时 data 是空数组 []) + if (!root.TryGetProperty("data", out var data) || data.ValueKind != JsonValueKind.Object) + { + throw new Exception($"腾讯财经历史数据接口返回无效数据结构,标的: {symbol}"); + } + // 数据路径: data -> us{symbol} -> qfq -> {klineType} var dataPath = $"us{symbol.ToUpper()}"; - if (!root.TryGetProperty("data", out var data) || - !data.TryGetProperty(dataPath, out var stockData) || + if (!data.TryGetProperty(dataPath, out var stockData) || !stockData.TryGetProperty("qfq", out var qfq)) { - _logger.LogWarning("腾讯财经数据结构异常: {Symbol}", symbol); - return new List(); + throw new Exception($"腾讯财经历史数据接口无该标的K线数据,标的: {symbol}"); } if (!qfq.TryGetProperty(klineType, out var klineData) || klineData.ValueKind != JsonValueKind.Array) { - _logger.LogWarning("腾讯财经无K线数据: {Symbol}", symbol); - return new List(); + throw new Exception($"腾讯财经历史数据接口K线数据格式异常,标的: {symbol}"); } var result = new List();