metube/部署使用说明.md
柯孟凯 8706ccf709 完成tingdao.org yt-dlp扩展器完整实现
## 核心功能
- 实现完整的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分析、错误修正和测试验证流程。
2025-09-23 13:44:28 +08:00

5.9 KiB
Raw Blame History

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. 准备插件目录

# 在你的 Metube 目录中创建插件目录
mkdir -p plugins/tingdao

2. 复制插件文件

# 复制插件到指定目录
cp -r metube_plugin/yt_dlp_plugins plugins/tingdao/

3. 修改 Docker Compose 配置

在你的 docker-compose.yml 文件中添加 volume 映射:

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

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 仓库

git clone https://github.com/yt-dlp/yt-dlp.git
cd yt-dlp

2. 安装扩展器

# 复制扩展器文件
cp yt_dlp_extractor/tingdao.py yt_dlp/extractor/

# 注册扩展器
echo "from .tingdao import TingdaoIE" >> yt_dlp/extractor/_extractors.py

3. 安装开发版本

pip install -e .

4. 测试安装

yt-dlp --list-extractors | grep -i tingdao

📖 使用方法

在 Metube 中使用

  1. 打开 Metube Web 界面 (通常是 http://localhost:8081)
  2. 在 URL 输入框中粘贴 tingdao.org 链接
  3. 选择音频格式和质量
  4. 点击 "Add" 开始下载

在命令行中使用

下载单个音频

yt-dlp "https://www.tingdao.org/dist/#/Media?device=mobile&id=11869"

下载整个播放列表

yt-dlp "https://www.tingdao.org/dist/#/Media?device=mobile&id=11869" --yes-playlist

仅提取信息(不下载)

yt-dlp "https://www.tingdao.org/dist/#/Media?device=mobile&id=11869" --dump-json

选择备用源

yt-dlp "https://www.tingdao.org/dist/#/Media?device=mobile&id=11869" -f backup

🔧 高级配置

自定义输出模板

yt-dlp "https://www.tingdao.org/dist/#/Media?device=mobile&id=11869" \
  -o "%(uploader)s/%(playlist)s/%(playlist_index)02d - %(title)s.%(ext)s"

限制下载速度

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 插件系统在某些环境下可能无法正确加载插件

解决方案: 使用直接安装方法

# 方法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 环境下的解决方案:

# 在 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. 下载失败

# 增加详细输出查看错误
yt-dlp "URL" --verbose

# 或者启用调试模式
yt-dlp "URL" --debug

4. Metube 中无法使用

检查以下步骤:

  1. 首先尝试上述直接安装方法
  2. 确认插件目录正确映射到容器中
  3. 重启 Metube 容器
  4. 检查容器日志:docker logs metube_container_name

调试模式

启用详细输出和调试信息:

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包含 mediaListauthorMsg

数据结构

{
  "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),确保下载成功率。

⚠️ 重要说明

本扩展器仅用于合法的个人学习和研究目的,请遵守相关网站的使用条款。