Skip to main content

data_for_seo/api/serp/google/
search_by_image.rs

1use crate::entity::{SerpApiGoogleSearchByImageTaskAdvanced, SerpApiGoogleSearchByImageTaskHtml};
2use crate::{DataForSeoApiResponse, SerpApiGoogle, SerpApiTaskReadyResult};
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6/// Google Search By Image SERP endpoint.
7/// <https://docs.dataforseo.com/v3/serp/google/search_by_image/overview/>
8impl SerpApiGoogle<'_> {
9    /// <https://docs.dataforseo.com/v3/serp/google/search_by_image/task_post/>
10    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    /// <https://docs.dataforseo.com/v3/serp/google/search_by_image/tasks_ready/>
19    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    /// <https://docs.dataforseo.com/v3/serp/google/search_by_image/task_get/advanced/>
28    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    /// <https://docs.dataforseo.com/v3/serp/google/search_by_image/task_get/html/>
37    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/// Request body for Google Search By Image task_post.
48/// See <https://docs.dataforseo.com/v3/serp/google/search_by_image/task_post/>.
49#[derive(Debug, Default, Serialize, Deserialize, Clone)]
50pub struct SerpApiGoogleSearchByImageTaskPostRequest {
51    /// URL of the image.
52    pub image_url: String,
53    /// Task execution priority: 1 (normal) or 2 (high).
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub priority: Option<i32>,
56    /// Full location name (e.g. "London,England,United Kingdom").
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub location_name: Option<String>,
59    /// DataForSEO location code the search was run for.
60    pub location_code: i32,
61    /// GPS coordinates the search was run for ("lat,lng,zoom").
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub location_coordinate: Option<String>,
64    /// Full language name of the search.
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub language_name: Option<String>,
67    /// Language code the search was run for.
68    pub language_code: String,
69    /// Search-engine domain the results were taken from.
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub se_domain: Option<String>,
72    /// Max crawl pages.
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub max_crawl_pages: Option<i32>,
75    /// Calculate rectangles.
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub calculate_rectangles: Option<bool>,
78    /// Browser screen width.
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub browser_screen_width: Option<i32>,
81    /// Browser screen height.
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub browser_screen_height: Option<i32>,
84    /// User-defined identifier echoed back on the result.
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub tag: Option<String>,
87    /// URL of the postback.
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub postback_url: Option<String>,
90    /// Postback data.
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub postback_data: Option<String>,
93    /// URL of the pingback.
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub pingback_url: Option<String>,
96}
97
98impl SerpApiGoogleSearchByImageTaskPostRequest {
99    /// Creates a request for the given image URL with required language and location codes.
100    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}