# 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 分割后) | 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/`)确认后清理