90 lines
2.6 KiB
Rust
90 lines
2.6 KiB
Rust
//! Testa a coleta de legenda contra vários vídeos reais do YouTube em
|
|
//! sequência e imprime um resumo de sucesso/falha. Útil para validar
|
|
//! mudanças no módulo de transcrição sem depender do pipeline completo.
|
|
//!
|
|
//! Uso: `cargo run --example test_transcripts_batch -- <video_id> <video_id> ...`
|
|
//! Sem argumentos, usa uma lista padrão de vídeos do Flow Podcast.
|
|
|
|
use backend::browser::{BrowserModule, BrowserModuleConfig};
|
|
use backend::proxy::ProxyConfig;
|
|
use backend::transcript::{TranscriptConfig, YoutubeTranscriptProvider};
|
|
use backend::usage::DataUsageTracker;
|
|
|
|
const DEFAULT_VIDEO_IDS: &[&str] = &[
|
|
"dX-GKHAo8HU",
|
|
"kyT66IJMkEM",
|
|
"VZ4eLosJFrI",
|
|
"Vx53BX4kjqk",
|
|
"9S3KxNnE4WM",
|
|
"eoBS45Tufgw",
|
|
"fkVlpbDmpEU",
|
|
];
|
|
|
|
#[tokio::main]
|
|
async fn main() -> anyhow::Result<()> {
|
|
let _ = dotenvy::dotenv();
|
|
backend::logs::init();
|
|
let request_id = "batch-test";
|
|
|
|
let args: Vec<String> = std::env::args().skip(1).collect();
|
|
let video_ids: Vec<String> = if args.is_empty() {
|
|
DEFAULT_VIDEO_IDS.iter().map(|s| s.to_string()).collect()
|
|
} else {
|
|
args
|
|
};
|
|
|
|
let proxy = ProxyConfig::from_env(request_id)?;
|
|
let usage = DataUsageTracker::new();
|
|
let browser = BrowserModule::new(
|
|
proxy,
|
|
BrowserModuleConfig {
|
|
no_sandbox: true,
|
|
navigation_timeout_secs: 75,
|
|
min_navigation_delay_ms: 500,
|
|
max_navigation_delay_ms: 1_500,
|
|
..Default::default()
|
|
},
|
|
usage,
|
|
)?;
|
|
|
|
let provider = YoutubeTranscriptProvider::new(
|
|
browser,
|
|
TranscriptConfig {
|
|
max_attempts: 3,
|
|
timeout_secs: 90,
|
|
max_concurrency: 1,
|
|
..Default::default()
|
|
},
|
|
)?;
|
|
|
|
let mut ok = 0usize;
|
|
let mut failed = Vec::new();
|
|
|
|
for video_id in &video_ids {
|
|
println!("--- {video_id} ---");
|
|
match provider.fetch_transcript(request_id, video_id).await {
|
|
Ok(t) => {
|
|
println!(
|
|
"OK language={} generated={} chars={} preview={:?}",
|
|
t.language_code,
|
|
t.is_generated,
|
|
t.text.len(),
|
|
t.text.chars().take(100).collect::<String>()
|
|
);
|
|
ok += 1;
|
|
}
|
|
Err(e) => {
|
|
println!("ERRO: {e}");
|
|
failed.push(video_id.clone());
|
|
}
|
|
}
|
|
}
|
|
|
|
println!("\n=== Resumo: {ok}/{} com sucesso ===", video_ids.len());
|
|
if !failed.is_empty() {
|
|
println!("Falharam: {failed:?}");
|
|
std::process::exit(1);
|
|
}
|
|
Ok(())
|
|
}
|