mrmysql/youtube-transcript

检索YouTube视频的文本脚本。

v0.0.2 2024-09-07 09:58 UTC

This package is auto-updated.

Last update: 2024-09-07 10:01:40 UTC


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();
}