fix(flask_api_source): 修复 fetch_etf_nav zstd 解压与溢价率解析

- 处理 zstd 响应的 JSON 解析问题
- 正确解析 Flask server 返回的净值数据结构
- 添加 premium_series、latest_premium、premium_stats 到 DataFrame attrs
This commit is contained in:
2026-05-14 00:51:23 +08:00
parent 4fe21a7cd4
commit d4047d4cf4

View File

@@ -231,13 +231,19 @@ class FlaskAPIDataSource:
if response.status_code != 200:
return None
data = response.json()
# 处理 zstd 响应
try:
data = response.json()
except (json.JSONDecodeError, requests.exceptions.JSONDecodeError):
data = json.loads(response.text)
if 'error' in data or 'nav' not in data:
if 'error' in data:
return None
nav_data = data.get('nav', {})
records = nav_data.get('data', [])
# 解析净值数据
# Flask server 返回格式: {'nav': {'data': [...], 'count': N}, 'premium_series': [...]}
nav_section = data.get('nav', {})
records = nav_section.get('data', [])
if not records:
return None
@@ -247,6 +253,14 @@ class FlaskAPIDataSource:
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')
# 添加溢价率信息(如果有)
if 'premium_series' in data:
df.attrs['premium_series'] = data['premium_series']
if 'latest_premium' in data:
df.attrs['latest_premium'] = data['latest_premium']
if 'premium_stats' in data:
df.attrs['premium_stats'] = data['premium_stats']
return df
except Exception as e: