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

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

4.9 KiB
Raw Blame History

tingdao.org yt-dlp 扩展器开发 - 初始分析报告

项目概述

本项目旨在为 yt-dlp 开发一个新的扩展器,使其能够支持从 tingdao.org 网站下载音频内容,并集成到 Metube 服务中。

目标网站分析

网站基本信息

技术架构分析

  • 前端框架: 基于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 无需代码修改即可支持新扩展器

配置选项

# 在 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结构分析