Skip to main content

data_for_seo/api/serp/google/
ads_search.rs

1use crate::entity::SerpApiGoogleAdsSearchTaskAdvanced;
2use crate::{DataForSeoApiResponse, SerpApiGoogle, SerpApiTaskReadyResult};
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6/// Google Ads Search SERP endpoint.
7/// <https://docs.dataforseo.com/v3/serp/google/ads_search/overview/>
8impl SerpApiGoogle<'_> {
9    /// <https://docs.dataforseo.com/v3/serp/google/ads_search/task_post/>
10    pub async fn ads_search_task_post(
11        &self,
12        data: Vec<SerpApiGoogleAdsSearchTaskPostRequest>,
13    ) -> DataForSeoApiResponse<Value> {
14        self.client
15            .http_post("/v3/serp/google/ads_search/task_post", &data)
16            .await
17    }
18    /// <https://docs.dataforseo.com/v3/serp/google/ads_search/tasks_ready/>
19    pub async fn ads_search_tasks_ready(&self) -> DataForSeoApiResponse<SerpApiTaskReadyResult> {
20        self.client.serp().task_ready_se("google/ads_search").await
21    }
22    /// <https://docs.dataforseo.com/v3/serp/google/ads_search/task_get/advanced/>
23    pub async fn ads_search_task_get_advanced(
24        &self,
25        id: &str,
26    ) -> DataForSeoApiResponse<SerpApiGoogleAdsSearchTaskAdvanced> {
27        self.client
28            .http_get(format!("/v3/serp/google/ads_search/task_get/advanced/{id}").as_str())
29            .await
30    }
31}
32
33/// Request body for Google Ads Search task_post.
34/// You must set either `advertiser_ids` or `target`.
35/// See <https://docs.dataforseo.com/v3/serp/google/ads_search/task_post/>.
36#[derive(Debug, Default, Serialize, Deserialize, Clone)]
37pub struct SerpApiGoogleAdsSearchTaskPostRequest {
38    /// Advertiser ids.
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub advertiser_ids: Option<Vec<String>>,
41    /// Target.
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub target: Option<String>,
44    /// Task execution priority: 1 (normal) or 2 (high).
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub priority: Option<i32>,
47    /// Depth.
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub depth: Option<i32>,
50    /// Full location name (e.g. "London,England,United Kingdom").
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub location_name: Option<String>,
53    /// DataForSEO location code the search was run for.
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub location_code: Option<i32>,
56    /// GPS coordinates the search was run for ("lat,lng,zoom").
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub location_coordinate: Option<String>,
59    /// Platform.
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub platform: Option<String>,
62    /// Ad creative format.
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub format: Option<String>,
65    /// Date from.
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub date_from: Option<String>,
68    /// Date to.
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub date_to: Option<String>,
71    /// User-defined identifier echoed back on the result.
72    #[serde(skip_serializing_if = "Option::is_none")]
73    pub tag: Option<String>,
74    /// URL of the postback.
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub postback_url: Option<String>,
77    /// Postback data.
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub postback_data: Option<String>,
80    /// URL of the pingback.
81    #[serde(skip_serializing_if = "Option::is_none")]
82    pub pingback_url: Option<String>,
83}
84
85impl SerpApiGoogleAdsSearchTaskPostRequest {
86    /// Creates a request scoped to a set of advertiser ids (from Ads Advertisers).
87    pub fn from_advertiser_ids(advertiser_ids: Vec<String>) -> Self {
88        SerpApiGoogleAdsSearchTaskPostRequest {
89            advertiser_ids: Some(advertiser_ids),
90            ..SerpApiGoogleAdsSearchTaskPostRequest::default()
91        }
92    }
93    /// Creates a request scoped to an advertiser's target domain.
94    pub fn from_target<T: Into<String>>(target: T) -> Self {
95        SerpApiGoogleAdsSearchTaskPostRequest {
96            target: Some(target.into()),
97            ..SerpApiGoogleAdsSearchTaskPostRequest::default()
98        }
99    }
100}