sinastock / README.md
Spooker's picture
Upload 16 files
7c3e988 verified
---
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`
服务状态。
```bash
curl https://<your-space-subdomain>.hf.space/health
```
返回示例:
```json
{
"ok": true,
"started_at": "2026-04-25T08:00:00.000",
"watched_codes": 100,
"cached_quotes": 100
}
```
### `GET /codes`
返回当前监听的股票代码列表。
```bash
curl https://<your-space-subdomain>.hf.space/codes
```
### `GET /latest?limit=100`
返回最新缓存行情列表,默认最多 100 条。
```bash
curl "https://<your-space-subdomain>.hf.space/latest?limit=20"
```
### `GET /latest/{code}`
查询单只股票最新行情。
```bash
curl https://<your-space-subdomain>.hf.space/latest/sh600519
```
也可以用 query 参数:
```bash
curl "https://<your-space-subdomain>.hf.space/latest?code=sh600519"
```
### `GET /batch?codes=...`
查询多只股票最新行情。
```bash
curl "https://<your-space-subdomain>.hf.space/batch?codes=sh600519,sz000001"
```
## 返回字段
`/latest` 返回的每条行情大致包含:
```json
{
"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 推送
```bash
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` 末尾修改:
```dockerfile
CMD ["sina-realtime-api", "--stocks", "stocks_1000.txt", "--output", "data", "--chunk-size", "500"]
```
或者全量:
```dockerfile
CMD ["sina-realtime-api", "--stocks", "stocks_all.txt", "--output", "data", "--chunk-size", "500"]
```
全量沪深 A 股会建立更多 WebSocket 连接,不建议一开始就在 Hugging Face 免费资源上直接跑全量。
## 本地 Docker 测试
```bash
docker build -t sina-real-time-api .
docker run --rm -p 7860:7860 sina-real-time-api
curl http://localhost:7860/health
```
## 命令行参数
```text
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 休眠,重启后内存缓存会清空,需要等待上游重新推送行情。