Files
simon 6ec198687c feat(djapi): 新增日报查询 API(news/reports + news/events)及文档
- 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/ 前缀
2026-08-05 20:51:42 +08:00

124 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` |
## 快速开始
```bash
# 安装依赖
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`](../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/`)确认后清理