mod google;
pub use google::*;
mod twitter;
pub use twitter::*;
pub use asimov_module::secrecy::{ExposeSecret, SecretString};
use asimov_module::prelude::{Box, Result, String, format};
use core::error::Error;
#[derive(Debug)]
pub struct Apify {
pub(crate) api_key: SecretString,
}
impl Apify {
pub fn new(api_key: SecretString) -> Self {
Self { api_key }
}
pub fn google_search(&self, request: &GoogleSearchRequest) -> Result<String, Box<dyn Error>> {
let actor_url = format!(
"https://api.apify.com/v2/acts/{}/run-sync-get-dataset-items",
"apify~google-search-scraper"
);
let mut response = ureq::post(actor_url)
.header(
"Authorization",
format!("Bearer {}", self.api_key.expose_secret()),
)
.send_json(request)?;
let response_body = response.body_mut().read_to_string()?;
Ok(response_body)
}
pub fn twitter_followers(
&self,
request: &TwitterFollowingScrapeRequest,
) -> Result<String, Box<dyn Error>> {
let actor_url = format!(
"https://api.apify.com/v2/acts/{}/run-sync-get-dataset-items",
"C2Wk3I6xAqC4Xi63f"
);
let mut response = ureq::post(actor_url)
.header(
"Authorization",
format!("Bearer {}", self.api_key.expose_secret()),
)
.send_json(request)?;
let response_body = response.body_mut().read_to_string()?;
Ok(response_body)
}
}