metube/初始分析报告.md
柯孟凯 167a843eb1 添加tingdao.org yt-dlp扩展器开发的初始分析报告
详细分析了以下内容:
- tingdao.org网站技术架构和音频托管方式
- yt-dlp扩展器开发机制和要求
- Metube项目集成方式和配置方法
- 发现的API端点和音频URL结构
- 技术挑战和下一步开发计划
- 风险评估和合规性考虑

为后续深入API分析和扩展器开发奠定基础。
2025-09-23 10:35:52 +08:00

150 lines
No EOL
4.9 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 yt-dlp 扩展器开发 - 初始分析报告
## 项目概述
本项目旨在为 yt-dlp 开发一个新的扩展器,使其能够支持从 tingdao.org 网站下载音频内容,并集成到 Metube 服务中。
## 目标网站分析
### 网站基本信息
- **网站URL**: https://www.tingdao.org/
- **测试页面**: https://www.tingdao.org/dist/#/Media?device=mobile&id=11869
- **网站类型**: 单页应用程序 (SPA)
- **内容类型**: 基督教音频内容网站
- **音频主题**: 2018年10月 柏训师生会:神永远的旨意-基督与教会
### 技术架构分析
- **前端框架**: 基于Hash路由的SPA应用
- **音频托管**: 腾讯云VOD (Video on Demand) 服务
- **URL模式**: `#/Media?device=mobile&id={媒体ID}`
### 音频源分析
测试页面中发现的音频信息:
- **当前音频URL**: `http://1256958968.vod2.myqcloud.com/20b3381avodgzp1256958968/4732b8e35285890800479422041/4fJXeW9XQvoA.mp3?t=6913eeca&us=895305ba2a&sign=4606753c5c5784116031538a27c6960d`
- **音频格式**: MP3
- **时长**: 4552.248889 秒 (约76分钟)
- **播放列表**: 共8集音频内容
### API端点发现
通过网络监控发现的API端点
- **端点URL**: `https://www.tingdao.org/Record/is_voi`
- **请求方法**: POST
- **当前状态**: 需要参数,返回"参数不完整"错误
### 页面结构分析
- **播放控制**: 包含播放/暂停、进度条、音量控制
- **时间控制**: 支持 ±15秒 快进/快退
- **播放列表**: 显示8集完整系列
- **媒体元素**: 页面包含1个audio元素支持实时播放
## yt-dlp 扩展器开发机制研究
### 核心概念
- **InfoExtractor**: 所有扩展器的基类
- **_VALID_URL**: 正则表达式定义支持的URL模式
- **_real_extract**: 核心方法,负责提取媒体信息
### 开发要求
1. 继承 `InfoExtractor`
2. 定义 `IE_NAME` 扩展器名称
3. 设置 `_VALID_URL` 正则模式
4. 实现 `_real_extract(self, url)` 方法
5. 返回标准化的媒体信息字典
### 扩展器文件位置
- **标准位置**: `yt_dlp/extractor/` 目录
- **文件命名**: 通常以网站名命名 (如 `tingdao.py`)
- **注册方式**: 添加到 `_extractors.py` 文件
## Metube 集成分析
### 项目架构理解
- **后端**: Python + aiohttp + Socket.IO
- **下载引擎**: `app/ytdl.py` - 管理下载队列和yt-dlp集成
- **主入口**: `app/main.py` - Web服务器和API路由
- **前端**: Angular应用位于 `ui/` 目录
### yt-dlp 集成方式
- **配置方法**: 通过 `YTDL_OPTIONS` 环境变量或配置文件
- **扩展加载**: yt-dlp 自动加载安装的扩展器
- **无需修改**: Metube 无需代码修改即可支持新扩展器
### 配置选项
```python
# 在 app/main.py 中的配置加载
YTDL_OPTIONS = json.loads(os.environ.get('YTDL_OPTIONS', '{}'))
```
## 当前挑战和待解决问题
### 1. API结构不明确
- 需要深入分析获取音频列表的完整API
- 了解参数结构和认证机制
- 确定如何获取播放列表中所有音频的信息
### 2. 音频URL获取机制
- 当前音频URL包含签名参数 (`?t=&us=&sign=`)
- 需要了解签名生成机制
- 确定URL的有效期和刷新机制
### 3. 播放列表支持范围
- 单个音频下载 vs 完整播放列表下载
- 如何处理系列音频的批量下载
- 是否支持网站全站音频搜索
## 下一步计划
### 阶段1: 深入API分析
1. 使用浏览器开发者工具深入分析页面JavaScript
2. 逆向工程API调用方式和参数结构
3. 理解音频URL生成和认证机制
4. 测试不同媒体ID的API响应
### 阶段2: 扩展器开发
1. 基于API分析结果设计扩展器架构
2. 实现URL模式匹配和参数提取
3. 开发音频信息提取逻辑
4. 支持单个和播放列表下载
### 阶段3: 集成测试
1. 在本地环境集成新扩展器
2. 配置Metube使用本地yt-dlp
3. 使用浏览器进行功能测试
4. 验证下载流程和错误处理
### 阶段4: 优化完善
1. 添加错误处理和重试机制
2. 优化性能和用户体验
3. 考虑反爬虫对策
4. 编写测试用例和文档
## 技术决策点
### 待决策问题
1. **获取范围**: 单个音频 vs 播放列表 vs 全站下载
2. **API复杂度**: 是否需要处理登录认证
3. **反爬虫策略**: 用户代理模拟、请求延迟等
4. **部署方式**: 本地扩展 vs fork yt-dlp 项目
### 推荐方案
- **优先级**: 先支持单个音频,再扩展到播放列表
- **集成方式**: 本地yt-dlp扩展器便于测试和调试
- **开发策略**: 增量开发,逐步完善功能
## 风险评估
### 技术风险
- API可能有复杂的认证机制
- 音频URL签名可能难以逆向
- 网站可能有反爬虫保护
### 法律合规
- 确保仅用于合法的个人使用
- 遵守网站的使用条款
- 不用于商业用途或大规模爬取
---
**报告生成时间**: 2025-09-23
**分析范围**: 初步技术可行性分析
**下一步**: 深入API结构分析