Skip to main content

data_for_seo/api/serp/youtube/
video_info.rs

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