菜单

特定平台提取器

相关源文件

概述

此页面记录了 youtube-dl 中特定平台的提取器,这些提取器是为从特定网站或平台提取媒体而设计的专用组件。这些提取器继承自通用 InfoExtractor 基类(在 InfoExtractor 基类 中有详细说明),但实现了定位、解析和下载各自平台媒体所需的特定站点逻辑。

特定平台的提取器处理不同站点的独特挑战,包括:

  • 自定义 API 调用和身份验证机制
  • 内容保护和地理限制
  • 特定平台元数据格式
  • 媒体格式选择和转换
  • 字幕和其他内容提取

来源:youtube_dl/extractor/bbc.py39-593 youtube_dl/extractor/dailymotion.py22-98

架构和组织

特定平台的提取器遵循 youtube-dl 代码库中的一致继承模式。

提取器类层次结构

大多数特定平台的实现都遵循此模式:

  1. 包含共享逻辑和实用程序的基类 IE
  2. 用于处理单个视频的主 IE 类
  3. 用于播放列表、频道或其他内容类型的附加变体 IE

来源:youtube_dl/extractor/bbc.py40-593 youtube_dl/extractor/dailymotion.py22-98 youtube_dl/extractor/crunchyroll.py40-106

命名约定

提取器遵循一致的命名约定

类型示例类示例 IE_NAME
主提取器CrunchyrollIEcrunchyroll
播放列表提取器CrunchyrollShowPlaylistIEcrunchyroll:playlist
频道/用户提取器DailymotionUserIEdailymotion:user
专辑/合集NetEaseMusicAlbumIEnetease:album

来源:youtube_dl/extractor/crunchyroll.py121-635 youtube_dl/extractor/dailymotion.py354-393

通用组件

URL 模式匹配

每个提取器都定义了一个 _VALID_URL 正则表达式模式,以识别它可以处理的 URL。

URL 模式匹配示例

提取器_VALID_URL 模式(简化版)示例 URL
BBCbbc\.co\.uk/(?:programmes|iplayer)/(?P<id>%s)https://www.bbc.co.uk/programmes/b039g8p7
Dailymotiondailymotion\.com/(?:video|swf)/(?P<id>[^/?_]+)https://www.dailymotion.com/video/x5kesuj
Crunchyrollcrunchyroll\.com/(?:media-|[^/]*/){1,2}[^/?&]*?(?P<id>[0-9]+)http://www.crunchyroll.com/media-589804/culture-japan-1

来源:youtube_dl/extractor/bbc.py42-56 youtube_dl/extractor/dailymotion.py94-101 youtube_dl/extractor/crunchyroll.py122-123

测试用例

大多数提取器都包含测试用例来验证其功能。

这些测试包括:

  • 测试 URL
  • 预期的视频 ID 和元数据
  • 有时会包括 MD5 校验和以验证内容完整性
  • 地理限制或付费内容的跳过条件

来源:youtube_dl/extractor/dailymotion.py103-185 youtube_dl/extractor/bbc.py72-266

提取过程

特定平台提取器的典型提取流程

来源:youtube_dl/extractor/bbc.py541-592 youtube_dl/extractor/dailymotion.py206-322 youtube_dl/extractor/crunchyroll.py414-635

特定平台提取器的主要功能

身份验证

许多提取器支持身份验证以访问付费或受限内容。

提取器通常使用:

  • _NETRC_MACHINE 来识别 .netrc 的哪个部分会被使用
  • _get_login_info() 来检索凭据
  • _real_initialize() 在启动时运行登录

来源:youtube_dl/extractor/bbc.py268-296 youtube_dl/extractor/crunchyroll.py55-105 youtube_dl/extractor/vrv.py124-138

地理限制处理

提取器通常需要处理地理限制。

使用的技术包括:

  • 在 API 响应中检测地理限制错误
  • 提供包含允许国家/地区的信息性错误消息
  • 在可用时使用代理/VPN 选项

来源:youtube_dl/extractor/bbc.py352-356 youtube_dl/extractor/dailymotion.py248-251

媒体格式选择

提取器处理复杂的媒体格式选择。

常见的格式提取方法

  • _extract_m3u8_formats() 用于 HLS 流
  • _extract_mpd_formats() 用于 DASH 清单
  • _extract_f4m_formats() 用于 Adobe HTTP Dynamic Streaming
  • 渐进式 HTTP 的直接 URL 提取

来源:youtube_dl/extractor/bbc.py369-454 youtube_dl/extractor/dailymotion.py255-284 youtube_dl/extractor/crunchyroll.py468-574

字幕提取

许多提取器支持字幕提取。

使用的技术包括:

  • 从 API 响应中提取字幕
  • 从网页解析字幕信息
  • 将字幕下载并转换为标准格式

来源: youtube_dl/extractor/bbc.py321-338 youtube_dl/extractor/dailymotion.py287-293 youtube_dl/extractor/crunchyroll.py392-411

平台特定提取器的示例

媒体共享平台

Dailymotion

Dailymotion 提取器的层次结构

主要功能

  • GraphQL API 与 OAuth 身份验证集成
  • HLS 和 DASH 格式提取
  • 支持字幕和缩略图

来源: youtube_dl/extractor/dailymotion.py22-393

广播媒体网络

BBC

BBC 提取器支持各种 BBC 平台

主要功能

  • 支持多个 BBC 平台(iPlayer、新闻等)
  • 用于格式提取的媒体选择器 API
  • 处理英国内容的地理限制
  • RTMP、HLS 和 DASH 流支持

来源: youtube_dl/extractor/bbc.py40-847

专业内容平台

Crunchyroll

Crunchyroll 提取器支持动漫和电视剧内容

主要功能

  • 高级身份验证支持
  • 字幕解密和转换(SRT/ASS)
  • 格式质量选择
  • 处理年龄限制和内容分级

来源: youtube_dl/extractor/crunchyroll.py40-635

网易云音乐

网易云音乐提取器展示了如何处理专业的音乐平台

主要功能

  • 专门处理音乐、专辑、艺术家和播放列表
  • 加密的播放器 API 通信
  • 歌词提取和处理
  • 处理中国大陆内容的地理限制

来源: youtube_dl/extractor/neteasemusic.py33-434

与外部 API 集成

VRV

VRV 提取器展示了与复杂多媒体平台的集成

主要功能

  • HMAC-SHA1 OAuth 身份验证
  • CMS API 集成
  • 支持多种音频语言
  • 硬字幕选择不同语言

来源: youtube_dl/extractor/vrv.py25-277

高级安全处理

某些提取器需要高级安全处理来处理受保护的内容

AES 解密

供各种提取器用于加密内容

已实现的函数

  • 用于链式块加密模式的 aes_cbc_decrypt
  • 用于计数器模式的 aes_ctr_decrypt
  • 用于文本解密的 aes_decrypt_text

来源: youtube_dl/aes.py49-72 youtube_dl/aes.py201-236 youtube_dl/extractor/crunchyroll.py279-307

平台特定提取器的最佳实践

通过检查已实现的提取器,可以得出几项最佳实践

  1. URL 模式精度:定义精确的 _VALID_URL 模式,以避免与其他提取器发生冲突
  2. 优雅的错误处理:为地理限制、年龄限制和内容缺失提供信息性错误消息
  3. 测试覆盖率:为各种内容类型和边缘情况包括全面的测试
  4. 身份验证支持:实现登录功能并妥善处理凭据
  5. 格式选择:提取所有可用格式,让下载器自行选择最佳格式
  6. API 版本控制:通过版本检查和回退机制优雅地处理 API 更改
  7. 资源效率:缓存和重复使用 API 令牌和身份验证信息

来源: youtube_dl/extractor/bbc.py72-266 youtube_dl/extractor/dailymotion.py103-185