data_for_seo/api/serp/google/
local_finder.rs1use crate::entity::{SerpApiGoogleLocalFinderTaskAdvanced, SerpApiGoogleLocalFinderTaskHtml};
2use crate::{DataForSeoApiResponse, SerpApiGoogle, SerpApiTaskReadyResult};
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6impl SerpApiGoogle<'_> {
9 pub async fn local_finder_task_post(
11 &self,
12 data: Vec<SerpApiGoogleLocalFinderTaskPostRequest>,
13 ) -> DataForSeoApiResponse<Value> {
14 self.client
15 .http_post("/v3/serp/google/local_finder/task_post", &data)
16 .await
17 }
18 pub async fn local_finder_tasks_ready(&self) -> DataForSeoApiResponse<SerpApiTaskReadyResult> {
20 self.client
21 .serp()
22 .task_ready_se("google/local_finder")
23 .await
24 }
25 pub async fn local_finder_task_get_advanced(
27 &self,
28 id: &str,
29 ) -> DataForSeoApiResponse<SerpApiGoogleLocalFinderTaskAdvanced> {
30 self.client
31 .http_get(format!("/v3/serp/google/local_finder/task_get/advanced/{id}").as_str())
32 .await
33 }
34 pub async fn local_finder_task_get_html(
36 &self,
37 id: &str,
38 ) -> DataForSeoApiResponse<SerpApiGoogleLocalFinderTaskHtml> {
39 self.client
40 .http_get(format!("/v3/serp/google/local_finder/task_get/html/{id}").as_str())
41 .await
42 }
43 pub async fn local_finder_live_advanced(
45 &self,
46 data: Vec<SerpApiGoogleLocalFinderTaskPostRequest>,
47 ) -> DataForSeoApiResponse<SerpApiGoogleLocalFinderTaskAdvanced> {
48 self.client
49 .http_post("/v3/serp/google/local_finder/live/advanced", &data)
50 .await
51 }
52}
53
54#[derive(Debug, Default, Serialize, Deserialize, Clone)]
57pub struct SerpApiGoogleLocalFinderTaskPostRequest {
58 pub keyword: String,
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub priority: Option<i32>,
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub depth: Option<i32>,
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub location_name: Option<String>,
69 pub location_code: i32,
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub location_coordinate: Option<String>,
74 #[serde(skip_serializing_if = "Option::is_none")]
76 pub language_name: Option<String>,
77 pub language_code: String,
79 #[serde(skip_serializing_if = "Option::is_none")]
81 pub device: Option<String>,
82 #[serde(skip_serializing_if = "Option::is_none")]
84 pub os: Option<String>,
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub min_rating: Option<i32>,
88 #[serde(skip_serializing_if = "Option::is_none")]
90 pub time_filter: Option<String>,
91 #[serde(skip_serializing_if = "Option::is_none")]
93 pub tag: Option<String>,
94 #[serde(skip_serializing_if = "Option::is_none")]
96 pub postback_url: Option<String>,
97 #[serde(skip_serializing_if = "Option::is_none")]
99 pub postback_data: Option<String>,
100 #[serde(skip_serializing_if = "Option::is_none")]
102 pub pingback_url: Option<String>,
103}
104
105impl SerpApiGoogleLocalFinderTaskPostRequest {
106 pub fn new(language_code: String, location_code: i32) -> Self {
109 SerpApiGoogleLocalFinderTaskPostRequest {
110 language_code,
111 location_code,
112 ..SerpApiGoogleLocalFinderTaskPostRequest::default()
113 }
114 }
115}