From 167a843eb170c79422e4e7a83cc52aa8a21a2e78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=AF=E5=AD=9F=E5=87=AF?= <282913448@qq.com> Date: Tue, 23 Sep 2025 10:35:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0tingdao.org=20yt-dlp=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E5=99=A8=E5=BC=80=E5=8F=91=E7=9A=84=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=88=86=E6=9E=90=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 详细分析了以下内容: - tingdao.org网站技术架构和音频托管方式 - yt-dlp扩展器开发机制和要求 - Metube项目集成方式和配置方法 - 发现的API端点和音频URL结构 - 技术挑战和下一步开发计划 - 风险评估和合规性考虑 为后续深入API分析和扩展器开发奠定基础。 --- 初始分析报告.md | 150 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 初始分析报告.md diff --git a/初始分析报告.md b/初始分析报告.md new file mode 100644 index 0000000..ebf4512 --- /dev/null +++ b/初始分析报告.md @@ -0,0 +1,150 @@ +# 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结构分析 \ No newline at end of file