1 个不稳定版本
0.1.0 | 2024年5月15日 |
---|
#10 在 #transcript
每月下载量 35
17KB
187 行
ytranscript
ytranscript
是一个 Rust crate,提供获取 YouTube 视频字幕的功能。它支持获取不同语言的字幕,并处理在获取字幕时可能发生的各种错误情况。
功能
- 从 URL 或字符串中提取 YouTube 视频标识符。
- 获取 YouTube 视频的字幕。
- 支持获取特定语言的字幕。
- 处理常见错误,如视频不可用、字幕不可用和请求过多。
安装
将 ytranscript
添加到你的 Cargo.toml
用法
以下是如何在二进制 crate 中使用 ytranscript
crate 的示例
use ytranscript::YoutubeTranscript;
use std::env;
#[tokio::main]
async fn main() {
// Get the video ID from command line arguments
let args: Vec<String> = env::args().collect();
if args.len() != 2 {
eprintln!("Usage: ytranscript_bin <video_id>");
return;
}
let video_id = &args[1];
// Fetch the transcript
match YoutubeTranscript::fetch_transcript(video_id, None).await {
Ok(transcript) => {
for entry in transcript {
println!("{:?}", entry);
}
}
Err(e) => {
eprintln!("Error: {}", e);
}
}
}
功能
YoutubeTranscript::fetch_transcript
获取给定 YouTube 视频标识符或 URL 的字幕。
-
参数
video_id
:表示 YouTube 视频 URL 或 ID 的字符串切片。config
:一个可选的TranscriptConfig
,指定所需字幕的语言。
-
返回
Ok(Vec<TranscriptResponse>)
:如果成功获取字幕,则返回TranscriptResponse
的向量。Err(YoutubeTranscriptError)
:如果无法获取字幕,则返回错误。
错误处理
该 crate 定义了一组在获取字幕时可能发生的错误。
use thiserror::Error;
#[derive(Error, Debug)]
pub enum YoutubeTranscriptError {
#[error("YouTube is receiving too many requests from this IP and now requires solving a captcha to continue")]
TooManyRequests,
#[error("The video is no longer available ({0})")]
VideoUnavailable(String),
#[error("Transcript is disabled on this video ({0})")]
TranscriptDisabled(String),
#[error("No transcripts are available for this video ({0})")]
TranscriptNotAvailable(String),
#[error("No transcripts are available in {0} for this video ({2}). Available languages: {1:?}")]
TranscriptNotAvailableLanguage(String, Vec<String>, String),
#[error("Impossible to retrieve Youtube video ID.")]
InvalidVideoId,
}
正则表达式模式
该 crate 使用正则表达式模式提取 YouTube 视频标识符并解析 XML 字幕。
pub const RE_YOUTUBE: &str =
r#"(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/\s]{11})"#;
pub const USER_AGENT: &str = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36,gzip(gfe)";
pub const RE_XML_TRANSCRIPT: &str = r#"<text start="([^"]*)" dur="([^"]*)">([^<]*)<\/text>"#;
类型
该 crate 定义了以下类型
#[derive(Debug)]
pub struct TranscriptConfig {
pub lang: Option<String>,
}
#[derive(Debug)]
pub struct TranscriptResponse {
pub text: String,
pub duration: f64,
pub offset: f64,
pub lang: String,
}
测试
你可以通过运行以下命令来测试 ytranscript
crate 的功能
cargo test
许可证
本项目采用 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。
依赖项
~6–18MB
~276K SLoC