use std::collections::HashMap;
use crawlkit::{Collector, CompositeFetcher, ReqwestClient};
use crawlkit_extensions::firecrawl::FirecrawlClient;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
dotenvy::dotenv().ok();
println!("=== Firecrawl 示例 ===\n");
let firecrawl = FirecrawlClient::builder()
.with_tokens_from_env("FIRECRAWL_API_TOKENS")
.build()?;
let resp = firecrawl.get("https://example.com", &HashMap::new()).await?;
println!("Firecrawl 获取成功:");
println!(" URL: {}", resp.url);
println!(" 状态码: {}", resp.status);
println!(" 长度: {} 字节\n", resp.body.len());
println!("=== CompositeFetcher 集成 ===\n");
let fetcher = CompositeFetcher::new(vec![
Box::new(ReqwestClient::builder().name("reqwest").max_retries(2).build()?),
Box::new(firecrawl),
])
.on_backend_error(|name, err| {
eprintln!(" [{}] 失败: {}", name, err);
});
let mut collector = Collector::with_client(fetcher);
collector.on_html(|ctx| {
println!(" [HTML] {} - {} 字节", ctx.url, ctx.body.len());
});
collector.visit("https://news.ycombinator.com/").await?;
Ok(())
}