mod ads_advertisers;
mod ads_search;
mod ai_mode;
mod autocomplete;
mod dataset;
mod event;
mod finance;
mod images;
mod jobs;
mod local_finder;
mod maps;
mod news;
mod search_by_image;
pub use ads_advertisers::*;
pub use ads_search::*;
pub use ai_mode::*;
pub use autocomplete::*;
pub use dataset::*;
pub use event::*;
pub use finance::*;
pub use images::*;
pub use jobs::*;
pub use local_finder::*;
pub use maps::*;
pub use news::*;
pub use search_by_image::*;
use crate::api::serp::SerpApi;
use crate::entity::{
SerpApiGoogleOrganicTaskAdvanced, SerpApiGoogleOrganicTaskRegular, SerpApiLanguage,
};
use crate::{DataForSeoApiResponse, DataForSeoClient, SerpApiLocation, SerpApiTaskReadyResult};
use serde::{Deserialize, Serialize};
use serde_json::Value;
impl SerpApi<'_> {
pub fn google(&self) -> SerpApiGoogle<'_> {
SerpApiGoogle {
client: self.client,
}
}
}
pub struct SerpApiGoogle<'a> {
client: &'a DataForSeoClient,
}
impl SerpApiGoogle<'_> {
pub async fn locations(&self) -> DataForSeoApiResponse<SerpApiLocation> {
self.client.http_get("/v3/serp/google/locations").await
}
pub async fn locations_country(&self, country: &str) -> DataForSeoApiResponse<SerpApiLocation> {
self.client
.http_get(format!("/v3/serp/google/locations/{country}").as_str())
.await
}
pub async fn languages(&self) -> DataForSeoApiResponse<SerpApiLanguage> {
self.client.http_get("/v3/serp/google/languages").await
}
pub async fn organic_task_post(
&self,
data: Vec<SerpApiGoogleOrganicTaskPostRequest>,
) -> DataForSeoApiResponse<Value> {
self.client
.http_post("/v3/serp/google/organic/task_post", &data)
.await
}
pub async fn organic_tasks_ready(&self) -> DataForSeoApiResponse<SerpApiTaskReadyResult> {
self.client.serp().task_ready_se("google").await
}
pub async fn organic_tasks_fixed(&self) -> DataForSeoApiResponse<SerpApiTaskReadyResult> {
self.client
.http_get("/v3/serp/google/organic/tasks_fixed")
.await
}
pub async fn organic_task_get_advanced(
&self,
id: &str,
) -> DataForSeoApiResponse<SerpApiGoogleOrganicTaskAdvanced> {
self.client
.http_get(format!("/v3/serp/google/organic/task_get/advanced/{id}").as_str())
.await
}
pub async fn organic_task_get_regular(
&self,
id: &str,
) -> DataForSeoApiResponse<SerpApiGoogleOrganicTaskRegular> {
self.client
.http_get(format!("/v3/serp/google/organic/task_get/regular/{id}").as_str())
.await
}
pub async fn organic_live_advanced(
&self,
data: Vec<SerpApiGoogleOrganicTaskPostRequest>,
) -> DataForSeoApiResponse<SerpApiGoogleOrganicTaskAdvanced> {
self.client
.http_post("/v3/serp/google/organic/live/advanced", &data)
.await
}
pub async fn organic_live_regular(
&self,
data: Vec<SerpApiGoogleOrganicTaskPostRequest>,
) -> DataForSeoApiResponse<SerpApiGoogleOrganicTaskRegular> {
self.client
.http_post("/v3/serp/google/organic/live/regular", &data)
.await
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct SerpApiGoogleOrganicTaskPostRequest {
pub keyword: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub priority: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub depth: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_crawl_pages: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_name: Option<String>,
pub location_code: i32,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_coordinate: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_name: Option<String>,
pub language_code: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub se_domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub os: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub group_organic_results: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub calculate_rectangles: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub browser_screen_width: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub browser_screen_height: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub browser_screen_resolution_ratio: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub people_also_ask_click_depth: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub load_async_ai_overview: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expand_ai_overview: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub search_param: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postback_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postback_data: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pingback_url: Option<String>,
}
impl SerpApiGoogleOrganicTaskPostRequest {
pub fn new(language_code: String, location_code: i32) -> Self {
SerpApiGoogleOrganicTaskPostRequest {
language_code,
location_code,
..SerpApiGoogleOrganicTaskPostRequest::default()
}
}
}