// yt - A fully featured command line YouTube client // // Copyright (C) 2024 Benedikt Peetz <benedikt.peetz@b-peetz.de> // SPDX-License-Identifier: GPL-3.0-or-later // // This file is part of Yt. // // You should have received a copy of the License along with this program. // If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>. use std::{env::args, fs}; use yt_dlp::wrapper::info_json::InfoJson; #[cfg(test)] mod test { use url::Url; use yt_dlp::wrapper::yt_dlp_options::{ExtractFlat, YtDlpOptions}; const YT_OPTS: YtDlpOptions = YtDlpOptions { playliststart: 1, playlistend: 10, noplaylist: false, extract_flat: ExtractFlat::InPlaylist, }; #[test] fn test_extract_info_video() { let info = yt_dlp::extract_info( YT_OPTS, &Url::parse("https://www.youtube.com/watch?v=dbjPnXaacAU").expect("Is valid."), false, false, false, ) .map_err(|err| format!("Encountered error: '{}'", err)) .unwrap(); println!("{:#?}", info); } #[test] fn test_extract_info_url() { let err = yt_dlp::extract_info( YT_OPTS, &Url::parse("https://google.com").expect("Is valid."), false, false, false, ) .map_err(|err| format!("Encountered error: '{}'", err)) .unwrap(); println!("{:#?}", err); } #[test] fn test_extract_info_playlist() { let err = yt_dlp::extract_info( YT_OPTS, &Url::parse("https://www.youtube.com/@TheGarriFrischer/videos").expect("Is valid."), false, false, true, ) .map_err(|err| format!("Encountered error: '{}'", err)) .unwrap(); println!("{:#?}", err); } #[test] fn test_extract_info_playlist_full() { let err = yt_dlp::extract_info( YT_OPTS, &Url::parse("https://www.youtube.com/@NixOS-Foundation/videos").expect("Is valid."), false, false, true, ) .map_err(|err| format!("Encountered error: '{}'", err)) .unwrap(); println!("{:#?}", err); } } fn main() { let input_file: &str = &args().take(2).collect::<Vec<String>>()[1]; let input = fs::read_to_string(input_file).unwrap(); let output: InfoJson = serde_json::from_str(&input).expect("Python should be able to produce correct json"); println!("{:#?}", output); }