metube/API分析修正报告.md
柯孟凯 2057657db3 提交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调研,等待审核员进一步指导
2025-09-23 11:01:17 +08:00

165 lines
No EOL
5.6 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.

# 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端点验证