详细分析了以下内容: - tingdao.org网站技术架构和音频托管方式 - yt-dlp扩展器开发机制和要求 - Metube项目集成方式和配置方法 - 发现的API端点和音频URL结构 - 技术挑战和下一步开发计划 - 风险评估和合规性考虑 为后续深入API分析和扩展器开发奠定基础。
4.9 KiB
4.9 KiB
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: 核心方法,负责提取媒体信息
开发要求
- 继承
InfoExtractor类 - 定义
IE_NAME扩展器名称 - 设置
_VALID_URL正则模式 - 实现
_real_extract(self, url)方法 - 返回标准化的媒体信息字典
扩展器文件位置
- 标准位置:
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 无需代码修改即可支持新扩展器
配置选项
# 在 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分析
- 使用浏览器开发者工具深入分析页面JavaScript
- 逆向工程API调用方式和参数结构
- 理解音频URL生成和认证机制
- 测试不同媒体ID的API响应
阶段2: 扩展器开发
- 基于API分析结果设计扩展器架构
- 实现URL模式匹配和参数提取
- 开发音频信息提取逻辑
- 支持单个和播放列表下载
阶段3: 集成测试
- 在本地环境集成新扩展器
- 配置Metube使用本地yt-dlp
- 使用浏览器进行功能测试
- 验证下载流程和错误处理
阶段4: 优化完善
- 添加错误处理和重试机制
- 优化性能和用户体验
- 考虑反爬虫对策
- 编写测试用例和文档
技术决策点
待决策问题
- 获取范围: 单个音频 vs 播放列表 vs 全站下载
- API复杂度: 是否需要处理登录认证
- 反爬虫策略: 用户代理模拟、请求延迟等
- 部署方式: 本地扩展 vs fork yt-dlp 项目
推荐方案
- 优先级: 先支持单个音频,再扩展到播放列表
- 集成方式: 本地yt-dlp扩展器,便于测试和调试
- 开发策略: 增量开发,逐步完善功能
风险评估
技术风险
- API可能有复杂的认证机制
- 音频URL签名可能难以逆向
- 网站可能有反爬虫保护
法律合规
- 确保仅用于合法的个人使用
- 遵守网站的使用条款
- 不用于商业用途或大规模爬取
报告生成时间: 2025-09-23 分析范围: 初步技术可行性分析 下一步: 深入API结构分析