Skip to main content

data_for_seo/api/serp/google/
dataset.rs

1use crate::entity::{SerpApiGoogleDatasetInfoAdvanced, SerpApiGoogleDatasetSearchAdvanced};
2use crate::{DataForSeoApiResponse, SerpApiGoogle, SerpApiTaskReadyResult};
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6/// Google Dataset Search & Dataset Info SERP endpoints.
7/// <https://docs.dataforseo.com/v3/serp/google/dataset_search/overview/>
8impl SerpApiGoogle<'_> {
9    /// <https://docs.dataforseo.com/v3/serp/google/dataset_search/task_post/>
10    pub async fn dataset_search_task_post(
11        &self,
12        data: Vec<SerpApiGoogleDatasetSearchTaskPostRequest>,
13    ) -> DataForSeoApiResponse<Value> {
14        self.client
15            .http_post("/v3/serp/google/dataset_search/task_post", &data)
16            .await
17    }
18    /// <https://docs.dataforseo.com/v3/serp/google/dataset_search/tasks_ready/>
19    pub async fn dataset_search_tasks_ready(
20        &self,
21    ) -> DataForSeoApiResponse<SerpApiTaskReadyResult> {
22        self.client
23            .serp()
24            .task_ready_se("google/dataset_search")
25            .await
26    }
27    /// <https://docs.dataforseo.com/v3/serp/google/dataset_search/task_get/advanced/>
28    pub async fn dataset_search_task_get_advanced(
29        &self,
30        id: &str,
31    ) -> DataForSeoApiResponse<SerpApiGoogleDatasetSearchAdvanced> {
32        self.client
33            .http_get(format!("/v3/serp/google/dataset_search/task_get/advanced/{id}").as_str())
34            .await
35    }
36    /// <https://docs.dataforseo.com/v3/serp/google/dataset_search/live/advanced/>
37    pub async fn dataset_search_live_advanced(
38        &self,
39        data: Vec<SerpApiGoogleDatasetSearchTaskPostRequest>,
40    ) -> DataForSeoApiResponse<SerpApiGoogleDatasetSearchAdvanced> {
41        self.client
42            .http_post("/v3/serp/google/dataset_search/live/advanced", &data)
43            .await
44    }
45
46    /// <https://docs.dataforseo.com/v3/serp/google/dataset_info/task_post/>
47    pub async fn dataset_info_task_post(
48        &self,
49        data: Vec<SerpApiGoogleDatasetInfoTaskPostRequest>,
50    ) -> DataForSeoApiResponse<Value> {
51        self.client
52            .http_post("/v3/serp/google/dataset_info/task_post", &data)
53            .await
54    }
55    /// <https://docs.dataforseo.com/v3/serp/google/dataset_info/tasks_ready/>
56    pub async fn dataset_info_tasks_ready(&self) -> DataForSeoApiResponse<SerpApiTaskReadyResult> {
57        self.client
58            .serp()
59            .task_ready_se("google/dataset_info")
60            .await
61    }
62    /// <https://docs.dataforseo.com/v3/serp/google/dataset_info/task_get/advanced/>
63    pub async fn dataset_info_task_get_advanced(
64        &self,
65        id: &str,
66    ) -> DataForSeoApiResponse<SerpApiGoogleDatasetInfoAdvanced> {
67        self.client
68            .http_get(format!("/v3/serp/google/dataset_info/task_get/advanced/{id}").as_str())
69            .await
70    }
71    /// <https://docs.dataforseo.com/v3/serp/google/dataset_info/live/advanced/>
72    pub async fn dataset_info_live_advanced(
73        &self,
74        data: Vec<SerpApiGoogleDatasetInfoTaskPostRequest>,
75    ) -> DataForSeoApiResponse<SerpApiGoogleDatasetInfoAdvanced> {
76        self.client
77            .http_post("/v3/serp/google/dataset_info/live/advanced", &data)
78            .await
79    }
80}
81
82/// Request body for Google Dataset Search task_post / live.
83/// See <https://docs.dataforseo.com/v3/serp/google/dataset_search/task_post/>.
84#[derive(Debug, Default, Serialize, Deserialize, Clone)]
85pub struct SerpApiGoogleDatasetSearchTaskPostRequest {
86    /// Search term the result was returned for.
87    pub keyword: String,
88    /// Task execution priority: 1 (normal) or 2 (high).
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub priority: Option<i32>,
91    /// Depth.
92    #[serde(skip_serializing_if = "Option::is_none")]
93    pub depth: Option<i32>,
94    /// Full language name of the search.
95    #[serde(skip_serializing_if = "Option::is_none")]
96    pub language_name: Option<String>,
97    /// Language code the search was run for.
98    #[serde(skip_serializing_if = "Option::is_none")]
99    pub language_code: Option<String>,
100    /// Device.
101    #[serde(skip_serializing_if = "Option::is_none")]
102    pub device: Option<String>,
103    /// Last updated.
104    #[serde(skip_serializing_if = "Option::is_none")]
105    pub last_updated: Option<String>,
106    /// File formats.
107    #[serde(skip_serializing_if = "Option::is_none")]
108    pub file_formats: Option<Vec<String>>,
109    /// Usage rights.
110    #[serde(skip_serializing_if = "Option::is_none")]
111    pub usage_rights: Option<String>,
112    /// `true` if the result is free.
113    #[serde(skip_serializing_if = "Option::is_none")]
114    pub is_free: Option<bool>,
115    /// Topics.
116    #[serde(skip_serializing_if = "Option::is_none")]
117    pub topics: Option<Vec<String>>,
118    /// User-defined identifier echoed back on the result.
119    #[serde(skip_serializing_if = "Option::is_none")]
120    pub tag: Option<String>,
121    /// URL of the postback.
122    #[serde(skip_serializing_if = "Option::is_none")]
123    pub postback_url: Option<String>,
124    /// Postback data.
125    #[serde(skip_serializing_if = "Option::is_none")]
126    pub postback_data: Option<String>,
127    /// URL of the pingback.
128    #[serde(skip_serializing_if = "Option::is_none")]
129    pub pingback_url: Option<String>,
130}
131
132impl SerpApiGoogleDatasetSearchTaskPostRequest {
133    /// Creates a request for the given dataset search term.
134    pub fn new<T: Into<String>>(keyword: T) -> Self {
135        SerpApiGoogleDatasetSearchTaskPostRequest {
136            keyword: keyword.into(),
137            ..SerpApiGoogleDatasetSearchTaskPostRequest::default()
138        }
139    }
140}
141
142/// Request body for Google Dataset Info task_post / live.
143/// See <https://docs.dataforseo.com/v3/serp/google/dataset_info/task_post/>.
144#[derive(Debug, Default, Serialize, Deserialize, Clone)]
145pub struct SerpApiGoogleDatasetInfoTaskPostRequest {
146    /// Google Dataset Search identifier.
147    pub dataset_id: String,
148    /// Task execution priority: 1 (normal) or 2 (high).
149    #[serde(skip_serializing_if = "Option::is_none")]
150    pub priority: Option<i32>,
151    /// Full language name of the search.
152    #[serde(skip_serializing_if = "Option::is_none")]
153    pub language_name: Option<String>,
154    /// Language code the search was run for.
155    #[serde(skip_serializing_if = "Option::is_none")]
156    pub language_code: Option<String>,
157    /// Device.
158    #[serde(skip_serializing_if = "Option::is_none")]
159    pub device: Option<String>,
160    /// Os.
161    #[serde(skip_serializing_if = "Option::is_none")]
162    pub os: Option<String>,
163    /// User-defined identifier echoed back on the result.
164    #[serde(skip_serializing_if = "Option::is_none")]
165    pub tag: Option<String>,
166    /// URL of the postback.
167    #[serde(skip_serializing_if = "Option::is_none")]
168    pub postback_url: Option<String>,
169    /// Postback data.
170    #[serde(skip_serializing_if = "Option::is_none")]
171    pub postback_data: Option<String>,
172    /// URL of the pingback.
173    #[serde(skip_serializing_if = "Option::is_none")]
174    pub pingback_url: Option<String>,
175}
176
177impl SerpApiGoogleDatasetInfoTaskPostRequest {
178    /// Creates a request for the given dataset id.
179    pub fn new<T: Into<String>>(dataset_id: T) -> Self {
180        SerpApiGoogleDatasetInfoTaskPostRequest {
181            dataset_id: dataset_id.into(),
182            ..SerpApiGoogleDatasetInfoTaskPostRequest::default()
183        }
184    }
185}