Skip to main content

data_for_seo/api/serp/youtube/
video_subtitles.rs

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