data_for_seo/api/serp/youtube/
video_subtitles.rs1use crate::SerpApiYoutube;
2use crate::entity::SerpApiYoutubeVideoSubtitlesTaskAdvanced;
3use crate::{DataForSeoApiResponse, SerpApiTaskReadyResult};
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6
7impl SerpApiYoutube<'_> {
10 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 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 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 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#[derive(Debug, Default, Serialize, Deserialize, Clone)]
51pub struct SerpApiYoutubeVideoSubtitlesTaskPostRequest {
52 pub video_id: String,
54 #[serde(skip_serializing_if = "Option::is_none")]
56 pub priority: Option<i32>,
57 #[serde(skip_serializing_if = "Option::is_none")]
59 pub location_name: Option<String>,
60 pub location_code: i32,
62 #[serde(skip_serializing_if = "Option::is_none")]
64 pub language_name: Option<String>,
65 pub language_code: String,
67 #[serde(skip_serializing_if = "Option::is_none")]
69 pub device: Option<String>,
70 #[serde(skip_serializing_if = "Option::is_none")]
72 pub os: Option<String>,
73 #[serde(skip_serializing_if = "Option::is_none")]
75 pub subtitles_language: Option<String>,
76 #[serde(skip_serializing_if = "Option::is_none")]
78 pub subtitles_translate_language: Option<String>,
79 #[serde(skip_serializing_if = "Option::is_none")]
81 pub tag: Option<String>,
82 #[serde(skip_serializing_if = "Option::is_none")]
84 pub postback_url: Option<String>,
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub postback_data: Option<String>,
88 #[serde(skip_serializing_if = "Option::is_none")]
90 pub pingback_url: Option<String>,
91}
92
93impl SerpApiYoutubeVideoSubtitlesTaskPostRequest {
94 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}