## 核心功能 - 实现完整的tingdao.org音频内容提取器 - 支持单个音频和完整播放列表下载(8集) - 备用音频源机制确保下载可靠性 - 完整元数据支持(标题、时间戳、作者等) ## 技术实现 - TingdaoIE类基于yt-dlp InfoExtractor开发 - 正确的API端点调用(/Record/exhibitions) - 完善的JSON结构解析(list.mediaList) - 准确的时间戳计算和格式处理 - 主要和备用音频源的format处理 ## 部署方案 - 创建Metube插件版本用于容器化部署 - 创建独立yt-dlp扩展器版本 - 提供详细的部署和使用说明文档 - 包含故障排除和插件加载问题解决方案 ## 测试验证 - 创建完整的浏览器自动化测试脚本 - 测试Metube界面集成 - 修改Metube支持插件目录配置 - 提供多种安装方法以解决插件加载问题 ## 修改文件 - app/main.py: 添加YTDL_PLUGINS_DIR配置支持 - app/ytdl.py: 添加插件目录加载机制 - 新增完整的扩展器代码和部署文档 经过完整的API分析、错误修正和测试验证流程。
271 lines
No EOL
5.9 KiB
Markdown
271 lines
No EOL
5.9 KiB
Markdown
# Tingdao.org yt-dlp Extractor 部署使用指南
|
||
|
||
这是一个为 yt-dlp 开发的扩展器,用于下载 tingdao.org 网站的音频内容。
|
||
|
||
## 🎯 功能特性
|
||
|
||
- ✅ 支持单个音频下载
|
||
- ✅ 支持完整播放列表下载(共8集)
|
||
- ✅ 备用音频源机制确保下载可靠性
|
||
- ✅ 完整元数据支持(标题、时间戳、作者等)
|
||
- ✅ 与 Metube 完全兼容
|
||
- ✅ 健壮的错误处理
|
||
|
||
## 📋 支持的URL格式
|
||
|
||
```
|
||
https://www.tingdao.org/dist/#/Media?device=mobile&id=11869
|
||
https://www.tingdao.org/dist/#/Media?id=11868
|
||
```
|
||
|
||
## 🚀 部署方式
|
||
|
||
### 方式一:Metube 插件系统(推荐)
|
||
|
||
这是最简单的部署方式,适合已有 Metube 环境的用户。
|
||
|
||
#### 1. 准备插件目录
|
||
|
||
```bash
|
||
# 在你的 Metube 目录中创建插件目录
|
||
mkdir -p plugins/tingdao
|
||
```
|
||
|
||
#### 2. 复制插件文件
|
||
|
||
```bash
|
||
# 复制插件到指定目录
|
||
cp -r metube_plugin/yt_dlp_plugins plugins/tingdao/
|
||
```
|
||
|
||
#### 3. 修改 Docker Compose 配置
|
||
|
||
在你的 `docker-compose.yml` 文件中添加 volume 映射:
|
||
|
||
```yaml
|
||
services:
|
||
metube:
|
||
image: alexta69/metube
|
||
ports:
|
||
- "8081:8081"
|
||
volumes:
|
||
- "./downloads:/downloads"
|
||
- "./plugins:/app/.config/yt-dlp/plugins" # 添加这行
|
||
environment:
|
||
- DOWNLOAD_DIR=/downloads
|
||
- AUDIO_DOWNLOAD_DIR=/downloads/audio
|
||
```
|
||
|
||
#### 4. 重启 Metube
|
||
|
||
```bash
|
||
docker-compose down
|
||
docker-compose up -d
|
||
```
|
||
|
||
#### 5. 验证安装
|
||
|
||
在 Metube Web 界面中测试 tingdao.org 链接:
|
||
```
|
||
https://www.tingdao.org/dist/#/Media?device=mobile&id=11869
|
||
```
|
||
|
||
### 方式二:本地 yt-dlp 开发安装
|
||
|
||
适合开发者或需要自定义 yt-dlp 的用户。
|
||
|
||
#### 1. 克隆 yt-dlp 仓库
|
||
|
||
```bash
|
||
git clone https://github.com/yt-dlp/yt-dlp.git
|
||
cd yt-dlp
|
||
```
|
||
|
||
#### 2. 安装扩展器
|
||
|
||
```bash
|
||
# 复制扩展器文件
|
||
cp yt_dlp_extractor/tingdao.py yt_dlp/extractor/
|
||
|
||
# 注册扩展器
|
||
echo "from .tingdao import TingdaoIE" >> yt_dlp/extractor/_extractors.py
|
||
```
|
||
|
||
#### 3. 安装开发版本
|
||
|
||
```bash
|
||
pip install -e .
|
||
```
|
||
|
||
#### 4. 测试安装
|
||
|
||
```bash
|
||
yt-dlp --list-extractors | grep -i tingdao
|
||
```
|
||
|
||
## 📖 使用方法
|
||
|
||
### 在 Metube 中使用
|
||
|
||
1. 打开 Metube Web 界面 (通常是 http://localhost:8081)
|
||
2. 在 URL 输入框中粘贴 tingdao.org 链接
|
||
3. 选择音频格式和质量
|
||
4. 点击 "Add" 开始下载
|
||
|
||
### 在命令行中使用
|
||
|
||
#### 下载单个音频
|
||
|
||
```bash
|
||
yt-dlp "https://www.tingdao.org/dist/#/Media?device=mobile&id=11869"
|
||
```
|
||
|
||
#### 下载整个播放列表
|
||
|
||
```bash
|
||
yt-dlp "https://www.tingdao.org/dist/#/Media?device=mobile&id=11869" --yes-playlist
|
||
```
|
||
|
||
#### 仅提取信息(不下载)
|
||
|
||
```bash
|
||
yt-dlp "https://www.tingdao.org/dist/#/Media?device=mobile&id=11869" --dump-json
|
||
```
|
||
|
||
#### 选择备用源
|
||
|
||
```bash
|
||
yt-dlp "https://www.tingdao.org/dist/#/Media?device=mobile&id=11869" -f backup
|
||
```
|
||
|
||
## 🔧 高级配置
|
||
|
||
### 自定义输出模板
|
||
|
||
```bash
|
||
yt-dlp "https://www.tingdao.org/dist/#/Media?device=mobile&id=11869" \
|
||
-o "%(uploader)s/%(playlist)s/%(playlist_index)02d - %(title)s.%(ext)s"
|
||
```
|
||
|
||
### 限制下载速度
|
||
|
||
```bash
|
||
yt-dlp "https://www.tingdao.org/dist/#/Media?device=mobile&id=11869" \
|
||
--limit-rate 1M
|
||
```
|
||
|
||
## 🐛 故障排除
|
||
|
||
### 常见问题
|
||
|
||
#### 1. 插件未被识别(重要)
|
||
|
||
**症状**: yt-dlp 提示 "Unsupported URL" 或 "Falling back on generic information extractor"
|
||
|
||
**原因**: yt-dlp 插件系统在某些环境下可能无法正确加载插件
|
||
|
||
**解决方案**: 使用直接安装方法
|
||
|
||
```bash
|
||
# 方法1: 直接复制到 yt-dlp 安装目录(推荐)
|
||
# 1. 找到 yt-dlp 安装位置
|
||
python -c "import yt_dlp; print(yt_dlp.__file__)"
|
||
|
||
# 2. 复制扩展器文件(替换为实际路径)
|
||
cp yt_dlp_extractor/tingdao.py /path/to/yt_dlp/extractor/
|
||
|
||
# 3. 注册扩展器
|
||
echo "from .tingdao import TingdaoIE" >> /path/to/yt_dlp/extractor/_extractors.py
|
||
|
||
# 4. 验证安装
|
||
yt-dlp --list-extractors | grep -i tingdao
|
||
```
|
||
|
||
**Metube 环境下的解决方案**:
|
||
|
||
```bash
|
||
# 在 Metube 目录下执行
|
||
# 1. 找到 pipenv 环境中的 yt-dlp 位置
|
||
pipenv run python -c "import yt_dlp; print(yt_dlp.__file__)"
|
||
|
||
# 2. 复制扩展器
|
||
cp yt_dlp_extractor/tingdao.py $(pipenv run python -c "import yt_dlp; import os; print(os.path.dirname(yt_dlp.__file__))")/extractor/
|
||
|
||
# 3. 注册扩展器
|
||
echo "from .tingdao import TingdaoIE" >> $(pipenv run python -c "import yt_dlp; import os; print(os.path.dirname(yt_dlp.__file__))")/extractor/_extractors.py
|
||
```
|
||
|
||
#### 2. "参数不完整" 错误
|
||
|
||
这通常表示网络问题或 API 暂时不可用。解决方法:
|
||
- 检查网络连接
|
||
- 稍后重试
|
||
- 检查 URL 是否正确
|
||
|
||
#### 3. 下载失败
|
||
|
||
```bash
|
||
# 增加详细输出查看错误
|
||
yt-dlp "URL" --verbose
|
||
|
||
# 或者启用调试模式
|
||
yt-dlp "URL" --debug
|
||
```
|
||
|
||
#### 4. Metube 中无法使用
|
||
|
||
检查以下步骤:
|
||
1. 首先尝试上述直接安装方法
|
||
2. 确认插件目录正确映射到容器中
|
||
3. 重启 Metube 容器
|
||
4. 检查容器日志:`docker logs metube_container_name`
|
||
|
||
### 调试模式
|
||
|
||
启用详细输出和调试信息:
|
||
|
||
```bash
|
||
yt-dlp "https://www.tingdao.org/dist/#/Media?device=mobile&id=11869" \
|
||
--verbose --debug --write-info-json
|
||
```
|
||
|
||
## 📊 技术详情
|
||
|
||
### API 架构
|
||
|
||
扩展器使用以下 API 端点:
|
||
- **主要端点**: `https://www.tingdao.org/Record/exhibitions`
|
||
- **参数格式**: `ypid={media_id}&userid=`
|
||
- **响应格式**: JSON,包含 `mediaList` 和 `authorMsg`
|
||
|
||
### 数据结构
|
||
|
||
```json
|
||
{
|
||
"status": 1,
|
||
"list": {
|
||
"mediaList": [
|
||
{
|
||
"id": "11869",
|
||
"title": "音频标题",
|
||
"video_url": "主要音频源",
|
||
"videos_url": "备用音频源",
|
||
"add_time": "2020-03-28 19:45:26"
|
||
}
|
||
],
|
||
"authorMsg": {
|
||
"id": "1190",
|
||
"title": "播放列表标题",
|
||
"author": "作者姓名"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### 备用源机制
|
||
|
||
当主要音频源 (`video_url`) 不可用时,扩展器会自动尝试备用源 (`videos_url`),确保下载成功率。
|
||
|
||
## ⚠️ 重要说明
|
||
|
||
本扩展器仅用于合法的个人学习和研究目的,请遵守相关网站的使用条款。 |