- api/report/ 包:query(连库+SQL)/ views(2 视图)/ serializers(OpenAPI)/ tests(17 单测) - urls.py 注册 news/reports/、news/events/;settings.py SPECTACULAR 加「日报」tag - .env.example 补 NEWS_DB_* 占位配置;README/continuation.md 更新 - docs/news_report_api.md 使用手册;CLAUDE*.md 修正 CLI 路径为 finance/ 前缀
djapi
Django 5.2 项目,提供 A 股金融数据 API 和新闻联播视频处理能力。
架构
djapi/
├── manage.py # Django 入口
├── djapi/ # 项目配置
│ ├── settings.py # Django 设置、CORS、DRF
│ ├── urls.py # 根路由 + OpenAPI schema
│ └── wsgi.py # WSGI 入口
├── api/ # 唯一 app
│ ├── views.py # 视图层(薄转发,调用 stock 模块)
│ ├── urls.py # /api/* 路由(~20 个端点)
│ ├── stock/ # 股票数据模块
│ │ ├── config.py # Tushare token、扫描参数
│ │ ├── stock_utils.py # 通用工具(tscode 校验、NaN 修正、view 包装器)
│ │ ├── stock_basic.py # 日线行情、基本信息、行业查询
│ │ ├── getStockParam.py # 个股参数
│ │ ├── getStockEp.py # TTM / 季度 EPS
│ │ ├── getIndexs.py # 指数行情
│ │ ├── stockMargin.py # 融资融券
│ │ ├── getStockFina.py # 财务报表分析
│ │ ├── getStockDiv2.py # 股息率计算(TTM 分红 + 毛刺平滑)
│ │ ├── smoothBrush.py # 数据平滑算法
│ │ ├── divSearch.py # 全市场股息率批量扫描
│ │ ├── xwlbDaily.py # 新闻联播数据查询
│ │ └── mysqlHandle.py # MySQL 连接封装
│ └── video/ # 新闻联播视频处理(独立模块)
│ ├── getVideo5.py # 主流程:抓取→下载→识别→入库
│ ├── audioRead.py # 音频转换、分割、ASR 识别
│ ├── deepseek.py # DeepSeek API 封装
│ ├── ai.py # AI 调用函数
│ ├── newsProcess.py # 新闻分割+标题提取
│ └── main.py # 定时任务入口
├── static/ # 静态文件(collect 后的 admin 资源)
├── uwsgi.ini # uWSGI 配置
└── requirements.txt # Python 依赖
数据流
股票 API:HTTP 请求 → views.py 提取参数 → viewFunc_tsCodeAndDate() 统一包装 → stock/*.py 调用 Tushare API → pandas DataFrame → JsonResponse
视频处理:main.py → getVideo5.py 抓取 CCTV 视频页 → yt-dlp 下载 → ffmpeg 提取 MP3 → pydub 静音分割 → DashScope Paraformer ASR → MySQL → newsProcess.py 调用 DeepSeek 分割新闻+生成标题 → MySQL
外部依赖
| 服务 | 用途 | 相关文件 |
|---|---|---|
| Tushare | A 股行情、财报、分红、指数 | api/stock/*.py |
| DeepSeek API | 新闻文本分割、摘要 | api/video/deepseek.py, ai.py |
| DashScope (Qwen) | ASR 语音识别、文本纠错 | api/video/audioRead.py, ai.py |
| MySQL | 股票数据、新闻联播数据 | mysqlHandle.py(stock 和 video 各一份) |
| yt-dlp + ffmpeg | 视频下载、音频提取 | api/video/getVideo5.py |
快速开始
# 安装依赖
pip install -r requirements.txt
# 开发服务器
python manage.py runserver 0.0.0.0:8000
# 数据库初始化
python manage.py migrate
python manage.py createsuperuser
# uWSGI 部署
uwsgi --ini uwsgi.ini
uwsgi --reload uwsgi.pid
uwsgi --stop uwsgi.pid
API 概览
基础 URL:/api/
| 端点 | 参数 | 说明 |
|---|---|---|
stockbasic/ |
tscode, start_date, end_date | 日线行情 |
stockinfo/ |
tscode | 个股基本信息 |
stockparam/ |
tscode, start_date, end_date | 个股参数(市值等) |
industrys/ |
industry | 按行业查股票列表 |
indexByName/ |
index_name | 按名称查指数 |
indexDatas/ |
index_name, start_date, end_date | 指数日行情 |
stockep/ |
tscode, start_date, end_date | TTM EPS |
quarterlyEps/ |
tscode, start_date, end_date | 季度 EPS |
finance/ |
tscode, start_date, end_date | 财务报表分析 |
getdiv/ |
tscode, start_date, end_date | 股息率(含 TTM) |
dailymargin/ |
trade_date, exchange_id | 每日融资融券汇总 |
stockmargin/ |
tscode, start_date, end_date | 个股融资融券 |
xwlbNews/ |
start_date, end_date | 新闻联播(原始识别文本) |
xwlbFine/ |
start_date, end_date | 新闻联播(AI 分割后) |
news/reports/ |
report_type, start_date, end_date, id | 日报查询(默认最近 24h;传 id 返回单份详情含事件) |
news/events/ |
days, importance, report_type, section, limit | 重要事件聚合(跨日报,最近 N 天 importance≥阈值) |
日报查询接口详细说明见 docs/news_report_api.md(表结构见 djapi/docs/db_schema.md)。
API 文档(Swagger):/api/docs/
OpenAPI Schema:/api/schema/
部署
- 服务器路径:
/home/simon/myquant/djapi/ - uWSGI 监听
127.0.0.1:5004,nginx 反向代理 - 域名:
api.doorcome.cn、echart.doorcome.cn - 虚拟环境:
/opt/miniconda/envs/django - Python 版本:3.10
TODO
- 将硬编码的 API Key / Token / 数据库密码迁移到环境变量
- 视图片段从
JsonResponse迁移到 DRF ViewSet + Serializer,完善 Swagger 文档 - 添加接口限流和认证机制
- 补充单元测试(当前 tests.py 为空)
config.py中的交易所、行业列表等改为可动态配置- video 模块的
db.sqlite3不应随代码提交,添加到.gitignore - 数据库密码、API Key 出现在多个
__pycache__/*.pyc中,需要清理历史 - video 模块中废弃脚本(
wasted/)确认后清理