Este SDK atualmente utiliza a versão v1 da API do Firecrawl, que não é a mais recente (a v2 está disponível). Alguns recursos e melhorias podem estar disponíveis apenas na v2.
Para instalar o SDK do Firecrawl para Rust, adicione o seguinte ao seu Cargo.toml
:
# Adicione isto ao seu Cargo.toml
[dependencies]
firecrawl = "^1.0"
tokio = { version = "^1", features = ["full"] }
Primeiro, obtenha uma chave de API em firecrawl.dev. Depois, inicialize o FirecrawlApp
. A partir daí, você pode acessar funções como FirecrawlApp::scrape_url
, que permitem usar nossa API.
Veja um exemplo de como usar o SDK em Rust:
use firecrawl::{crawl::{CrawlOptions, CrawlScrapeOptions, CrawlScrapeFormats}, FirecrawlApp, scrape::{ScrapeOptions, ScrapeFormats}};
#[tokio::main]
async fn main() {
// Inicialize o FirecrawlApp com a chave da API
let app = FirecrawlApp::new("fc-YOUR_API_KEY").expect("Falha ao inicializar o FirecrawlApp");
// Fazer scraping de uma URL
let options = ScrapeOptions {
formats vec! [ ScrapeFormats::Markdown, ScrapeFormats::HTML ].into(),
..Default::default()
};
let scrape_result = app.scrape_url("https://firecrawl.dev", options).await;
match scrape_result {
Ok(data) => println!("Resultado do scraping:\n{}", data.markdown.unwrap()),
Err(e) => eprintln!("Falha no map: {}", e),
}
// Fazer crawling de um site
let crawl_options = CrawlOptions {
scrape_options: CrawlScrapeOptions {
formats: vec![ CrawlScrapeFormats::Markdown, CrawlScrapeFormats::HTML ].into(),
..Default::default()
}.into(),
limit: 100.into(),
..Default::default()
};
let crawl_result = app
.crawl_url("https://mendable.ai", crawl_options)
.await;
match crawl_result {
Ok(data) => println!("Resultado do crawling (usou {} créditos):\n{:#?}", data.credits_used, data.data),
Err(e) => eprintln!("Falha no crawling: {}", e),
}
}
Para extrair dados de uma única URL, use o método scrape_url
. Ele recebe a URL como parâmetro e retorna os dados extraídos como um Document
.
let options = ScrapeOptions {
formats vec! [ ScrapeFormats::Markdown, ScrapeFormats::HTML ].into(),
..Default::default()
};
let scrape_result = app.scrape_url("https://firecrawl.dev", options).await;
match scrape_result {
Ok(data) => println!("Resultado da extração:\n{}", data.markdown.unwrap()),
Err(e) => eprintln!("Falha na extração: {}", e),
}
Com o Extract, você pode extrair facilmente dados estruturados de qualquer URL. Especifique o seu esquema no formato JSON Schema, usando a macro serde_json::json!
.
let json_schema = json!({
"type": "object",
"properties": {
"top": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {"type": "string"},
"points": {"type": "number"},
"by": {"type": "string"},
"commentsURL": {"type": "string"}
},
"required": ["title", "points", "by", "commentsURL"]
},
"minItems": 5,
"maxItems": 5,
"description": "Top 5 histórias do Hacker News"
}
},
"required": ["top"]
});
let llm_extraction_options = ScrapeOptions {
formats: vec![ ScrapeFormats::Json ].into(),
jsonOptions: ExtractOptions {
schema: json_schema.into(),
..Default::default()
}.into(),
..Default::default()
};
let llm_extraction_result = app
.scrape_url("https://news.ycombinator.com", llm_extraction_options)
.await;
match llm_extraction_result {
Ok(data) => println!("Resultado da extração via LLM:\n{:#?}", data.extract.unwrap()),
Err(e) => eprintln!("Falha na extração via LLM: {}", e),
}
Para rastrear um site, use o método crawl_url
. Ele aguardará a conclusão do rastreamento, o que pode levar bastante tempo dependendo da URL inicial e das opções escolhidas.
let crawl_options = CrawlOptions {
scrape_options: CrawlScrapeOptions {
formats: vec![ CrawlScrapeFormats::Markdown, CrawlScrapeFormats::HTML ].into(),
..Default::default()
}.into(),
limit: 100.into(),
..Default::default()
};
let crawl_result = app
.crawl_url("https://mendable.ai", crawl_options)
.await;
match crawl_result {
Ok(data) => println!("Resultado da varredura ({} créditos usados):\n{:#?}", data.credits_used, data.data),
Err(e) => eprintln!("Falha na varredura: {}", e),
}
Para rastrear sem aguardar o resultado, use o método crawl_url_async
. Ele recebe os mesmos parâmetros, mas retorna uma struct CrawlAsyncRespone
, contendo o ID do rastreamento. Você pode usar esse ID com o método check_crawl_status
para verificar o status a qualquer momento. Observe que rastreamentos concluídos são excluídos após 24 horas.
let crawl_id = app.crawl_url_async("https://mendable.ai", None).await?.id;
// ... mais tarde ...
let status = app.check_crawl_status(crawl_id).await?;
if status.status == CrawlStatusTypes::Completed {
println!("Rastreamento concluído: {:#?}", status.data);
} else {
// ... aguarde mais um pouco ...
}
Mapeie todos os links associados a partir de uma URL de origem.
let map_result = app.map_url("https://firecrawl.dev", None).await;
match map_result {
Ok(data) => println!("URLs mapeadas: {:#?}", data),
Err(e) => eprintln!("Falha ao mapear: {}", e),
}
O SDK trata os erros retornados pela API do Firecrawl e por nossas dependências, combinando-os no enum FirecrawlError
, que implementa Error
, Debug
e Display
. Todos os nossos métodos retornam um Result<T, FirecrawlError>
.