Skip to main content

data_for_seo/api/serp/google/
autocomplete.rs

1use crate::entity::SerpApiGoogleAutocompleteAdvanced;
2use crate::{DataForSeoApiResponse, SerpApiGoogle, SerpApiTaskReadyResult};
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6/// Google Autocomplete SERP endpoint.
7/// <https://docs.dataforseo.com/v3/serp/google/autocomplete/overview/>
8impl SerpApiGoogle<'_> {
9    /// <https://docs.dataforseo.com/v3/serp/google/autocomplete/task_post/>
10    pub async fn autocomplete_task_post(
11        &self,
12        data: Vec<SerpApiGoogleAutoCompleteTaskPostRequest>,
13    ) -> DataForSeoApiResponse<Value> {
14        self.client
15            .http_post("/v3/serp/google/autocomplete/task_post", &data)
16            .await
17    }
18    /// <https://docs.dataforseo.com/v3/serp/google/autocomplete/tasks_ready/>
19    pub async fn autocomplete_tasks_ready(&self) -> DataForSeoApiResponse<SerpApiTaskReadyResult> {
20        self.client
21            .serp()
22            .task_ready_se("google/autocomplete")
23            .await
24    }
25    /// <https://docs.dataforseo.com/v3/serp/google/autocomplete/tasks_fixed/>
26    pub async fn autocomplete_tasks_fixed(&self) -> DataForSeoApiResponse<SerpApiTaskReadyResult> {
27        self.client
28            .serp()
29            .task_fixed_se("google/autocomplete")
30            .await
31    }
32    /// <https://docs.dataforseo.com/v3/serp/google/autocomplete/task_get/advanced/>
33    pub async fn autocomplete_task_get_advanced(
34        &self,
35        id: &str,
36    ) -> DataForSeoApiResponse<SerpApiGoogleAutocompleteAdvanced> {
37        self.client
38            .http_get(format!("/v3/serp/google/autocomplete/task_get/advanced/{id}").as_str())
39            .await
40    }
41    /// <https://docs.dataforseo.com/v3/serp/google/autocomplete/live/advanced/>
42    pub async fn autocomplete_live_advanced(
43        &self,
44        data: Vec<SerpApiGoogleAutoCompleteTaskPostRequest>,
45    ) -> DataForSeoApiResponse<SerpApiGoogleAutocompleteAdvanced> {
46        self.client
47            .http_post("/v3/serp/google/autocomplete/live/advanced", &data)
48            .await
49    }
50}
51
52/// Request body for Google Autocomplete task_post / live.
53/// See <https://docs.dataforseo.com/v3/serp/google/autocomplete/task_post/>.
54#[derive(Debug, Default, Serialize, Deserialize, Clone)]
55pub struct SerpApiGoogleAutoCompleteTaskPostRequest {
56    /// Search term the result was returned for.
57    pub keyword: String,
58    /// Task execution priority: 1 (normal) or 2 (high).
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub priority: Option<i32>,
61    /// Full location name (e.g. "London,England,United Kingdom").
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub location_name: Option<String>,
64    /// DataForSEO location code the search was run for.
65    pub location_code: i32,
66    /// Full language name of the search.
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub language_name: Option<String>,
69    /// Language code the search was run for.
70    pub language_code: String,
71    /// Cursor pointer.
72    #[serde(skip_serializing_if = "Option::is_none")]
73    pub cursor_pointer: Option<i32>,
74    /// Client.
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub client: Option<String>,
77    /// User-defined identifier echoed back on the result.
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub tag: Option<String>,
80    /// URL of the postback.
81    #[serde(skip_serializing_if = "Option::is_none")]
82    pub postback_url: Option<String>,
83    /// Postback data.
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub postback_data: Option<String>,
86    /// URL of the pingback.
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub pingback_url: Option<String>,
89}
90
91impl SerpApiGoogleAutoCompleteTaskPostRequest {
92    /// Creates a request with the required language and location codes.
93    /// Set `keyword` and any optional fields before sending.
94    pub fn new(language_code: String, location_code: i32) -> Self {
95        SerpApiGoogleAutoCompleteTaskPostRequest {
96            language_code,
97            location_code,
98            ..SerpApiGoogleAutoCompleteTaskPostRequest::default()
99        }
100    }
101}