use anyhow::Result;
use std::env;
use yt_transcript_rs::api::YouTubeTranscriptApi;
use yt_transcript_rs::proxies::{GenericProxyConfig, ProxyConfig, WebshareProxyConfig};
#[tokio::main]
async fn main() -> Result<()> {
let http_proxy = env::var("HTTP_PROXY").ok();
let https_proxy = env::var("HTTPS_PROXY").ok();
let has_http_proxy = http_proxy.is_some() || https_proxy.is_some();
let webshare_user = env::var("WEBSHARE_USER").ok();
let webshare_password = env::var("WEBSHARE_PASSWORD").ok();
let has_webshare = webshare_user.is_some() && webshare_password.is_some();
let video_id = "arj7oStGLkU";
if has_http_proxy {
println!("Example 1: Using GenericProxyConfig with HTTP/HTTPS proxy");
match GenericProxyConfig::new(http_proxy.clone(), https_proxy.clone()) {
Ok(proxy_config) => {
let api = YouTubeTranscriptApi::new(
None,
Some(Box::new(proxy_config) as Box<dyn ProxyConfig + Send + Sync>),
None,
)?;
match api.fetch_transcript(video_id, &["en"], false).await {
Ok(transcript) => {
println!("Successfully fetched transcript using HTTP/HTTPS proxy!");
println!("Number of snippets: {}", transcript.snippets.len());
for snippet in transcript.snippets.iter().take(3) {
println!(
"[{:.1}-{:.1}s] {}",
snippet.start,
snippet.start + snippet.duration,
snippet.text
);
}
}
Err(e) => {
println!("Failed to fetch transcript with HTTP/HTTPS proxy: {:?}", e);
}
}
}
Err(e) => {
println!("Failed to create HTTP/HTTPS proxy config: {}", e);
}
}
} else {
println!("Skipping HTTP/HTTPS proxy example (HTTP_PROXY or HTTPS_PROXY not set)");
}
if has_webshare {
println!("\nExample 2: Using WebshareProxyConfig");
let proxy_config = WebshareProxyConfig::new(
webshare_user.unwrap(),
webshare_password.unwrap(),
3,
None,
None,
);
let api = YouTubeTranscriptApi::new(
None,
Some(Box::new(proxy_config) as Box<dyn ProxyConfig + Send + Sync>),
None,
)?;
match api.fetch_transcript(video_id, &["en"], false).await {
Ok(transcript) => {
println!("Successfully fetched transcript using Webshare proxy!");
println!("Number of snippets: {}", transcript.snippets.len());
for snippet in transcript.snippets.iter().take(3) {
println!(
"[{:.1}-{:.1}s] {}",
snippet.start,
snippet.start + snippet.duration,
snippet.text
);
}
}
Err(e) => {
println!("Failed to fetch transcript with Webshare proxy: {:?}", e);
}
}
} else {
println!("Skipping Webshare proxy example (WEBSHARE_USER or WEBSHARE_PASSWORD not set)");
}
if !has_http_proxy && !has_webshare {
println!("\nExample 3: Using no proxy");
let api = YouTubeTranscriptApi::new(None, None, None)?;
match api.fetch_transcript(video_id, &["en"], false).await {
Ok(transcript) => {
println!("Successfully fetched transcript without proxy!");
println!("Number of snippets: {}", transcript.snippets.len());
for snippet in transcript.snippets.iter().take(3) {
println!(
"[{:.1}-{:.1}s] {}",
snippet.start,
snippet.start + snippet.duration,
snippet.text
);
}
}
Err(e) => {
println!("Failed to fetch transcript without proxy: {:?}", e);
}
}
}
Ok(())
}