提交API分析修正报告,回应审核员对167a843的审核意见

本次提交内容:
- 承认初步分析中的重大遗漏和错误
- 确认/Record/exhibitions是获取系列信息的正确端点
- 明确/Record/is_voi仅用于收藏状态标记功能
- 补充yt-dlp开发的完整checklist(_TESTS、_extractors.py等)
- 详细说明Metube中部署自定义extractor的具体方式
- 制定基于正确API架构的技术方案框架

修正要点:
1. API端点:exhibitions负责系列信息,is_voi负责收藏状态
2. 数据结构:mediaList包含播放列表,videos_url是备用源
3. 开发规范:补全yt-dlp官方开发要求和测试标准
4. 部署方案:明确插件目录、自编译、官方PR三种方式

当前状态:正在进行深入API调研,等待审核员进一步指导
This commit is contained in:
柯孟凯 2025-09-23 11:01:17 +08:00
parent 167a843eb1
commit 2057657db3

165
API分析修正报告.md Normal file
View file

@ -0,0 +1,165 @@
# tingdao.org API分析修正报告
## 审核员反馈确认
根据审核员对提交 167a843 的审核意见,我承认初步分析存在以下重大遗漏:
### ❌ 初步分析的错误和遗漏
1. **API端点识别错误**
- ❌ 错误:认为 `/Record/is_voi` 是获取音频信息的主要API
- ✅ 正确:`/Record/exhibitions` 负责返回系列信息
- ✅ 正确:`/Record/is_voi` 仅用于标记收藏状态需cookie uid但可留空
2. **数据结构分析不足**
- ❌ 遗漏:没有发现 mediaList 播放列表结构
- ❌ 遗漏:未分析重要字段含义
- ✅ 需补充videos_url备用源、add_time发布时间等字段
3. **yt-dlp开发规范不完整**
- ❌ 遗漏_TESTS 测试用例定义
- ❌ 遗漏_extractors.py 更新要求
- ❌ 遗漏POST请求的headers/data格式规范
4. **Metube部署方案不具体**
- ❌ 模糊部署自定义extractor的具体方式
- ✅ 需明确:升级/自编译yt-dlp vs 插件目录方案
## 重新调研发现
### 🔍 正在进行的深入API分析
#### 当前已确认信息:
- **测试页面**`https://www.tingdao.org/dist/#/Media?device=mobile&id=11869`
- **媒体ID**`11869`
- **播放列表**包含8个音频项目
- **当前音频URL**`http://1256958968.vod2.myqcloud.com/.../音频.mp3?签名参数`
#### 页面结构分析:
```
播放列表结构:
1. 2018年10月 柏训师生会:神永远的旨意-基督与教会 01 于宏洁
2. 2018年10月 柏训师生会:神永远的旨意-基督与教会 02 于宏洁
3. 2018年10月 柏训师生会:神永远的旨意-基督与教会 03 我们的使命:称为耶稣基督道成肉身的见证人 于宏洁
4. 2018年10月 柏训师生会:神永远的旨意-基督与教会 04 异象与使命的落实VIP模式 于宏洁
5. 2018年10月 柏训师生会:神永远的旨意-基督与教会 05 异象与使命的落实:本于祂,倚靠祂,归于祂 于宏洁
6. 2018年10月 柏训师生会:神永远的旨意-基督与教会 06 异象与使命的落实:同一心灵,同一脚踪 于宏洁
7. 2018年10月 柏训师生会:神永远的旨意-基督与教会 07 异象与使命的落实:成全圣徒,各尽其职 于宏洁
8. 2018年10月 柏训师生会:神永远的旨意-基督与教会 08 异象与使命的落实:凡事长进,连于元首基督 于宏洁
```
#### 网络请求监控结果:
- 已设置全面的 Fetch 和 XHR 监控
- 正在测试 `/Record/exhibitions` 端点
- 同时验证 `/Record/is_voi` 的收藏功能
## 修正后的技术方案框架
### 1. 正确的API调用逻辑
```python
# 主要API获取播放列表信息
exhibitions_url = 'https://www.tingdao.org/Record/exhibitions'
exhibitions_data = self._download_json(
exhibitions_url,
media_id,
data=f'id={media_id}'.encode(),
headers={'Content-Type': 'application/x-www-form-urlencoded'}
)
# 解析 mediaList 结构
for item in exhibitions_data.get('mediaList', []):
# 提取完整字段信息
entry = {
'id': item['id'],
'title': item['title'],
'url': item['video_url'], # 主要音频源
'alt_url': item['videos_url'], # 备用音频源
'timestamp': item['add_time'], # 发布时间
'thumbnail': item.get('img_url'),
'ext': 'mp3'
}
```
### 2. yt-dlp开发Checklist
基于官方CONTRIBUTING.md
#### ✅ 必需组件:
- [ ] `_VALID_URL` 正则匹配
- [ ] `_TESTS` 至少一个测试用例
- [ ] `_real_extract()` 核心提取方法
- [ ] 更新 `yt_dlp/extractor/_extractors.py`
- [ ] 通过 `hatch test TingdaoIE` 测试
- [ ] 通过 `hatch fmt --check` 代码检查
#### ✅ _TESTS 标准格式:
```python
_TESTS = [{
'url': 'https://www.tingdao.org/dist/#/Media?device=mobile&id=11869',
'info_dict': {
'id': '11869',
'title': '2018年10月 柏训师生会:神永远的旨意-基督与教会',
'ext': 'mp3',
},
'playlist_count': 8,
'params': {
'skip_download': True, # 用于CI测试
}
}]
```
### 3. Metube部署方案
#### 方案Ayt-dlp插件系统推荐
```bash
# 1. 创建插件目录结构
~/.config/yt-dlp/plugins/tingdao_plugin/
└── yt_dlp_plugins/
└── extractor/
└── tingdao.py
# 2. Docker volume挂载
volumes:
- "./plugins:/app/.config/yt-dlp/plugins"
```
#### 方案B自编译yt-dlp
- Fork yt-dlp仓库
- 添加extractor到官方目录
- 重新构建Metube Docker镜像
#### 方案C升级yt-dlp版本
- 等待官方接受PR
- 使用标准yt-dlp更新
## 下一步深入调研计划
### 阶段1完成API端点验证
- [ ] 确认 `/Record/exhibitions` 完整响应格式
- [ ] 验证 mediaList 数据结构和所有字段
- [ ] 测试 `/Record/is_voi` 收藏功能机制
- [ ] 分析音频URL签名和有效期机制
### 阶段2extractor实现设计
- [ ] 基于真实API设计URL匹配规则
- [ ] 实现单音频和播放列表支持
- [ ] 添加备用源和错误处理
- [ ] 编写完整的测试用例
### 阶段3集成测试验证
- [ ] 本地yt-dlp测试
- [ ] Metube集成测试
- [ ] 浏览器功能验证
- [ ] 性能和稳定性测试
## 待审核员确认的问题
1. **API调研重点**是否重点关注exhibitions端点的完整响应结构
2. **实现优先级**:单音频支持 vs 完整播放列表支持的开发顺序?
3. **部署策略**更倾向于插件方式还是官方PR方式
4. **测试范围**除了当前测试URL是否需要发现更多测试用例
---
**报告时间**2025-09-23
**状态**API深入调研进行中
**下一步**基于审核员指导继续API端点验证