StockDataAPI 是一个高性能的股票数据API服务,提供实时股票价格查询功能。支持多数据源(天行API、腾讯、新浪),具备智能缓存、请求合并、限流控制等特性。
- 🚀 高性能: 异步处理,支持高并发
- 🔄 智能API策略: A股使用天行API,港股使用沧海数据API
- 💾 智能缓存: Redis缓存,提升响应速度
- 🕐 定时更新: 每天凌晨2点自动更新股票名称缓存
- 🔀 请求合并: 自动合并相同请求,减少API调用
- 🛡️ 限流控制: 防止API调用超限
- 📊 实时数据: 交易时间实时更新
- 🔧 易于扩展: 模块化设计,便于功能扩展
- 🎯 成本优化: 大幅减少沧海API使用量
- 🔍 智能搜索: 支持股票代码、名称、拼音、拼音缩写搜索
- main.py: 主程序,处理HTTP请求
- tsanghi_api.py: 沧海数据API接口
- backup_api.py: 备用API(腾讯、新浪)
- tian_api.py: 天行API接口
- models.py: 数据模型定义
- constants.py: 常量管理
- utils.py: 工具类集合
- stock_search.py: 股票搜索索引模块
HTTP请求 → 请求合并 → 缓存检查 → 股票分类 → 分别调用API → 数据合并 → 响应返回
- A股(sh、sz、bj开头): 天行API → 腾讯、新浪备用
- 港股(hk开头): 沧海数据API → 天行、腾讯、新浪备用
- Python 3.8+
- Redis 服务器
- 天行API密钥
- 沧海数据API密钥(可选,推荐)
pip install -r requirements.txt编辑 config/config.yaml 文件:
environment: production # 或 test
api_key: your_tianapi_key
api_key_test: your_test_key
# 沧海数据API密钥(推荐配置)
tsanghi_api_key: your_tsanghi_api_key
tsanghi_api_key_test: your_tsanghi_test_key
redis:
host: localhost
port: 6379
db: 0
max_connections: 10
server:
host: 0.0.0.0
port: 8000# 开发模式
python main.py
# 生产模式
gunicorn main:app -c gunicorn_conf.pyGET /get_stock_price/{stock_codes}
参数:
stock_codes: 股票代码,多个代码用逗号分隔
示例:
GET /get_stock_price/sh600001,sz000001,hk00700
响应:
{
"request_id": "Request-123-abc123",
"results": {
"sh600001": {
"source": "API",
"data": "邯郸钢铁,10.200,10.200,10.500,10.800,10.150,10.490,10.510,100000,1050000,100,10.490,200,10.480,300,10.470,400,10.460,500,10.450,100,10.510,200,10.520,300,10.530,400,10.540,500,10.550,2025-07-23,10:30:00,00"
}
}
}GET /scheduler/status
获取定时任务状态
响应:
{
"request_id": "Status-20250123-143000",
"scheduler_status": {
"status": "running",
"next_run": "2025-01-24T02:00:00",
"last_run": "2025-01-23T02:00:00"
}
}POST /scheduler/force_update
强制立即更新缓存
响应:
{
"request_id": "ForceUpdate-20250123-143000",
"success": true,
"message": "强制更新缓存完成"
}GET /api/stock/search
股票搜索接口,支持代码、名称、拼音、拼音缩写搜索
参数:
q: 搜索关键词(必填)limit: 返回结果数量限制(可选,默认10,最大50)fuzzy: 是否启用模糊搜索(可选,默认true)
示例:
GET /api/stock/search?q=中央商场&limit=5
响应:
{
"request_id": "Search-20250726-152500",
"query": "中央商场",
"results": [
{
"code": "600280",
"name": "中央商场",
"exchange": "XSHG",
"full_code": "sh600280",
"pinyin": "zhongyangshangchang",
"pinyin_abbr": "zysc",
"match_type": "exact_name",
"score": 1.0
}
],
"total": 1,
"search_time": 0.015,
"index_info": {
"total_stocks": 5000,
"last_refresh": "2025-07-26T15:00:05.893208",
"exchanges": ["XSHG", "XSHE", "XHKG", "BJSE", "INDEX"]
}
}GET /api/stock/search/index
获取搜索索引信息
响应:
{
"request_id": "IndexInfo-20250726-152500",
"index_info": {
"total_stocks": 5000,
"last_refresh": "2025-07-26T15:00:05.893208",
"exchanges": ["XSHG", "XSHE", "XHKG", "BJSE", "INDEX"]
}
}POST /api/stock/search/refresh
手动刷新搜索索引
响应:
{
"request_id": "RefreshIndex-20250726-152500",
"success": true,
"message": "搜索索引刷新成功",
"index_info": {
"total_stocks": 5000,
"last_refresh": "2025-07-26T15:00:05.893208",
"exchanges": ["XSHG", "XSHE", "XHKG", "BJSE", "INDEX"]
}
}environment: 运行环境(production/test)api_key: 天行API密钥api_key_test: 测试环境API密钥
host: Redis服务器地址port: Redis端口db: 数据库编号max_connections: 最大连接数
host: 监听地址port: 监听端口
tianapi: 天行API限流配置tencent: 腾讯API限流配置sina: 新浪API限流配置
trading_hours_cache: 交易时间缓存时间(秒)non_trading_hours_cache: 非交易时间缓存时间(秒)
返回的CSV格式数据包含33个字段:
- 股票名称
- 开盘价
- 昨收价
- 当前价
- 最高价
- 最低价
- 买一价
- 卖一价
- 成交量
- 成交额 11-30. 买卖盘数据
- 日期
- 时间
- 状态
- A股: 上海证券交易所(sh开头)、深圳证券交易所(sz开头)
- 港股: 香港交易所(hk开头)
- 指数: 上证指数、深证指数等
StockDataAPI/
├── main.py # 主程序
├── backup_api.py # 备用API
├── tian_api.py # 天行API
├── models.py # 数据模型
├── constants.py # 常量定义
├── utils.py # 工具类
├── config.yaml # 配置文件
├── requirements.txt # 依赖文件
├── docs/ # 文档目录
└── test_*.py # 测试文件
- 新增数据源: 在
backup_api.py中添加新接口 - 新增字段: 在
models.py中扩展StockInfo类 - 新增常量: 在
constants.py中添加配置 - 新增工具: 在
utils.py中添加工具方法
# 运行所有测试
python test_models.py
python test_api_compatibility.py
python test_main_optimization.py- 交易时间: 5秒缓存
- 非交易时间: 20分钟缓存
- Redis Pipeline: 批量操作
- 请求合并: 相同请求自动合并
- 限流控制: 防止API调用超限
- 连接池: Redis连接复用
- 自动重试: API调用失败自动重试
- 降级策略: 主API失败自动切换到备用API
- 数据验证: 自动清理损坏的缓存数据
- DEBUG: 开发环境详细日志
- INFO: 一般信息日志
- WARNING: 警告信息
- ERROR: 错误信息
- 请求响应时间
- 缓存命中率
- API调用成功率
- 并发请求数
- Fork 项目
- 创建功能分支
- 提交更改
- 推送到分支
- 创建 Pull Request
本项目采用 MIT 许可证。
如有问题或建议,请通过以下方式联系:
- 提交 Issue
- 发送邮件
- 项目讨论区
版本: v2.0.0
更新时间: 2025-07-23
兼容性: 100% 向后兼容
功能: 专注于股票实时信息查询