about summary refs log tree commit diff stats
path: root/yt_dlp/src/main.rs
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-08-21 10:49:23 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-08-21 11:28:43 +0200
commit1debeb77f7986de1b659dcfdc442de6415e1d9f5 (patch)
tree4df3e7c3f6a2d1ec116e4088c5ace7f143a8b05f /yt_dlp/src/main.rs
downloadyt-1debeb77f7986de1b659dcfdc442de6415e1d9f5.tar.gz
yt-1debeb77f7986de1b659dcfdc442de6415e1d9f5.zip
chore: Initial Commit
This repository was migrated out of my nixos-config.
Diffstat (limited to 'yt_dlp/src/main.rs')
-rw-r--r--yt_dlp/src/main.rs96
1 files changed, 96 insertions, 0 deletions
diff --git a/yt_dlp/src/main.rs b/yt_dlp/src/main.rs
new file mode 100644
index 0000000..c40ddc3
--- /dev/null
+++ b/yt_dlp/src/main.rs
@@ -0,0 +1,96 @@
+// 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);
+}