sinastock / README.md
Spooker's picture
Upload 16 files
7c3e988 verified
metadata
title: Sina Real Time API
emoji: 📈
colorFrom: blue
colorTo: green
sdk: docker
app_port: 7860
pinned: false

Sina Real Time API

把原来的新浪财经 WebSocket 实时行情采集器改成了一个可部署到 Hugging Face Spaces 的 Docker API 服务。

服务启动后会:

  1. 连接 wss://hq.sinajs.cn/wskt 实时推送接口;
  2. --chunk-size 拆分为多个并行 WebSocket 连接;
  3. 将最新行情保存在内存中,供 HTTP API 查询;
  4. 同时继续将原始记录写入每日 CSV:data/data_YYYY-MM-DD.csv

API

GET /health

服务状态。

curl https://<your-space-subdomain>.hf.space/health

返回示例:

{
  "ok": true,
  "started_at": "2026-04-25T08:00:00.000",
  "watched_codes": 100,
  "cached_quotes": 100
}

GET /codes

返回当前监听的股票代码列表。

curl https://<your-space-subdomain>.hf.space/codes

GET /latest?limit=100

返回最新缓存行情列表,默认最多 100 条。

curl "https://<your-space-subdomain>.hf.space/latest?limit=20"

GET /latest/{code}

查询单只股票最新行情。

curl https://<your-space-subdomain>.hf.space/latest/sh600519

也可以用 query 参数:

curl "https://<your-space-subdomain>.hf.space/latest?code=sh600519"

GET /batch?codes=...

查询多只股票最新行情。

curl "https://<your-space-subdomain>.hf.space/batch?codes=sh600519,sz000001"

返回字段

/latest 返回的每条行情大致包含:

{
  "received_at": "2026-04-25T09:30:00.123",
  "code": "sh600519",
  "name": "贵州茅台",
  "previous_close": "...",
  "open": "...",
  "price": "...",
  "high": "...",
  "low": "...",
  "bid1": "...",
  "ask1": "...",
  "volume": "...",
  "amount": "...",
  "trade_date": "...",
  "trade_time": "...",
  "status": "...",
  "raw_fields": "新浪原始字段字符串",
  "fields": ["新浪原始字段数组"]
}

部署到 Hugging Face Spaces

方法一:网页上传

  1. 在 Hugging Face 创建一个新的 Space。
  2. SDK 选择 Docker
  3. 把本仓库所有文件上传到 Space。
  4. 等待自动 build 完成。
  5. 打开 https://<your-space-subdomain>.hf.space/health 测试。

方法二:Git 推送

git lfs install
huggingface-cli login

# 新建 Space 后,把下面的地址替换成你的 Space 仓库地址
git remote add space https://huggingface.co/spaces/<user>/<space-name>
git add .
git commit -m "Deploy Sina real-time API"
git push space main

切换股票池

默认 Docker 启动命令使用 stocks_100.txt,适合先部署验证。你可以在 Dockerfile 末尾修改:

CMD ["sina-realtime-api", "--stocks", "stocks_1000.txt", "--output", "data", "--chunk-size", "500"]

或者全量:

CMD ["sina-realtime-api", "--stocks", "stocks_all.txt", "--output", "data", "--chunk-size", "500"]

全量沪深 A 股会建立更多 WebSocket 连接,不建议一开始就在 Hugging Face 免费资源上直接跑全量。

本地 Docker 测试

docker build -t sina-real-time-api .
docker run --rm -p 7860:7860 sina-real-time-api
curl http://localhost:7860/health

命令行参数

Options:
  -s, --stocks <FILE>        股票列表文件 [default: stocks_100.txt]
  -o, --output <DIR>         输出目录 [default: data]
      --chunk-size <N>       每个连接的股票数 [default: 500]
      --buffer <N>           通道缓冲容量 [default: 131072]
      --api-host <HOST>      API host [default: 0.0.0.0]
      --api-port <PORT>      API port;未设置时读取 PORT 环境变量,否则 7860
  -h, --help
  -V, --version

注意事项

  • 非 A 股交易时段,新浪上游可能不推送新数据;这时 /health 可能正常,但 /latest/{code} 可能暂时返回 quote_not_ready
  • Hugging Face Spaces 的文件系统不适合作为长期数据库,CSV 更适合调试或短期缓存;生产环境建议接入数据库或对象存储。
  • 如果 Space 休眠,重启后内存缓存会清空,需要等待上游重新推送行情。