mrmysql / youtube-transcript
检索YouTube视频的文本脚本。
v0.0.2
2024-09-07 09:58 UTC
Requires
- php: ^7.4 || ^8.2
- psr/http-client: ^1.0
- psr/http-factory: ^1.1
README
YouTube文本脚本是一个PHP库,用于检索YouTube视频的文本脚本。它允许您检索多种语言的字幕,包括自动生成的字幕,并提供将文本脚本翻译成其他可用语言的功能。受 jdepoix/youtube-transcript-api 启发。我使用这些花哨的 [A]utocompletion [I]nstruments 之一生成了此说明,所以可能在某些地方有误,但总体上看起来不错。
功能
- 检索手动创建和自动生成的文本脚本。
- 获取多种语言的文本脚本。
- 将文本脚本翻译成其他可用语言。
要求
- PHP 7.4或更高版本(包括对PHP 8.2的支持)
- PSR-18 HTTP客户端(
psr/http-client)和HTTP工厂(psr/http-factory)
安装
要将此库包含到您的项目中,请使用Composer
composer require mrmysql/youtube-transcript
使用
1. 初始化文本脚本检索器
首先,您需要设置一个实现PSR-18和PSR-17接口的HTTP客户端和请求工厂。这些依赖项由TranscriptListFetcher类所必需。
use MrMySQL\YoutubeTranscript\TranscriptListFetcher; use GuzzleHttp\Client; use GuzzleHttp\Psr7\HttpFactory; $http_client = new Client(); $request_factory = new HttpFactory(); $fetcher = new TranscriptListFetcher($http_client, $request_factory);
2. 获取文本脚本列表
您可以为指定的YouTube视频ID获取文本脚本列表
$video_id = 'YOUR_YOUTUBE_VIDEO_ID'; $transcript_list = $fetcher->fetch($video_id);
3. 获取和显示文本脚本
您可以遍历可用的文本脚本并显示它们
foreach ($transcript_list as $transcript) { echo $transcript . "\n"; }
4. 获取特定文本脚本
要获取特定语言的文本脚本
$language_codes = ['en', 'es']; // Prioritized language codes $transcript = $transcript_list->findTranscript($language_codes); $transcript_text = $transcript->fetch(); print_r($transcript_text);
您还可以直接从列表中获取所有可用区域设置代码
$language_codes = $transcript_list->getAvailableLanguageCodes(); $transcript = $transcript_list->findTranscript($language_codes); $transcript_text = $transcript->fetch(); print_r($transcript_text);
5. 翻译文本脚本
如果可用,您可以将文本脚本翻译成其他语言
$translated_transcript = $transcript->translate('fr'); $translated_text = $translated_transcript->fetch(); print_r($translated_text);
异常处理
此库提供了一套自定义异常来处理不同场景
YouTubeRequestFailedException:当YouTube请求失败时抛出。NoTranscriptFoundException:当没有找到指定语言代码的文本脚本时抛出。NotTranslatableException:尝试翻译无法翻译的文本脚本时抛出。TranscriptsDisabledException:当视频禁用文本脚本时抛出。TooManyRequestsException:当YouTube实施速率限制时抛出。
示例
try { $transcript = $transcript_list->findGeneratedTranscript(['en']); print_r($transcript->fetch()); } catch (YouTubeRequestFailedException $e) { echo "Failed to fetch the transcript: " . $e->getMessage(); }