Skip to main content

asimov_brightdata_module/
api.rs

1// This is free and unencumbered software released into the public domain.
2
3mod scrape;
4pub use scrape::*;
5
6mod trigger;
7pub use trigger::*;
8
9pub use asimov_module::secrecy::{ExposeSecret, SecretString};
10
11use asimov_module::prelude::{Box, Result, String, format};
12use core::error::Error;
13
14#[derive(Debug)]
15pub struct BrightData {
16    pub(crate) api_key: SecretString,
17}
18
19impl BrightData {
20    pub fn new(api_key: SecretString) -> Self {
21        Self { api_key }
22    }
23
24    pub fn scrape_dataset(
25        &self,
26        dataset_id: impl AsRef<str>,
27        request: &ScrapeRequest,
28    ) -> Result<String, Box<dyn Error>> {
29        let mut response = ureq::post("https://api.brightdata.com/datasets/v3/scrape")
30            .query("dataset_id", dataset_id.as_ref())
31            .query("include_errors", "true")
32            .query("format", "json")
33            .header(
34                "Authorization",
35                format!("Bearer {}", self.api_key.expose_secret()),
36            )
37            .send_json(request)?;
38        let response_body = response.body_mut().read_to_string()?;
39        Ok(response_body)
40    }
41}