data_for_seo/api/merchant/
google.rs1use crate::api::merchant::MerchantApi;
2use crate::entity::{
3 MerchantApiGoogleProductInfo, MerchantApiGoogleProducts, MerchantApiGoogleReviews,
4 MerchantApiGoogleSellers, MerchantApiLocation, MerchantApiTaskReady, SerpApiLanguage,
5};
6use crate::{DataForSeoApiResponse, DataForSeoClient};
7use serde::{Deserialize, Serialize};
8use serde_json::Value;
9
10impl MerchantApi<'_> {
11 pub fn google(&self) -> MerchantApiGoogle<'_> {
14 MerchantApiGoogle {
15 client: self.client,
16 }
17 }
18}
19
20pub struct MerchantApiGoogle<'a> {
22 client: &'a DataForSeoClient,
23}
24
25impl MerchantApiGoogle<'_> {
26 pub async fn locations(&self) -> DataForSeoApiResponse<MerchantApiLocation> {
28 self.client.http_get("/v3/merchant/google/locations").await
29 }
30 pub async fn locations_country(
32 &self,
33 country: &str,
34 ) -> DataForSeoApiResponse<MerchantApiLocation> {
35 self.client
36 .http_get(format!("/v3/merchant/google/locations/{country}").as_str())
37 .await
38 }
39 pub async fn languages(&self) -> DataForSeoApiResponse<SerpApiLanguage> {
41 self.client.http_get("/v3/merchant/google/languages").await
42 }
43
44 pub async fn products_task_post(
46 &self,
47 data: Vec<MerchantApiGoogleProductsPost>,
48 ) -> DataForSeoApiResponse<Value> {
49 self.client
50 .http_post("/v3/merchant/google/products/task_post", &data)
51 .await
52 }
53 pub async fn products_tasks_ready(&self) -> DataForSeoApiResponse<MerchantApiTaskReady> {
55 self.client
56 .http_get("/v3/merchant/google/products/tasks_ready")
57 .await
58 }
59 pub async fn products_task_get_advanced(
61 &self,
62 id: &str,
63 ) -> DataForSeoApiResponse<MerchantApiGoogleProducts> {
64 self.client
65 .http_get(format!("/v3/merchant/google/products/task_get/advanced/{id}").as_str())
66 .await
67 }
68 pub async fn products_task_get_html(&self, id: &str) -> DataForSeoApiResponse<Value> {
70 self.client
71 .http_get(format!("/v3/merchant/google/products/task_get/html/{id}").as_str())
72 .await
73 }
74
75 pub async fn sellers_task_post(
77 &self,
78 data: Vec<MerchantApiGoogleSellersPost>,
79 ) -> DataForSeoApiResponse<Value> {
80 self.client
81 .http_post("/v3/merchant/google/sellers/task_post", &data)
82 .await
83 }
84 pub async fn sellers_tasks_ready(&self) -> DataForSeoApiResponse<MerchantApiTaskReady> {
86 self.client
87 .http_get("/v3/merchant/google/sellers/tasks_ready")
88 .await
89 }
90 pub async fn sellers_task_get_advanced(
92 &self,
93 id: &str,
94 ) -> DataForSeoApiResponse<MerchantApiGoogleSellers> {
95 self.client
96 .http_get(format!("/v3/merchant/google/sellers/task_get/advanced/{id}").as_str())
97 .await
98 }
99 pub async fn sellers_ad_url(&self, id: &str) -> DataForSeoApiResponse<Value> {
101 self.client
102 .http_get(format!("/v3/merchant/google/sellers/ad_url/{id}").as_str())
103 .await
104 }
105
106 pub async fn product_info_task_post(
108 &self,
109 data: Vec<MerchantApiGoogleProductInfoPost>,
110 ) -> DataForSeoApiResponse<Value> {
111 self.client
112 .http_post("/v3/merchant/google/product_info/task_post", &data)
113 .await
114 }
115 pub async fn product_info_tasks_ready(&self) -> DataForSeoApiResponse<MerchantApiTaskReady> {
117 self.client
118 .http_get("/v3/merchant/google/product_info/tasks_ready")
119 .await
120 }
121 pub async fn product_info_task_get_advanced(
123 &self,
124 id: &str,
125 ) -> DataForSeoApiResponse<MerchantApiGoogleProductInfo> {
126 self.client
127 .http_get(format!("/v3/merchant/google/product_info/task_get/advanced/{id}").as_str())
128 .await
129 }
130
131 pub async fn reviews_task_post(
133 &self,
134 data: Vec<MerchantApiGoogleReviewsPost>,
135 ) -> DataForSeoApiResponse<Value> {
136 self.client
137 .http_post("/v3/merchant/google/reviews/task_post", &data)
138 .await
139 }
140 pub async fn reviews_tasks_ready(&self) -> DataForSeoApiResponse<MerchantApiTaskReady> {
142 self.client
143 .http_get("/v3/merchant/google/reviews/tasks_ready")
144 .await
145 }
146 pub async fn reviews_task_get_advanced(
148 &self,
149 id: &str,
150 ) -> DataForSeoApiResponse<MerchantApiGoogleReviews> {
151 self.client
152 .http_get(format!("/v3/merchant/google/reviews/task_get/advanced/{id}").as_str())
153 .await
154 }
155}
156
157#[derive(Debug, Default, Serialize, Deserialize, Clone)]
160pub struct MerchantApiGoogleProductsPost {
161 pub keyword: String,
163 #[serde(skip_serializing_if = "Option::is_none")]
165 pub url: Option<String>,
166 #[serde(skip_serializing_if = "Option::is_none")]
168 pub priority: Option<i32>,
169 #[serde(skip_serializing_if = "Option::is_none")]
171 pub location_name: Option<String>,
172 #[serde(skip_serializing_if = "Option::is_none")]
174 pub location_code: Option<i32>,
175 #[serde(skip_serializing_if = "Option::is_none")]
177 pub location_coordinate: Option<String>,
178 #[serde(skip_serializing_if = "Option::is_none")]
180 pub language_name: Option<String>,
181 #[serde(skip_serializing_if = "Option::is_none")]
183 pub language_code: Option<String>,
184 #[serde(skip_serializing_if = "Option::is_none")]
186 pub se_domain: Option<String>,
187 #[serde(skip_serializing_if = "Option::is_none")]
189 pub depth: Option<i32>,
190 #[serde(skip_serializing_if = "Option::is_none")]
192 pub max_crawl_pages: Option<i32>,
193 #[serde(skip_serializing_if = "Option::is_none")]
195 pub search_param: Option<String>,
196 #[serde(skip_serializing_if = "Option::is_none")]
198 pub price_min: Option<i32>,
199 #[serde(skip_serializing_if = "Option::is_none")]
201 pub price_max: Option<i32>,
202 #[serde(skip_serializing_if = "Option::is_none")]
204 pub sort_by: Option<String>,
205 #[serde(skip_serializing_if = "Option::is_none")]
207 pub tag: Option<String>,
208 #[serde(skip_serializing_if = "Option::is_none")]
210 pub postback_url: Option<String>,
211 #[serde(skip_serializing_if = "Option::is_none")]
213 pub postback_data: Option<String>,
214 #[serde(skip_serializing_if = "Option::is_none")]
216 pub pingback_url: Option<String>,
217}
218
219impl MerchantApiGoogleProductsPost {
220 pub fn new(keyword: &str) -> MerchantApiGoogleProductsPost {
222 MerchantApiGoogleProductsPost {
223 keyword: keyword.to_string(),
224 ..Default::default()
225 }
226 }
227}
228
229#[derive(Debug, Default, Serialize, Deserialize, Clone)]
232pub struct MerchantApiGoogleSellersPost {
233 #[serde(skip_serializing_if = "Option::is_none")]
235 pub product_id: Option<String>,
236 #[serde(skip_serializing_if = "Option::is_none")]
238 pub data_docid: Option<String>,
239 #[serde(skip_serializing_if = "Option::is_none")]
241 pub gid: Option<String>,
242 #[serde(skip_serializing_if = "Option::is_none")]
244 pub pvf: Option<String>,
245 #[serde(skip_serializing_if = "Option::is_none")]
247 pub priority: Option<i32>,
248 #[serde(skip_serializing_if = "Option::is_none")]
250 pub location_name: Option<String>,
251 #[serde(skip_serializing_if = "Option::is_none")]
253 pub location_code: Option<i32>,
254 #[serde(skip_serializing_if = "Option::is_none")]
256 pub location_coordinate: Option<String>,
257 #[serde(skip_serializing_if = "Option::is_none")]
259 pub language_name: Option<String>,
260 #[serde(skip_serializing_if = "Option::is_none")]
262 pub language_code: Option<String>,
263 #[serde(skip_serializing_if = "Option::is_none")]
265 pub se_domain: Option<String>,
266 #[serde(skip_serializing_if = "Option::is_none")]
268 pub depth: Option<i32>,
269 #[serde(skip_serializing_if = "Option::is_none")]
271 pub get_shops_on_google: Option<bool>,
272 #[serde(skip_serializing_if = "Option::is_none")]
274 pub additional_specifications: Option<Value>,
275 #[serde(skip_serializing_if = "Option::is_none")]
277 pub tag: Option<String>,
278 #[serde(skip_serializing_if = "Option::is_none")]
280 pub postback_url: Option<String>,
281 #[serde(skip_serializing_if = "Option::is_none")]
283 pub postback_data: Option<String>,
284 #[serde(skip_serializing_if = "Option::is_none")]
286 pub pingback_url: Option<String>,
287}
288
289impl MerchantApiGoogleSellersPost {
290 pub fn new(product_id: &str) -> MerchantApiGoogleSellersPost {
292 MerchantApiGoogleSellersPost {
293 product_id: Some(product_id.to_string()),
294 ..Default::default()
295 }
296 }
297}
298
299#[derive(Debug, Default, Serialize, Deserialize, Clone)]
302pub struct MerchantApiGoogleProductInfoPost {
303 #[serde(skip_serializing_if = "Option::is_none")]
305 pub product_id: Option<String>,
306 #[serde(skip_serializing_if = "Option::is_none")]
308 pub data_docid: Option<String>,
309 #[serde(skip_serializing_if = "Option::is_none")]
311 pub gid: Option<String>,
312 #[serde(skip_serializing_if = "Option::is_none")]
314 pub priority: Option<i32>,
315 #[serde(skip_serializing_if = "Option::is_none")]
317 pub location_name: Option<String>,
318 #[serde(skip_serializing_if = "Option::is_none")]
320 pub location_code: Option<i32>,
321 #[serde(skip_serializing_if = "Option::is_none")]
323 pub location_coordinate: Option<String>,
324 #[serde(skip_serializing_if = "Option::is_none")]
326 pub language_name: Option<String>,
327 #[serde(skip_serializing_if = "Option::is_none")]
329 pub language_code: Option<String>,
330 #[serde(skip_serializing_if = "Option::is_none")]
332 pub se_domain: Option<String>,
333 #[serde(skip_serializing_if = "Option::is_none")]
335 pub tag: Option<String>,
336 #[serde(skip_serializing_if = "Option::is_none")]
338 pub postback_url: Option<String>,
339 #[serde(skip_serializing_if = "Option::is_none")]
341 pub postback_data: Option<String>,
342 #[serde(skip_serializing_if = "Option::is_none")]
344 pub pingback_url: Option<String>,
345}
346
347impl MerchantApiGoogleProductInfoPost {
348 pub fn new(product_id: &str) -> MerchantApiGoogleProductInfoPost {
350 MerchantApiGoogleProductInfoPost {
351 product_id: Some(product_id.to_string()),
352 ..Default::default()
353 }
354 }
355}
356
357#[derive(Debug, Default, Serialize, Deserialize, Clone)]
360pub struct MerchantApiGoogleReviewsPost {
361 #[serde(skip_serializing_if = "Option::is_none")]
363 pub gid: Option<String>,
364 #[serde(skip_serializing_if = "Option::is_none")]
366 pub product_id: Option<String>,
367 #[serde(skip_serializing_if = "Option::is_none")]
369 pub data_docid: Option<String>,
370 #[serde(skip_serializing_if = "Option::is_none")]
372 pub priority: Option<i32>,
373 #[serde(skip_serializing_if = "Option::is_none")]
375 pub location_name: Option<String>,
376 #[serde(skip_serializing_if = "Option::is_none")]
378 pub location_code: Option<i32>,
379 #[serde(skip_serializing_if = "Option::is_none")]
381 pub location_coordinate: Option<String>,
382 #[serde(skip_serializing_if = "Option::is_none")]
384 pub language_name: Option<String>,
385 #[serde(skip_serializing_if = "Option::is_none")]
387 pub language_code: Option<String>,
388 #[serde(skip_serializing_if = "Option::is_none")]
390 pub se_domain: Option<String>,
391 #[serde(skip_serializing_if = "Option::is_none")]
393 pub depth: Option<i32>,
394 #[serde(skip_serializing_if = "Option::is_none")]
396 pub tag: Option<String>,
397 #[serde(skip_serializing_if = "Option::is_none")]
399 pub postback_url: Option<String>,
400 #[serde(skip_serializing_if = "Option::is_none")]
402 pub postback_data: Option<String>,
403 #[serde(skip_serializing_if = "Option::is_none")]
405 pub pingback_url: Option<String>,
406}
407
408impl MerchantApiGoogleReviewsPost {
409 pub fn new(gid: &str) -> MerchantApiGoogleReviewsPost {
411 MerchantApiGoogleReviewsPost {
412 gid: Some(gid.to_string()),
413 ..Default::default()
414 }
415 }
416}