yaydl is Yet Another Youtube Down Loader, written in Rust.

⌈⌋ ⎇ branch:  Yet Another Youtube (and more) Down Loader


Check-in [451d2ae3f9]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:yaydl 0.15.4: less bad VOE handling; handles #20.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | release-0.15.4
Files: files | file ages | folders
SHA3-256: 451d2ae3f97a037a20ae75681e1aba9bb5cb0b71364d872a72f844734d5a5406
User & Date: Cthulhux 2024-08-28 23:29:23
Context
2024-09-12
18:29
prebuilt windows check-in: 313baa7998 user: Cthulhux tags: trunk
2024-08-28
23:29
yaydl 0.15.4: less bad VOE handling; handles #20. check-in: 451d2ae3f9 user: Cthulhux tags: release-0.15.4, trunk
2024-08-25
00:34
yaydl 0.15.3: fixed watchmdh (which is now watchdirty). check-in: 7f0175a947 user: Cthulhux tags: release-0.15.3, trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to Cargo.lock.

1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
name = "windows_x86_64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"

[[package]]
name = "yaydl"
version = "0.15.3"
dependencies = [
 "anyhow",
 "cienli",
 "clap",
 "env_proxy",
 "fantoccini",
 "indicatif",







|







1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
name = "windows_x86_64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"

[[package]]
name = "yaydl"
version = "0.15.4"
dependencies = [
 "anyhow",
 "cienli",
 "clap",
 "env_proxy",
 "fantoccini",
 "indicatif",

Changes to Cargo.toml.

1
2
3
4
5
6
7
8
9
10
11
[package]
name = "yaydl"
description = "yet another youtube (and more) down loader"
version = "0.15.3"
authors = ["Cthulhux <git@tuxproject.de>"]
edition = "2021"
license = "CDDL-1.0"
repository = "https://code.rosaelefanten.org/yaydl"
categories = ["command-line-utilities"]
keywords = ["youtube", "downloading", "video"]




|







1
2
3
4
5
6
7
8
9
10
11
[package]
name = "yaydl"
description = "yet another youtube (and more) down loader"
version = "0.15.4"
authors = ["Cthulhux <git@tuxproject.de>"]
edition = "2021"
license = "CDDL-1.0"
repository = "https://code.rosaelefanten.org/yaydl"
categories = ["command-line-utilities"]
keywords = ["youtube", "downloading", "video"]

Changes to src/handlers/voe_catchall.rs.

13
14
15
16
17
18
19

20
21
22
23
24
25
26
 * distribution.
 */

// Yet Another Youtube Down Loader
// - VOE handler for several other domains. -
//
// Tried and implemented:

// - jayservicestuff.com

use crate::definitions::SiteDefinition;

use anyhow::{anyhow, Result};
use fantoccini::ClientBuilder;
use regex::Regex;







>







13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 * distribution.
 */

// Yet Another Youtube Down Loader
// - VOE handler for several other domains. -
//
// Tried and implemented:
// - bethshouldercan.com
// - jayservicestuff.com

use crate::definitions::SiteDefinition;

use anyhow::{anyhow, Result};
use fantoccini::ClientBuilder;
use regex::Regex;
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
    Ok(true)
}

// Implement the site definition:
struct VoeCatchallHandler;
impl SiteDefinition for VoeCatchallHandler {
    fn can_handle_url<'a>(&'a self, url: &'a str) -> bool {
        Regex::new(r"(?:\.)?jayservicestuff.com/.+")
            .unwrap()
            .is_match(url)
    }

    fn is_playlist<'a>(&'a self, _url: &'a str, _webdriver_port: u16) -> Result<bool> {
        Ok(true)
    }







|







73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
    Ok(true)
}

// Implement the site definition:
struct VoeCatchallHandler;
impl SiteDefinition for VoeCatchallHandler {
    fn can_handle_url<'a>(&'a self, url: &'a str) -> bool {
        Regex::new(r"(?:\.)?(jayservicestuff|bethshouldercan)\.com/.+")
            .unwrap()
            .is_match(url)
    }

    fn is_playlist<'a>(&'a self, _url: &'a str, _webdriver_port: u16) -> Result<bool> {
        Ok(true)
    }

Changes to src/handlers/watchmdh.rs.

84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
    fn find_video_direct_url<'a>(
        &'a self,
        video: &'a mut VIDEO,
        url: &'a str,
        _webdriver_port: u16,
        _onlyaudio: bool,
    ) -> Result<String> {
	let _not_used = get_video_info(video, url, _webdriver_port)?;
        let video_info_html = Html::parse_document(video.info.as_str());

        let url_selector = Selector::parse("video").unwrap();
        let url_elem = video_info_html.select(&url_selector).next().unwrap();
        let url_contents = url_elem.value().attr("src").unwrap();

        Ok(url_contents.to_string())







|







84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
    fn find_video_direct_url<'a>(
        &'a self,
        video: &'a mut VIDEO,
        url: &'a str,
        _webdriver_port: u16,
        _onlyaudio: bool,
    ) -> Result<String> {
        let _not_used = get_video_info(video, url, _webdriver_port)?;
        let video_info_html = Html::parse_document(video.info.as_str());

        let url_selector = Selector::parse("video").unwrap();
        let url_elem = video_info_html.select(&url_selector).next().unwrap();
        let url_contents = url_elem.value().attr("src").unwrap();

        Ok(url_contents.to_string())