Add support for extracting videos.

This commit is contained in:
FireMasterK 2021-04-30 11:39:32 +05:30
parent dabd19981c
commit d81633205f
No known key found for this signature in database
GPG Key ID: 8DFF5DD33E93DB58
3 changed files with 93 additions and 0 deletions

View File

@ -20,3 +20,7 @@ path = "playlist.rs"
[[example]]
name = "trending"
path = "trending.rs"
[[example]]
name = "video"
path = "video.rs"

21
examples/video.rs Normal file
View File

@ -0,0 +1,21 @@
use piped::piped::PipedClient;
use reqwest::ClientBuilder;
#[tokio::main]
async fn main() {
let httpclient = ClientBuilder::new()
.user_agent("Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0")
.build()
.unwrap();
let instance = "https://pipedapi.kavin.rocks".to_string();
let client = PipedClient::new(httpclient, instance);
let video = client
.get_video_from_id("__hYx6ZzFbQ".to_string())
.await
.unwrap();
println!("{:?}", video);
}

View File

@ -112,6 +112,23 @@ pub mod piped {
Ok(streams)
}
pub async fn get_video_from_id(
&self,
id: String,
) -> Result<VideoInfo, Box<dyn std::error::Error>> {
let resp = &self
.httpclient
.get(format!("{}/streams/{}", &self.instance, id))
.send()
.await?
.text()
.await?;
let video: VideoInfo = serde_json::from_str(resp.as_str())?;
Ok(video)
}
}
#[derive(Deserialize, Debug)]
@ -162,4 +179,55 @@ pub mod piped {
pub duration: i32,
pub views: i64,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VideoInfo {
pub title: String,
pub description: String,
pub upload_date: String,
pub uploader: String,
pub uploader_url: String,
pub uploader_avatar: String,
pub thumbnail_url: String,
pub hls: ::serde_json::Value,
pub duration: i32,
pub views: i64,
pub likes: i64,
pub dislikes: i64,
pub audio_streams: Vec<Stream>,
pub video_streams: Vec<Stream>,
pub related_streams: Vec<RelatedStream>,
pub subtitles: Vec<Subtitle>,
pub livestream: bool,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Stream {
pub url: String,
pub format: String,
pub quality: String,
pub mime_type: String,
pub codec: Option<String>,
pub video_only: bool,
pub bitrate: i32,
pub init_start: i32,
pub init_end: i32,
pub index_start: i32,
pub index_end: i32,
pub width: i32,
pub height: i32,
pub fps: i32,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Subtitle {
pub url: String,
pub mime_type: String,
pub name: String,
pub code: String,
pub auto_generated: bool,
}
}