#youtube #video #transcript #regex #rust

ytranscript

ytranscript 是一个 Rust crate,提供获取 YouTube 视频字幕的功能。

1 个不稳定版本

0.1.0 2024年5月15日

#10#transcript

每月下载量 35

MIT 许可证

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