Skip to main content

data_for_seo/api/serp/youtube/
video_comments.rs

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