update 2
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
use backend::browser::{BrowserModule, BrowserModuleConfig};
|
||||
use backend::proxy::ProxyConfig;
|
||||
use backend::transcript::{TranscriptConfig, YoutubeTranscriptProvider};
|
||||
use backend::usage::DataUsageTracker;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> anyhow::Result<()> {
|
||||
let _ = dotenvy::dotenv();
|
||||
backend::logs::init();
|
||||
let request_id = "diag-transcript";
|
||||
|
||||
let video_id = std::env::args()
|
||||
.nth(1)
|
||||
.unwrap_or_else(|| "dQw4w9WgXcQ".into());
|
||||
|
||||
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: 1,
|
||||
timeout_secs: 180,
|
||||
max_concurrency: 1,
|
||||
..Default::default()
|
||||
},
|
||||
)?;
|
||||
|
||||
println!("buscando legenda do vídeo {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(120).collect::<String>()
|
||||
);
|
||||
}
|
||||
Err(e) => {
|
||||
println!("ERRO: {e}");
|
||||
std::process::exit(1);
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
//! 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(())
|
||||
}
|
||||
Reference in New Issue
Block a user