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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user