Files
auv/backend/services/sina.py
T
2026-07-05 21:29:17 +08:00

41 lines
1.5 KiB
Python

"""新浪财经 API 客户端(K线降级数据源)"""
import httpx
import json
from typing import List
async def fetch_history(code: str, days: int = 90) -> List[dict]:
"""获取新浪财经日K线数据"""
market = "sh" if code.startswith(("688", "60")) else "bj" if code.startswith(("920", "8", "4")) else "sz"
symbol = f"{market}{code}"
url = f"https://money.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_MarketData.getKLineData?symbol={symbol}&scale=240&ma=no&datalen={days}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
}
async with httpx.AsyncClient() as client:
try:
resp = await client.get(url, headers=headers, timeout=10)
if resp.status_code != 200:
return []
text = resp.text
if not text or text.strip() in ("", "null"):
return []
arr = json.loads(text)
if not isinstance(arr, list):
return []
result = []
for item in arr:
result.append({
"date": item.get("day", ""),
"open": float(item.get("open", 0) or 0),
"close": float(item.get("close", 0) or 0),
"high": float(item.get("high", 0) or 0),
"low": float(item.get("low", 0) or 0),
"volume": int(item.get("volume", 0) or 0),
})
return result
except Exception:
return []