## 文档内容 1. yt-dlp扩展器开发完整指南.md - 详细的端到端开发指南 2. yt-dlp扩展器快速参考.md - 精简的快速参考卡片 ## 涵盖内容 - 完整的开发流程和最佳实践 - 通用扩展器代码模板 - Metube集成的详细步骤 - 故障排除和调试技巧 - 部署方案和检查清单 为以后扩展其他网站提供标准化指南。
3.4 KiB
3.4 KiB
yt-dlp 扩展器快速参考
基于 tingdao.org 成功案例的快速开发指南
🚀 快速开始
1. 创建插件结构
mkdir -p your-plugin/yt_dlp_plugins/extractor
cd your-plugin
2. 配置文件
setup.cfg:
[metadata]
name = yt-dlp-yoursite-plugin
version = 1.0.0
[options]
packages = find_namespace:
python_requires = >=3.7
pyproject.toml:
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
[project]
name = "yt-dlp-yoursite-plugin"
version = "1.0.0"
requires-python = ">=3.7"
3. 扩展器模板
# yt_dlp_plugins/extractor/yoursite.py
from yt_dlp.extractor.common import InfoExtractor
from yt_dlp.utils import ExtractorError
class YourSiteIE(InfoExtractor):
IE_NAME = 'yoursite'
_VALID_URL = r'https?://(?:www\.)?yoursite\.com/video/(?P<id>\d+)'
def _real_extract(self, url):
video_id = self._match_id(url)
# API 调用
data = self._download_json(
'https://api.yoursite.com/video',
video_id,
data=f'id={video_id}'.encode(),
headers={'Content-Type': 'application/x-www-form-urlencoded'}
)
return {
'id': video_id,
'title': data.get('title'),
'url': data.get('video_url'),
}
📦 Metube 集成
修改 app/main.py
_DEFAULTS = {
# ... 现有配置
'YTDL_PLUGINS_DIR': '',
}
修改 app/ytdl.py
# 在 YoutubeDL 参数中添加
if (self.manager and
hasattr(self.manager, 'config') and
hasattr(self.manager.config, 'YTDL_PLUGINS_DIR') and
self.manager.config.YTDL_PLUGINS_DIR):
import glob
plugin_dirs = glob.glob(f"{self.manager.config.YTDL_PLUGINS_DIR}/*")
plugin_dirs = [d for d in plugin_dirs if os.path.isdir(d)]
if plugin_dirs:
params['plugin_dirs'] = plugin_dirs
🧪 测试和部署
安装测试
# 安装插件
pip install -e .
# 测试加载
export PYTHONPATH="/path/to/your-plugin"
yt-dlp --list-extractors | grep yoursite
功能测试
# 提取信息
yt-dlp --dump-json "https://yoursite.com/video/123"
# 实际下载
yt-dlp "https://yoursite.com/video/123"
Metube 测试
# 启动服务器
export PYTHONPATH="/path/to/your-plugin"
pipenv run python3 app/main.py
# 访问 http://localhost:8081 测试
🔧 常见问题
插件未识别
# 检查环境变量
echo $PYTHONPATH
# 验证插件导入
python -c "import yt_dlp_plugins.extractor.yoursite"
API 调用失败
# 调试 API
import requests
response = requests.post(api_url, data=data, headers=headers)
print(response.status_code, response.text)
Metube 集成问题
# 检查日志
docker logs metube_container
# 验证插件目录
ls -la /path/to/plugins/
📋 检查清单
- URL 正则表达式正确
- API 调用成功
- 元数据提取正确
- 错误处理完善
- 插件目录结构正确
- Metube 修改完成
- 环境变量设置
- 命令行测试通过
- Web 界面测试通过
🎯 关键成功因素
- 严格遵循 yt-dlp 官方规范
- 正确设置 PYTHONPATH 环境变量
- 完整的 API 调研和测试
- 优雅的错误处理机制
- 充分的集成测试验证
基于 tingdao.org 案例的经验总结,遵循此指南可快速开发任何网站的 yt-dlp 扩展器。