Files
myquant/djapi/continuation.md
T
2026-06-17 20:48:42 +08:00

104 lines
4.2 KiB
Markdown
Raw 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.
# continuation.md
## 当前项目状态
djapi — Django 5.2 金融数据 API 项目,2026-06-17 已部署。
服务器:`simon@doorcome.cn`,路径 `/home/simon/myquant/djapi/`,虚拟环境 `/opt/miniconda/envs/django/`
## 已完成
### 1. 安全:密钥统一管理
- 所有密钥 → 环境变量,`.env` 统一管理
- `djapi/env_loader.py`Django 端)+ `api/video/env.py`video 端)双加载器
- 共享 `MySQLDB``api/utils/mysql_handler.py`
- `.env.example``.gitignore`
### 2. 代码质量
- `api/views.py`227 → ~130 行,消除重复
- `api/stock/stock_utils.py``viewFunc_singleParam()` 包装器
- `api/stock/config.py`:拆分为 config / strategy_config / scan_config
### 3. drf-spectacular 集成
- 14 端点 `@api_view` + `@extend_schema`8 tag 分组
- 13 SerializerSwagger `/api/docs/`
### 4. 股息率 API 优化
- **删除** `api/stock/getDivData_AK.py`akshare 版),`/api/getdivak/` 路由移除
- **优化** `api/stock/getStockDiv2.py`
- TTM 计算:`calculate_ttm_div` 行级循环 O(n²) → `rolling('360D').sum()` O(n)
- 删除向前填充逻辑(~30 行),避免与毛刺平滑冲突
- **修复** `api/stock/smoothBrush.py`if/elif 分支中 prev_valid/next_valid 赋值反了
### 5. video 模块重构与 Bug 修复
- 新增 `api/video/env.py` — .env 加载
- `newsRedo.py` 重写 — 三分支智能重处理
- **P0 修复**`getVideo5.py` 日期校验 bug`start_date > start_date``start_date > end_date`
- **P1 清理**:删除 `ai.py`(两个函数均为死代码),清理 `newsProcess.py` 冗余 import
- **P2 修复**`audioRead.py``transcribe_audio` 异常时返回 `['', '']` 统一类型;`analyze_and_correct_text` 防御 None
- **P3 修复**`newsProcess.py``news_to_db()` JSON 解析自适应 dict/listDeepSeek json_object 模式返回 dict 包装)
### 6. 文档与测试
- `CLAUDE.md``README.md``continuation.md`
- 18 个单元测试
## video 目录文件现状(10 个 .py
| 文件 | 职责 |
|------|------|
| `env.py` | .env 加载 |
| `getVideo5.py` | 主流程:抓取→下载→ASR→入库 |
| `audioRead.py` | 音频转换、分割、ASR 识别、文本纠错 |
| `deepseek.py` | DeepSeek API 封装(类 + `deepseek_text` 函数,支持 `response_format` |
| `newsProcess.py` | AI 新闻分割+标题提取,JSON 自适应解析 |
| `newsRedo.py` | 手动重处理(三分支) |
| `main.py` | 定时任务入口(当天) |
| `main_videos.py` | 批量补缺(扫描缺失日期) |
| `mysqlHandle.py` | MySQLDB 重新导出 |
## 所有 API 端点(14 个)
| 端点 | 数据源 | 说明 |
|------|--------|------|
| `stockbasic/` | Tushare | 日线行情 |
| `stockinfo/` | Tushare | 个股基本信息 |
| `industrys/` | Tushare | 行业股票列表 |
| `stockparam/` | Tushare | 个股参数 |
| `stockep/` | Tushare | TTM EPS |
| `quarterlyEps/` | Tushare | 季度 EPS |
| `indexByName/` | Tushare | 指数查询 |
| `indexDatas/` | Tushare | 指数行情 |
| `dailymargin/` | Tushare | 每日融资融券汇总 |
| `stockmargin/` | Tushare | 个股融资融券 |
| `finance/` | Tushare | 财务报表分析 |
| `getdiv/` | Tushare | 股息率(TTM rolling + 毛刺平滑) |
| `xwlbNews/` | MySQL | 新闻联播原始文本 |
| `xwlbFine/` | MySQL | 新闻联播 AI 精编 |
## 部署
```bash
# 全量同步
rsync -avz --delete \
--exclude='.env' --exclude='db.sqlite3' \
--exclude='*.log' --exclude='uwsgi.pid' \
--exclude='__pycache__/' --exclude='*.pyc' \
--exclude='xwlb_video/' --exclude='audio_processing/' \
/Users/summer/Downloads/cc-cursor/djapi/ \
simon@doorcome.cn:/home/simon/myquant/djapi/
# 单文件同步必须写完整路径
# 正确:rsync api/views.py simon@...:/.../djapi/api/views.py
# 重启
ssh simon@doorcome.cn "kill \$(lsof -ti:5004); sleep 2; /opt/miniconda/envs/django/bin/uwsgi --ini /home/simon/myquant/djapi/uwsgi.ini"
```
## 关键设计决策
- video 模块保护、向后兼容优先、不使用 python-dotenv
- rsync 陷阱:多文件源会展平路径
- `.env` 双加载:Django 端 `djapi/env_loader.py` + video 端 `api/video/env.py`
- 股息率 TTM 用 `rolling('360D').sum()` 向量化,不手动循环
- DeepSeek json_object 模式返回 dictnewsProcess 自适应提取 list