data_for_seo/api/serp/google/
search_by_image.rs1use crate::entity::{SerpApiGoogleSearchByImageTaskAdvanced, SerpApiGoogleSearchByImageTaskHtml};
2use crate::{DataForSeoApiResponse, SerpApiGoogle, SerpApiTaskReadyResult};
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6impl SerpApiGoogle<'_> {
9 pub async fn search_by_image_task_post(
11 &self,
12 data: Vec<SerpApiGoogleSearchByImageTaskPostRequest>,
13 ) -> DataForSeoApiResponse<Value> {
14 self.client
15 .http_post("/v3/serp/google/search_by_image/task_post", &data)
16 .await
17 }
18 pub async fn search_by_image_tasks_ready(
20 &self,
21 ) -> DataForSeoApiResponse<SerpApiTaskReadyResult> {
22 self.client
23 .serp()
24 .task_ready_se("google/search_by_image")
25 .await
26 }
27 pub async fn search_by_image_task_get_advanced(
29 &self,
30 id: &str,
31 ) -> DataForSeoApiResponse<SerpApiGoogleSearchByImageTaskAdvanced> {
32 self.client
33 .http_get(format!("/v3/serp/google/search_by_image/task_get/advanced/{id}").as_str())
34 .await
35 }
36 pub async fn search_by_image_task_get_html(
38 &self,
39 id: &str,
40 ) -> DataForSeoApiResponse<SerpApiGoogleSearchByImageTaskHtml> {
41 self.client
42 .http_get(format!("/v3/serp/google/search_by_image/task_get/html/{id}").as_str())
43 .await
44 }
45}
46
47#[derive(Debug, Default, Serialize, Deserialize, Clone)]
50pub struct SerpApiGoogleSearchByImageTaskPostRequest {
51 pub image_url: String,
53 #[serde(skip_serializing_if = "Option::is_none")]
55 pub priority: Option<i32>,
56 #[serde(skip_serializing_if = "Option::is_none")]
58 pub location_name: Option<String>,
59 pub location_code: i32,
61 #[serde(skip_serializing_if = "Option::is_none")]
63 pub location_coordinate: Option<String>,
64 #[serde(skip_serializing_if = "Option::is_none")]
66 pub language_name: Option<String>,
67 pub language_code: String,
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub se_domain: Option<String>,
72 #[serde(skip_serializing_if = "Option::is_none")]
74 pub max_crawl_pages: Option<i32>,
75 #[serde(skip_serializing_if = "Option::is_none")]
77 pub calculate_rectangles: Option<bool>,
78 #[serde(skip_serializing_if = "Option::is_none")]
80 pub browser_screen_width: Option<i32>,
81 #[serde(skip_serializing_if = "Option::is_none")]
83 pub browser_screen_height: Option<i32>,
84 #[serde(skip_serializing_if = "Option::is_none")]
86 pub tag: Option<String>,
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub postback_url: Option<String>,
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub postback_data: Option<String>,
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub pingback_url: Option<String>,
96}
97
98impl SerpApiGoogleSearchByImageTaskPostRequest {
99 pub fn new<T: Into<String>>(image_url: T, language_code: String, location_code: i32) -> Self {
101 SerpApiGoogleSearchByImageTaskPostRequest {
102 image_url: image_url.into(),
103 language_code,
104 location_code,
105 ..SerpApiGoogleSearchByImageTaskPostRequest::default()
106 }
107 }
108}