data_for_seo/api/serp/youtube/
video_info.rs1use crate::SerpApiYoutube;
2use crate::entity::SerpApiYoutubeVideoInfoTaskAdvanced;
3use crate::{DataForSeoApiResponse, SerpApiTaskReadyResult};
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6
7impl SerpApiYoutube<'_> {
10 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 pub async fn video_info_tasks_ready(&self) -> DataForSeoApiResponse<SerpApiTaskReadyResult> {
21 self.client.serp().task_ready_se("youtube/video_info").await
22 }
23 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 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#[derive(Debug, Default, Serialize, Deserialize, Clone)]
46pub struct SerpApiYoutubeVideoInfoTaskPostRequest {
47 pub video_id: String,
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub priority: Option<i32>,
52 #[serde(skip_serializing_if = "Option::is_none")]
54 pub location_name: Option<String>,
55 pub location_code: i32,
57 #[serde(skip_serializing_if = "Option::is_none")]
59 pub language_name: Option<String>,
60 pub language_code: String,
62 #[serde(skip_serializing_if = "Option::is_none")]
64 pub device: Option<String>,
65 #[serde(skip_serializing_if = "Option::is_none")]
67 pub os: Option<String>,
68 #[serde(skip_serializing_if = "Option::is_none")]
70 pub tag: Option<String>,
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub postback_url: Option<String>,
74 #[serde(skip_serializing_if = "Option::is_none")]
76 pub postback_data: Option<String>,
77 #[serde(skip_serializing_if = "Option::is_none")]
79 pub pingback_url: Option<String>,
80}
81
82impl SerpApiYoutubeVideoInfoTaskPostRequest {
83 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}