Compare commits
26 commits
main
...
feat/deobf
| Author | SHA1 | Date | |
|---|---|---|---|
| 597db1797a | |||
| 33c531d2a4 | |||
| 4ee4469303 | |||
| 94a602ede8 | |||
| bb730961b2 | |||
| df0cb2fdf4 | |||
| 2131b47ef7 | |||
| e2d8ab44d2 | |||
| 57101b2df6 | |||
| 6bb1d03cc1 | |||
| eff2440342 | |||
| 690135205e | |||
| 79340c92c9 | |||
| f765c851b6 | |||
| 3b3abfbdff | |||
| 185f4177d3 | |||
| 60afa8913c | |||
| 0a1067e6c5 | |||
| aeb47010f6 | |||
| 7425243dea | |||
| dc6640df20 | |||
| 4e3054eb5d | |||
| 6eb770428e | |||
| cdcb36bd28 | |||
|
|
a5c9ca89f2 | ||
|
|
f5bab5b81c |
181 changed files with 262866 additions and 11888 deletions
46
Cargo.toml
46
Cargo.toml
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "rustypipe"
|
||||
version = "0.11.4"
|
||||
rust-version = "1.67.1"
|
||||
rust-version = "1.89.0"
|
||||
edition.workspace = true
|
||||
authors.workspace = true
|
||||
license.workspace = true
|
||||
|
|
@ -13,10 +13,10 @@ description = "Client for the public YouTube / YouTube Music API (Innertube), in
|
|||
include = ["/src", "README.md", "CHANGELOG.md", "LICENSE", "!snapshots"]
|
||||
|
||||
[workspace]
|
||||
members = [".", "codegen", "downloader", "cli"]
|
||||
members = [".", "codegen", "downloader", "cli", "deobfuscator"]
|
||||
|
||||
[workspace.package]
|
||||
edition = "2021"
|
||||
edition = "2024"
|
||||
authors = ["ThetaDev <thetadev@magenta.de>"]
|
||||
license = "GPL-3.0"
|
||||
repository = "https://codeberg.org/ThetaDev/rustypipe"
|
||||
|
|
@ -24,13 +24,12 @@ keywords = ["youtube", "video", "music"]
|
|||
categories = ["api-bindings", "multimedia"]
|
||||
|
||||
[workspace.dependencies]
|
||||
rquickjs = "0.9.0"
|
||||
rquickjs = "0.12.0"
|
||||
once_cell = "1.12.0"
|
||||
regex = "1.6.0"
|
||||
fancy-regex = "0.14.0"
|
||||
thiserror = "2.0.0"
|
||||
url = "2.2.0"
|
||||
reqwest = { version = "0.12.0", default-features = false }
|
||||
reqwest = { version = "0.13.0", default-features = false }
|
||||
tokio = "1.20.4"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0.82"
|
||||
|
|
@ -39,8 +38,8 @@ serde_with = { version = "3.0.0", default-features = false, features = [
|
|||
"macros",
|
||||
] }
|
||||
serde_plain = "1.0.0"
|
||||
sha1 = "0.10.0"
|
||||
rand = "0.9.0"
|
||||
sha1 = "0.11.0"
|
||||
rand = "0.10.0"
|
||||
time = { version = "0.3.37", features = [
|
||||
"macros",
|
||||
"serde-human-readable",
|
||||
|
|
@ -48,17 +47,18 @@ time = { version = "0.3.37", features = [
|
|||
"local-offset",
|
||||
] }
|
||||
futures-util = "0.3.31"
|
||||
ress = "0.11.0"
|
||||
phf = "0.11.0"
|
||||
phf_codegen = "0.11.0"
|
||||
phf = "0.13.0"
|
||||
phf_codegen = "0.13.0"
|
||||
data-encoding = "2.0.0"
|
||||
urlencoding = "2.1.0"
|
||||
quick-xml = { version = "0.37.0", features = ["serialize"] }
|
||||
quick-xml = { version = "0.40.0", features = ["serialize"] }
|
||||
tracing = { version = "0.1.0", features = ["log"] }
|
||||
log = "0.4.0"
|
||||
localzone = "0.3.1"
|
||||
double-ended-peekable = "0.1.0"
|
||||
|
||||
# CLI
|
||||
indicatif = "0.17.0"
|
||||
indicatif = "0.18.0"
|
||||
anyhow = "1.0"
|
||||
clap = { version = "4.0.0", features = ["derive"] }
|
||||
tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
|
||||
|
|
@ -67,11 +67,11 @@ dirs = "6.0.0"
|
|||
filenamify = "0.1.0"
|
||||
|
||||
# Testing
|
||||
rstest = "0.25.0"
|
||||
rstest = "0.26.0"
|
||||
tokio-test = "0.4.2"
|
||||
insta = { version = "1.17.1", features = ["ron", "redactions"] }
|
||||
path_macro = "1.0.0"
|
||||
tracing-test = "0.2.5"
|
||||
tracing-test = { version = "0.2.5", features = ["no-env-filter"] }
|
||||
|
||||
# Included crates
|
||||
rustypipe = { path = ".", version = "0.11.4", default-features = false }
|
||||
|
|
@ -79,26 +79,27 @@ rustypipe-downloader = { path = "./downloader", version = "0.3.1", default-featu
|
|||
"indicatif",
|
||||
"audiotag",
|
||||
] }
|
||||
rustypipe-deobfuscator = { path = "./deobfuscator", version = "0.1.0" }
|
||||
|
||||
[features]
|
||||
default = ["default-tls"]
|
||||
default = ["default-tls", "deobfuscator"]
|
||||
|
||||
rss = ["dep:quick-xml"]
|
||||
userdata = []
|
||||
deobfuscator = ["dep:rustypipe-deobfuscator"]
|
||||
|
||||
# Reqwest TLS options
|
||||
default-tls = ["reqwest/default-tls"]
|
||||
rustls = ["reqwest/rustls"]
|
||||
rustls-no-provider = ["reqwest/rustls-no-provider"]
|
||||
native-tls = ["reqwest/native-tls"]
|
||||
native-tls-alpn = ["reqwest/native-tls-alpn"]
|
||||
native-tls-no-alpn = ["reqwest/native-tls-no-alpn"]
|
||||
native-tls-vendored = ["reqwest/native-tls-vendored"]
|
||||
rustls-tls-webpki-roots = ["reqwest/rustls-tls-webpki-roots"]
|
||||
rustls-tls-native-roots = ["reqwest/rustls-tls-native-roots"]
|
||||
native-tls-vendored-no-alpn = ["reqwest/native-tls-vendored-no-alpn"]
|
||||
|
||||
[dependencies]
|
||||
rquickjs.workspace = true
|
||||
once_cell.workspace = true
|
||||
regex.workspace = true
|
||||
fancy-regex.workspace = true
|
||||
thiserror.workspace = true
|
||||
url.workspace = true
|
||||
reqwest = { workspace = true, features = ["json", "gzip", "brotli"] }
|
||||
|
|
@ -110,13 +111,14 @@ serde_plain.workspace = true
|
|||
sha1.workspace = true
|
||||
rand.workspace = true
|
||||
time.workspace = true
|
||||
ress.workspace = true
|
||||
phf.workspace = true
|
||||
data-encoding.workspace = true
|
||||
urlencoding.workspace = true
|
||||
tracing.workspace = true
|
||||
localzone.workspace = true
|
||||
double-ended-peekable.workspace = true
|
||||
quick-xml = { workspace = true, optional = true }
|
||||
rustypipe-deobfuscator = { workspace = true, optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
rstest.workspace = true
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ async fn main() {
|
|||
// Create a client
|
||||
let rp = RustyPipe::new();
|
||||
// Get the playlist
|
||||
let playlist = rp
|
||||
let mut playlist = rp
|
||||
.query()
|
||||
.playlist("PL2_OBreMn7FrsiSW0VDZjdq0xqUKkZYHT")
|
||||
.await
|
||||
|
|
@ -119,7 +119,7 @@ async fn main() {
|
|||
.videos
|
||||
.items
|
||||
.iter()
|
||||
.for_each(|v| println!("[{}] {} ({}s)", v.id, v.name, v.length));
|
||||
.for_each(|v| println!("[{}] {} ({}s)", v.id, v.name, v.duration.unwrap_or_default()));
|
||||
}
|
||||
```
|
||||
|
||||
|
|
@ -162,7 +162,7 @@ async fn main() {
|
|||
.content
|
||||
.items
|
||||
.iter()
|
||||
.for_each(|v| println!("[{}] {} ({}s)", v.id, v.name, v.length.unwrap()));
|
||||
.for_each(|v| println!("[{}] {} ({}s)", v.id, v.name, v.duration.unwrap_or_default()));
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "rustypipe-cli"
|
||||
version = "0.7.2"
|
||||
rust-version = "1.70.0"
|
||||
rust-version = "1.89.0"
|
||||
edition.workspace = true
|
||||
authors.workspace = true
|
||||
license.workspace = true
|
||||
|
|
@ -15,30 +15,33 @@ default = ["native-tls"]
|
|||
timezone = ["dep:time", "dep:time-tz"]
|
||||
|
||||
# Reqwest TLS options
|
||||
native-tls = [
|
||||
"reqwest/native-tls",
|
||||
"rustypipe/native-tls",
|
||||
"rustypipe-downloader/native-tls",
|
||||
default-tls = [
|
||||
"reqwest/default-tls",
|
||||
"rustypipe/default-tls",
|
||||
"rustypipe-downloader/default-tls",
|
||||
]
|
||||
native-tls-alpn = [
|
||||
"reqwest/native-tls-alpn",
|
||||
"rustypipe/native-tls-alpn",
|
||||
"rustypipe-downloader/native-tls-alpn",
|
||||
rustls = ["reqwest/rustls", "rustypipe/rustls", "rustypipe-downloader/rustls"]
|
||||
rustls-no-provider = [
|
||||
"reqwest/rustls-no-provider",
|
||||
"rustypipe/rustls-no-provider",
|
||||
"rustypipe-downloader/rustls-no-provider",
|
||||
|
||||
]
|
||||
native-tls = ["reqwest/native-tls", "rustypipe/native-tls"]
|
||||
native-tls-no-alpn = [
|
||||
"reqwest/native-tls-no-alpn",
|
||||
"rustypipe/native-tls-no-alpn",
|
||||
"rustypipe-downloader/native-tls-no-alpn",
|
||||
]
|
||||
native-tls-vendored = [
|
||||
"reqwest/native-tls-vendored",
|
||||
"rustypipe/native-tls-vendored",
|
||||
"rustypipe-downloader/native-tls-vendored",
|
||||
]
|
||||
rustls-tls-webpki-roots = [
|
||||
"reqwest/rustls-tls-webpki-roots",
|
||||
"rustypipe/rustls-tls-webpki-roots",
|
||||
"rustypipe-downloader/rustls-tls-webpki-roots",
|
||||
]
|
||||
rustls-tls-native-roots = [
|
||||
"reqwest/rustls-tls-native-roots",
|
||||
"rustypipe/rustls-tls-native-roots",
|
||||
"rustypipe-downloader/rustls-tls-native-roots",
|
||||
native-tls-vendored-no-alpn = [
|
||||
"reqwest/native-tls-vendored-no-alpn",
|
||||
"rustypipe/native-tls-vendored-no-alpn",
|
||||
"rustypipe-downloader/native-tls-vendored-no-alpn",
|
||||
]
|
||||
|
||||
[dependencies]
|
||||
|
|
@ -61,7 +64,7 @@ tracing-subscriber.workspace = true
|
|||
serde_yaml.workspace = true
|
||||
dirs.workspace = true
|
||||
|
||||
anstream = "0.6.15"
|
||||
anstream = "1.0.0"
|
||||
owo-colors = "4.0.0"
|
||||
const_format = "0.2.33"
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use std::{
|
|||
ffi::OsString,
|
||||
path::PathBuf,
|
||||
str::FromStr,
|
||||
sync::{atomic::AtomicUsize, Arc},
|
||||
sync::{Arc, atomic::AtomicUsize},
|
||||
time::Duration,
|
||||
};
|
||||
|
||||
|
|
@ -18,12 +18,12 @@ use rustypipe::{
|
|||
cache::FileStorage,
|
||||
client::{ClientType, RustyPipe},
|
||||
model::{
|
||||
richtext::{RichText, ToPlaintext},
|
||||
traits::YtEntity,
|
||||
ArtistId, AudioCodec, Comment, MusicSearchResult, TrackItem, TrackType, UrlTarget,
|
||||
Verification, YouTubeItem,
|
||||
richtext::{RichText, ToPlaintext},
|
||||
traits::YtEntity,
|
||||
},
|
||||
param::{search_filter, ChannelVideoTab, Country, Language, StreamFilter},
|
||||
param::{ChannelVideoTab, Country, Language, StreamFilter, search_filter},
|
||||
report::FileReporter,
|
||||
};
|
||||
use rustypipe_downloader::{
|
||||
|
|
@ -31,7 +31,7 @@ use rustypipe_downloader::{
|
|||
};
|
||||
use serde::Serialize;
|
||||
use tracing::level_filters::LevelFilter;
|
||||
use tracing_subscriber::{fmt::MakeWriter, EnvFilter};
|
||||
use tracing_subscriber::{EnvFilter, fmt::MakeWriter};
|
||||
|
||||
#[derive(Parser)]
|
||||
#[clap(
|
||||
|
|
@ -103,12 +103,13 @@ impl DownloadTarget {
|
|||
fn assert_dir(&self) {
|
||||
if self.output_file.is_some() {
|
||||
panic!("Cannot download multiple videos to a single file")
|
||||
} else if let Some(template) = &self.template {
|
||||
if !template.contains("{id}") && !template.contains("{title}") {
|
||||
} else if let Some(template) = &self.template
|
||||
&& !template.contains("{id}")
|
||||
&& !template.contains("{title}")
|
||||
{
|
||||
panic!("Template must contain {{id}} or {{title}} variables")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn apply(&self, q: DownloadQuery) -> DownloadQuery {
|
||||
if let Some(output_file) = &self.output_file {
|
||||
|
|
@ -425,6 +426,7 @@ enum ClientTypeArg {
|
|||
Mobile,
|
||||
Tv,
|
||||
Android,
|
||||
AndroidVr,
|
||||
Ios,
|
||||
}
|
||||
|
||||
|
|
@ -491,6 +493,7 @@ impl From<ClientTypeArg> for ClientType {
|
|||
ClientTypeArg::Mobile => Self::Mobile,
|
||||
ClientTypeArg::Tv => Self::Tv,
|
||||
ClientTypeArg::Android => Self::Android,
|
||||
ClientTypeArg::AndroidVr => Self::AndroidVr,
|
||||
ClientTypeArg::Ios => Self::Ios,
|
||||
}
|
||||
}
|
||||
|
|
@ -527,11 +530,9 @@ fn print_entities(items: &[impl YtEntity], with_type: bool) {
|
|||
}
|
||||
|
||||
fn print_entity(e: &impl YtEntity, with_type: bool) {
|
||||
if with_type {
|
||||
if let Some(t) = e.music_item_type() {
|
||||
if with_type && let Some(t) = e.music_item_type() {
|
||||
anstream::print!("{: >8} ", format!("{t:?}").dimmed());
|
||||
}
|
||||
}
|
||||
anstream::print!("[{}] {}", e.id(), e.name().bold());
|
||||
if let Some(n) = e.channel_name() {
|
||||
anstream::print!(" - {}", n.cyan());
|
||||
|
|
@ -691,12 +692,12 @@ fn print_music_search<T: Serialize + YtEntity>(
|
|||
}
|
||||
|
||||
fn print_description(desc: Option<String>) {
|
||||
if let Some(desc) = desc {
|
||||
if !desc.is_empty() {
|
||||
if let Some(desc) = desc
|
||||
&& !desc.is_empty()
|
||||
{
|
||||
print_h2("Description");
|
||||
println!("{}", desc.trim());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn print_h1(title: &str) {
|
||||
|
|
@ -1224,7 +1225,9 @@ async fn run() -> anyhow::Result<()> {
|
|||
if let Some(id) = artist.radio_id {
|
||||
anstream::println!("{} {}", "Radio:".blue(), id);
|
||||
}
|
||||
print_description(artist.description);
|
||||
if let Some(desc) = &artist.description {
|
||||
print_richtext(desc);
|
||||
}
|
||||
if !artist.albums.is_empty() {
|
||||
print_h2("Albums");
|
||||
for b in artist.albums {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "rustypipe-codegen"
|
||||
version = "0.1.0"
|
||||
rust-version = "1.74.0"
|
||||
rust-version = "1.89.0"
|
||||
edition.workspace = true
|
||||
authors.workspace = true
|
||||
license.workspace = true
|
||||
|
|
@ -30,4 +30,4 @@ indicatif.workspace = true
|
|||
num_enum = "0.7.2"
|
||||
intl_pluralrules = "7.0.2"
|
||||
unic-langid = "0.9.1"
|
||||
ordered_hash_map = { version = "0.4.0", features = ["serde"] }
|
||||
ordered_hash_map = { version = "0.6.0", features = ["serde"] }
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
use std::collections::BTreeMap;
|
||||
|
||||
use anyhow::{bail, Result};
|
||||
use futures_util::{stream, StreamExt};
|
||||
use anyhow::{Result, bail};
|
||||
use futures_util::{StreamExt, stream};
|
||||
use indicatif::{ProgressBar, ProgressStyle};
|
||||
use num_enum::TryFromPrimitive;
|
||||
use once_cell::sync::Lazy;
|
||||
use regex::Regex;
|
||||
use rustypipe::client::{ClientType, RustyPipe, RustyPipeQuery};
|
||||
use rustypipe::model::{MusicItem, YouTubeItem};
|
||||
use rustypipe::param::search_filter::{ItemType, SearchFilter};
|
||||
use rustypipe::param::ChannelVideoTab;
|
||||
use rustypipe::param::search_filter::{ItemType, SearchFilter};
|
||||
use serde::de::IgnoredAny;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use path_macro::path;
|
|||
use rustypipe::{
|
||||
client::{ClientType, RustyPipe, RustyPipeQuery},
|
||||
model::AlbumType,
|
||||
param::{Language, LANGUAGES},
|
||||
param::{LANGUAGES, Language},
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_with::rust::deserialize_ignore_any;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ use std::{collections::BTreeMap, fs::File, io::BufReader};
|
|||
use path_macro::path;
|
||||
use rustypipe::{
|
||||
client::{ClientType, RustyPipe},
|
||||
param::{Language, LANGUAGES},
|
||||
param::{LANGUAGES, Language},
|
||||
};
|
||||
use serde::Deserialize;
|
||||
use serde_with::rust::deserialize_ignore_any;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ use std::{collections::BTreeMap, fs::File, io::BufReader};
|
|||
use path_macro::path;
|
||||
use rustypipe::{
|
||||
client::RustyPipe,
|
||||
param::{Language, LANGUAGES},
|
||||
param::{LANGUAGES, Language},
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ use std::{collections::BTreeMap, fs::File, io::BufReader};
|
|||
use path_macro::path;
|
||||
use rustypipe::{
|
||||
client::RustyPipe,
|
||||
param::{Language, LANGUAGES},
|
||||
param::{LANGUAGES, Language},
|
||||
};
|
||||
|
||||
use crate::util::{self, DICT_DIR};
|
||||
|
|
|
|||
|
|
@ -6,12 +6,12 @@ use std::{
|
|||
};
|
||||
|
||||
use anyhow::{Context, Result};
|
||||
use futures_util::{stream, StreamExt};
|
||||
use futures_util::{StreamExt, stream};
|
||||
use once_cell::sync::Lazy;
|
||||
use path_macro::path;
|
||||
use regex::Regex;
|
||||
use rustypipe::client::{ClientType, RustyPipe, RustyPipeQuery};
|
||||
use rustypipe::param::{Language, LANGUAGES};
|
||||
use rustypipe::param::{LANGUAGES, Language};
|
||||
use serde::Deserialize;
|
||||
|
||||
use crate::model::{Channel, ContinuationResponse};
|
||||
|
|
@ -194,21 +194,21 @@ pub fn write_samples_to_dict() {
|
|||
x => Some(x),
|
||||
});
|
||||
|
||||
if let Some(f) = found_token {
|
||||
if *f != mag {
|
||||
if let Some(f) = found_token
|
||||
&& *f != mag
|
||||
{
|
||||
*found_token = None;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let mut insert_nd_token = |token: String, n: Option<u8>| {
|
||||
let found_token = found_nd_tokens.entry(token).or_insert(n);
|
||||
|
||||
if let Some(f) = found_token {
|
||||
if Some(*f) != n {
|
||||
if let Some(f) = found_token
|
||||
&& Some(*f) != n
|
||||
{
|
||||
*found_token = None;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for lang in e_langs {
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@ use std::{
|
|||
io::BufReader,
|
||||
};
|
||||
|
||||
use futures_util::{stream, StreamExt};
|
||||
use futures_util::{StreamExt, stream};
|
||||
use ordered_hash_map::OrderedHashMap;
|
||||
use path_macro::path;
|
||||
use rustypipe::{
|
||||
client::RustyPipe,
|
||||
param::{Language, LANGUAGES},
|
||||
param::{LANGUAGES, Language},
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
|
|
@ -22,7 +22,8 @@ type CollectedDates = BTreeMap<Language, BTreeMap<DateCase, String>>;
|
|||
enum DateCase {
|
||||
Today,
|
||||
Yesterday,
|
||||
Ago,
|
||||
Ago2,
|
||||
AgoN,
|
||||
Jan,
|
||||
Feb,
|
||||
Mar,
|
||||
|
|
@ -61,14 +62,16 @@ enum DateCase {
|
|||
///
|
||||
/// Because the relative dates change with time, the first three playlists
|
||||
/// have to checked and eventually changed before running the program.
|
||||
/// To find matching playlists, search for music on YouTube and filter for playlists
|
||||
pub async fn collect_dates(concurrency: usize) {
|
||||
let json_path = path!(*DICT_DIR / "playlist_samples.json");
|
||||
|
||||
// These are the sample playlists
|
||||
let cases = [
|
||||
(DateCase::Today, "PL3oW2tjiIxvQ98ZTLhBh5soCbE1mC3uAT"),
|
||||
(DateCase::Yesterday, "PLGBuKfnErZlCkRRgt06em8nbXvcV5Sae7"),
|
||||
(DateCase::Ago, "PLAQ7nLSEnhWTEihjeM1I-ToPDJEKfZHZu"),
|
||||
(DateCase::Yesterday, "PLDIoUOhQQPlXzhp-83rECoLaV6BwFtNC4"),
|
||||
(DateCase::Ago2, "PLplXQ2cg9B_qrCVd1J_iId5SvP8Kf_BfS"),
|
||||
(DateCase::AgoN, "PLeIL8_T2qvIRtvk6gryaK4Uh-E8Z_YYYR"),
|
||||
(DateCase::Jan, "PL1J-6JOckZtFjcni6Xj1pLYglJp6JCpKD"),
|
||||
(DateCase::Feb, "PL1J-6JOckZtETrbzwZE7mRIIK6BzWNLAs"),
|
||||
(DateCase::Mar, "PL1J-6JOckZtG3AVdvBXhMO64mB2k3BtKi"),
|
||||
|
|
@ -193,7 +196,7 @@ pub fn write_samples_to_dict() {
|
|||
|
||||
parse(datestr_table.get(&DateCase::Today).unwrap(), 1);
|
||||
parse(datestr_table.get(&DateCase::Yesterday).unwrap(), 2);
|
||||
parse(datestr_table.get(&DateCase::Ago).unwrap(), 0);
|
||||
parse(datestr_table.get(&DateCase::AgoN).unwrap(), 0);
|
||||
parse(datestr_table.get(&DateCase::Jan).unwrap(), 0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@ use std::{
|
|||
fs::File,
|
||||
};
|
||||
|
||||
use futures_util::{stream, StreamExt};
|
||||
use futures_util::{StreamExt, stream};
|
||||
use path_macro::path;
|
||||
use rustypipe::{
|
||||
client::{RustyPipe, RustyPipeQuery},
|
||||
param::{Language, LANGUAGES},
|
||||
param::{LANGUAGES, Language},
|
||||
};
|
||||
|
||||
use crate::util::DICT_DIR;
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ use std::{
|
|||
};
|
||||
|
||||
use anyhow::Result;
|
||||
use futures_util::{stream, StreamExt};
|
||||
use futures_util::{StreamExt, stream};
|
||||
use path_macro::path;
|
||||
use rustypipe::{
|
||||
client::{ClientType, RustyPipe, RustyPipeQuery},
|
||||
param::{Language, LANGUAGES},
|
||||
param::{LANGUAGES, Language},
|
||||
};
|
||||
|
||||
use crate::{
|
||||
|
|
@ -121,11 +121,11 @@ pub fn parse_video_durations() {
|
|||
}
|
||||
|
||||
let entry = words.entry(w.to_owned()).or_insert(Some(*val));
|
||||
if let Some(e) = entry {
|
||||
if e != val {
|
||||
if let Some(e) = entry
|
||||
&& e != val
|
||||
{
|
||||
*entry = None;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let mut val = TimeAgo {
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ use rustypipe::{
|
|||
client::{ClientType, RustyPipe},
|
||||
model::YouTubeItem,
|
||||
param::{
|
||||
search_filter::{self, ItemType, SearchFilter},
|
||||
ChannelVideoTab, Country,
|
||||
search_filter::{self, ItemType, SearchFilter},
|
||||
},
|
||||
report::{Report, Reporter},
|
||||
};
|
||||
|
|
@ -129,7 +129,7 @@ impl Reporter for TestFileReporter {
|
|||
};
|
||||
|
||||
let data =
|
||||
serde_json::from_str::<serde_json::Value>(&report.http_request.resp_body).unwrap();
|
||||
serde_json::from_str::<serde_json::Value>(report.http_request.resp_body).unwrap();
|
||||
let file = File::create(&path).unwrap();
|
||||
serde_json::to_writer_pretty(file, &data).unwrap();
|
||||
|
||||
|
|
@ -193,6 +193,7 @@ async fn playlist() {
|
|||
("long", "PL5dDx681T4bR7ZF1IuWzOv1omlRbE7PiJ"),
|
||||
("nomusic", "PL1J-6JOckZtE_P9Xx8D3b2O6w0idhuKBe"),
|
||||
("live", "UULVvqRdlKsE5Q8mf8YXbdIJLw"),
|
||||
("featuring", "PLLsua0MU5Y8JZZaDko8Ewv95Tv98A36ee"),
|
||||
] {
|
||||
let json_path = path!(*TESTFILES_DIR / "playlist" / format!("playlist_{name}.json"));
|
||||
if json_path.exists() {
|
||||
|
|
@ -229,6 +230,7 @@ async fn video_details() {
|
|||
("chapters", "nFDBxBUfE74"),
|
||||
("live", "86YLFOog4GM"),
|
||||
("agegate", "HRKu0cvrr_o"),
|
||||
("featuring", "Y8JFxS1HlDo"),
|
||||
] {
|
||||
let json_path =
|
||||
path!(*TESTFILES_DIR / "video_details" / format!("video_details_{name}.json"));
|
||||
|
|
|
|||
|
|
@ -115,16 +115,16 @@ pub(crate) fn entry(lang: Language) -> Entry {
|
|||
match unit {
|
||||
Some(unit) => ta_tokens.entry(
|
||||
txt,
|
||||
&format!("TaToken {{ n: {n}, unit: Some(TimeUnit::{unit:?}) }}"),
|
||||
format!("TaToken {{ n: {n}, unit: Some(TimeUnit::{unit:?}) }}"),
|
||||
),
|
||||
None => ta_tokens.entry(txt, &format!("TaToken {{ n: {n}, unit: None }}")),
|
||||
None => ta_tokens.entry(txt, format!("TaToken {{ n: {n}, unit: None }}")),
|
||||
};
|
||||
});
|
||||
|
||||
// Months
|
||||
let mut months = phf_codegen::Map::<&str>::new();
|
||||
entry.months.iter().for_each(|(txt, n_mon)| {
|
||||
months.entry(txt, &n_mon.to_string());
|
||||
months.entry(txt, n_mon.to_string());
|
||||
});
|
||||
|
||||
// Timeago(ND) tokens
|
||||
|
|
@ -134,28 +134,28 @@ pub(crate) fn entry(lang: Language) -> Entry {
|
|||
match unit {
|
||||
Some(unit) => ta_nd_tokens.entry(
|
||||
txt,
|
||||
&format!("TaToken {{ n: {n}, unit: Some(TimeUnit::{unit:?}) }}"),
|
||||
format!("TaToken {{ n: {n}, unit: Some(TimeUnit::{unit:?}) }}"),
|
||||
),
|
||||
None => ta_nd_tokens.entry(txt, &format!("TaToken {{ n: {n}, unit: None }}")),
|
||||
None => ta_nd_tokens.entry(txt, format!("TaToken {{ n: {n}, unit: None }}")),
|
||||
};
|
||||
});
|
||||
|
||||
// Number tokens
|
||||
let mut number_tokens = phf_codegen::Map::<&str>::new();
|
||||
entry.number_tokens.iter().for_each(|(txt, mag)| {
|
||||
number_tokens.entry(txt, &mag.to_string());
|
||||
number_tokens.entry(txt, mag.to_string());
|
||||
});
|
||||
|
||||
// Number nd tokens
|
||||
let mut number_nd_tokens = phf_codegen::Map::<&str>::new();
|
||||
entry.number_nd_tokens.iter().for_each(|(txt, mag)| {
|
||||
number_nd_tokens.entry(txt, &mag.to_string());
|
||||
number_nd_tokens.entry(txt, mag.to_string());
|
||||
});
|
||||
|
||||
// Album types
|
||||
let mut album_types = phf_codegen::Map::<&str>::new();
|
||||
entry.album_types.iter().for_each(|(txt, album_type)| {
|
||||
album_types.entry(txt, &format!("AlbumType::{album_type:?}"));
|
||||
album_types.entry(txt, format!("AlbumType::{album_type:?}"));
|
||||
});
|
||||
|
||||
let code_ta_tokens = &ta_tokens
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@ use std::fs::File;
|
|||
use std::io::BufReader;
|
||||
|
||||
use path_macro::path;
|
||||
use reqwest::header;
|
||||
use reqwest::Client;
|
||||
use reqwest::header;
|
||||
use serde::Deserialize;
|
||||
use serde_with::serde_as;
|
||||
use serde_with::VecSkipError;
|
||||
use serde_with::serde_as;
|
||||
|
||||
use crate::model::Text;
|
||||
use crate::util::DICT_DIR;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
#![allow(dead_code)]
|
||||
#![warn(clippy::todo)]
|
||||
|
||||
mod abtest;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ use std::collections::BTreeMap;
|
|||
use ordered_hash_map::OrderedHashMap;
|
||||
use rustypipe::{model::AlbumType, param::Language};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_with::{serde_as, DefaultOnError, VecSkipError};
|
||||
use serde_with::{DefaultOnError, VecSkipError, serde_as};
|
||||
|
||||
#[derive(Debug, Default, Serialize, Deserialize)]
|
||||
#[serde(default)]
|
||||
|
|
|
|||
|
|
@ -140,11 +140,11 @@ where
|
|||
buf.clear();
|
||||
}
|
||||
}
|
||||
if !buf.is_empty() {
|
||||
if let Ok(n) = buf.parse::<F>() {
|
||||
if !buf.is_empty()
|
||||
&& let Ok(n) = buf.parse::<F>()
|
||||
{
|
||||
numbers.push(n);
|
||||
}
|
||||
}
|
||||
|
||||
numbers
|
||||
}
|
||||
|
|
|
|||
28
deobfuscator/Cargo.toml
Normal file
28
deobfuscator/Cargo.toml
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
[package]
|
||||
name = "rustypipe-deobfuscator"
|
||||
version = "0.1.0"
|
||||
edition.workspace = true
|
||||
authors.workspace = true
|
||||
license.workspace = true
|
||||
repository.workspace = true
|
||||
keywords.workspace = true
|
||||
categories.workspace = true
|
||||
description = "Deobfuscation javascript extractor for RustyPipe"
|
||||
|
||||
[dependencies]
|
||||
javascript-globals = "1.5.0"
|
||||
oxc_allocator = "0.133.0"
|
||||
oxc_ast = "0.133.0"
|
||||
oxc_ast_visit = "0.133.0"
|
||||
oxc_codegen = "0.133.0"
|
||||
oxc_parser = "0.133.0"
|
||||
oxc_semantic = "0.133.0"
|
||||
oxc_span = "0.133.0"
|
||||
oxc_str = "0.133.0"
|
||||
oxc_syntax = "0.133.0"
|
||||
itertools = "0.14.0"
|
||||
rquickjs.workspace = true
|
||||
regex.workspace = true
|
||||
rand.workspace = true
|
||||
log.workspace = true
|
||||
thiserror.workspace = true
|
||||
32
deobfuscator/src/error.rs
Normal file
32
deobfuscator/src/error.rs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
use std::borrow::Cow;
|
||||
|
||||
/// Error from
|
||||
#[derive(thiserror::Error, Debug)]
|
||||
#[non_exhaustive]
|
||||
pub enum DeobfExtractionError {
|
||||
#[error("JS parsing error:\n{0}")]
|
||||
Parsing(String),
|
||||
#[error("{0} not found")]
|
||||
NotFound(&'static str),
|
||||
}
|
||||
|
||||
/// Error that occurred during the initialization
|
||||
/// or use of the YouTube URL signature deobfuscator.
|
||||
#[derive(thiserror::Error, Debug)]
|
||||
pub enum DeobfuscationError {
|
||||
/// Error during JavaScript execution
|
||||
#[error("js execution error: {0}")]
|
||||
JavaScript(#[from] rquickjs::Error),
|
||||
/// Unspecified error
|
||||
#[error("error: {0}")]
|
||||
Other(Cow<'static, str>),
|
||||
}
|
||||
|
||||
impl From<rquickjs::CaughtError<'_>> for DeobfuscationError {
|
||||
fn from(value: rquickjs::CaughtError) -> Self {
|
||||
match value {
|
||||
rquickjs::CaughtError::Error(error) => DeobfuscationError::JavaScript(error),
|
||||
_ => DeobfuscationError::Other(value.to_string().into()),
|
||||
}
|
||||
}
|
||||
}
|
||||
397
deobfuscator/src/extract.rs
Normal file
397
deobfuscator/src/extract.rs
Normal file
|
|
@ -0,0 +1,397 @@
|
|||
use std::collections::HashSet;
|
||||
use std::sync::{Arc, LazyLock};
|
||||
|
||||
use itertools::Itertools;
|
||||
use oxc_allocator::{Allocator, Box as OxBox, FromIn, Vec as OxVec};
|
||||
use oxc_ast::ast::{
|
||||
ArrowFunctionExpression, AssignmentExpression, AssignmentOperator, AssignmentTarget,
|
||||
BindingIdentifier, BindingPattern, Expression, ExpressionStatement, IdentifierName,
|
||||
IdentifierReference, Program, Statement, StaticMemberExpression, VariableDeclaration,
|
||||
VariableDeclarator,
|
||||
};
|
||||
use oxc_semantic::{NodeId, SemanticBuilder};
|
||||
use oxc_span::{GetSpan, SPAN, SourceType};
|
||||
use oxc_str::Ident;
|
||||
use regex::Regex;
|
||||
|
||||
use crate::visitor::{find_function, get_function_length, program_contains_string};
|
||||
|
||||
pub fn makeprog<'a>(statements: OxVec<'a, Statement<'a>>, allocator: &'a Allocator) -> Program<'a> {
|
||||
Program {
|
||||
span: SPAN,
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
scope_id: None.into(),
|
||||
source_text: "",
|
||||
comments: OxVec::new_in(allocator),
|
||||
hashbang: None,
|
||||
directives: OxVec::new_in(allocator),
|
||||
body: statements,
|
||||
source_type: SourceType::script(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn makeprog_expr<'a>(expression: Expression<'a>, allocator: &'a Allocator) -> Program<'a> {
|
||||
let statements = OxVec::from_array_in(
|
||||
[Statement::ExpressionStatement(OxBox::new_in(
|
||||
ExpressionStatement {
|
||||
span: SPAN,
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
expression,
|
||||
},
|
||||
allocator,
|
||||
))],
|
||||
allocator,
|
||||
);
|
||||
makeprog(statements, allocator)
|
||||
}
|
||||
|
||||
pub fn makeprog_stmt<'a>(statement: Statement<'a>, allocator: &'a Allocator) -> Program<'a> {
|
||||
let statements = OxVec::from_array_in([statement], allocator);
|
||||
makeprog(statements, allocator)
|
||||
}
|
||||
|
||||
fn make_stub_fn<'a>(value: Option<Expression<'a>>, allocator: &'a Allocator) -> Expression<'a> {
|
||||
Expression::ArrowFunctionExpression(OxBox::new_in(
|
||||
ArrowFunctionExpression {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
expression: value.is_some(),
|
||||
r#async: false,
|
||||
type_parameters: None,
|
||||
params: OxBox::new_in(
|
||||
oxc_ast::ast::FormalParameters {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
kind: oxc_ast::ast::FormalParameterKind::ArrowFormalParameters,
|
||||
items: OxVec::new_in(allocator),
|
||||
rest: None,
|
||||
},
|
||||
allocator,
|
||||
),
|
||||
return_type: None,
|
||||
body: OxBox::new_in(
|
||||
oxc_ast::ast::FunctionBody {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
directives: OxVec::new_in(allocator),
|
||||
statements: match value {
|
||||
Some(value) => OxVec::from_array_in(
|
||||
[Statement::ExpressionStatement(OxBox::new_in(
|
||||
ExpressionStatement {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
expression: value,
|
||||
},
|
||||
allocator,
|
||||
))],
|
||||
allocator,
|
||||
),
|
||||
None => OxVec::new_in(allocator),
|
||||
},
|
||||
},
|
||||
allocator,
|
||||
),
|
||||
scope_id: None.into(),
|
||||
pure: false,
|
||||
pife: false,
|
||||
},
|
||||
allocator,
|
||||
))
|
||||
}
|
||||
|
||||
fn prog_to_expr<'a>(program: Program<'a>) -> Expression<'a> {
|
||||
let s1 = program.body.into_iter().next().unwrap();
|
||||
if let Statement::ExpressionStatement(expr) = s1 {
|
||||
expr.unbox().expression
|
||||
} else {
|
||||
panic!("invalid statement");
|
||||
}
|
||||
}
|
||||
|
||||
fn prog_to_stmt<'a>(program: Program<'a>) -> Statement<'a> {
|
||||
program.body.into_iter().next().unwrap()
|
||||
}
|
||||
|
||||
fn make_declaration<'a>(
|
||||
fname: String,
|
||||
g: bool,
|
||||
value: Expression<'a>,
|
||||
allocator: &'a Allocator,
|
||||
) -> Statement<'a> {
|
||||
let span = value.span();
|
||||
if g {
|
||||
Statement::ExpressionStatement(OxBox::new_in(
|
||||
ExpressionStatement {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span,
|
||||
expression: Expression::AssignmentExpression(OxBox::new_in(
|
||||
AssignmentExpression {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
operator: AssignmentOperator::Assign,
|
||||
left: AssignmentTarget::StaticMemberExpression(OxBox::new_in(
|
||||
StaticMemberExpression {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
object: Expression::Identifier(OxBox::new_in(
|
||||
IdentifierReference {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
name: Ident::from_in("g", allocator),
|
||||
reference_id: None.into(),
|
||||
},
|
||||
allocator,
|
||||
)),
|
||||
property: IdentifierName {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
name: Ident::from_in(fname, allocator),
|
||||
},
|
||||
optional: false,
|
||||
},
|
||||
allocator,
|
||||
)),
|
||||
right: value,
|
||||
},
|
||||
allocator,
|
||||
)),
|
||||
},
|
||||
allocator,
|
||||
))
|
||||
} else {
|
||||
Statement::VariableDeclaration(OxBox::new_in(
|
||||
VariableDeclaration {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span,
|
||||
kind: oxc_ast::ast::VariableDeclarationKind::Const,
|
||||
declarations: OxVec::from_array_in(
|
||||
[VariableDeclarator {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
kind: oxc_ast::ast::VariableDeclarationKind::Const,
|
||||
id: BindingPattern::BindingIdentifier(OxBox::new_in(
|
||||
BindingIdentifier {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
name: Ident::from_in(fname, allocator),
|
||||
symbol_id: None.into(),
|
||||
},
|
||||
allocator,
|
||||
)),
|
||||
type_annotation: None,
|
||||
init: Some(value),
|
||||
definite: false,
|
||||
}],
|
||||
allocator,
|
||||
),
|
||||
declare: false,
|
||||
},
|
||||
allocator,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
fn extract_function_deps<'a>(
|
||||
program: &mut Program<'a>,
|
||||
name: &str,
|
||||
fprog: &Program<'a>,
|
||||
visited: &mut HashSet<String>,
|
||||
extracted: &mut OxVec<'a, Statement<'a>>,
|
||||
source_text: Arc<String>,
|
||||
allocator: &'a Allocator,
|
||||
) {
|
||||
let semantic = SemanticBuilder::new().build(fprog);
|
||||
if !semantic.errors.is_empty() {
|
||||
let reason = semantic
|
||||
.errors
|
||||
.into_iter()
|
||||
.map(|error| format!("{:?}", error.with_source_code(Arc::clone(&source_text))))
|
||||
.join("\n");
|
||||
log::error!("could not evaluate function {name}:\n{reason}");
|
||||
return;
|
||||
}
|
||||
|
||||
let symbol_table = semantic.semantic.scoping();
|
||||
|
||||
// extract dependencies
|
||||
static RE_VAR: LazyLock<Regex> = LazyLock::new(|| Regex::new(r"^g\.[\w$]+").unwrap());
|
||||
for (name, reference_id_list) in symbol_table.root_unresolved_references() {
|
||||
if name == "g" {
|
||||
for reference_id in reference_id_list {
|
||||
let reference = symbol_table.get_reference(*reference_id);
|
||||
let node = semantic.semantic.nodes().get_node(reference.node_id());
|
||||
let pos = node.span().start as usize;
|
||||
let found = RE_VAR.captures(&source_text[pos..]).unwrap();
|
||||
let g_name = &found[0];
|
||||
extract_function(
|
||||
program,
|
||||
g_name,
|
||||
visited,
|
||||
extracted,
|
||||
source_text.clone(),
|
||||
allocator,
|
||||
);
|
||||
}
|
||||
} else if !(name.len() > 2
|
||||
&& (javascript_globals::GLOBALS_BUILTIN.contains_key(name)
|
||||
|| javascript_globals::GLOBALS_BROWSER.contains_key(name)))
|
||||
&& name != "arguments"
|
||||
{
|
||||
extract_function(
|
||||
program,
|
||||
name.as_str(),
|
||||
visited,
|
||||
extracted,
|
||||
source_text.clone(),
|
||||
allocator,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn extract_function<'a>(
|
||||
program: &mut Program<'a>,
|
||||
name: &str,
|
||||
visited: &mut HashSet<String>,
|
||||
extracted: &mut OxVec<'a, Statement<'a>>,
|
||||
source_text: Arc<String>,
|
||||
allocator: &'a Allocator,
|
||||
) {
|
||||
let mut found_func = None;
|
||||
|
||||
if visited.contains(name) {
|
||||
return;
|
||||
}
|
||||
visited.insert(name.to_owned());
|
||||
log::debug!("deobf: extracting function {name}");
|
||||
|
||||
let (fname, g) = match name.strip_prefix("g.") {
|
||||
Some(n) => (n.to_owned(), true),
|
||||
None => (name.to_owned(), false),
|
||||
};
|
||||
|
||||
let (found, overloads) =
|
||||
match find_function(program, fname.to_owned(), g, source_text.clone(), allocator) {
|
||||
Some(f) => f,
|
||||
None => {
|
||||
log::error!("function {name} not found");
|
||||
return;
|
||||
}
|
||||
};
|
||||
let fprog = makeprog_expr(found, allocator);
|
||||
let flen = get_function_length(&fprog);
|
||||
|
||||
if flen < 3 {
|
||||
match program_contains_string(&fprog, &["yt.logging.", "Trusted Stream URL"]) {
|
||||
Some(0) => {
|
||||
log::debug!("stubbing logging func {name}; len={flen}");
|
||||
found_func = Some(make_stub_fn(None, allocator));
|
||||
}
|
||||
Some(1) => {
|
||||
log::debug!("stubbing url verification func {name}; len={flen}");
|
||||
found_func = Some(make_stub_fn(
|
||||
Some(Expression::BooleanLiteral(OxBox::new_in(
|
||||
oxc_ast::ast::BooleanLiteral {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
value: true,
|
||||
},
|
||||
allocator,
|
||||
))),
|
||||
allocator,
|
||||
));
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
let found_func = match found_func {
|
||||
Some(f) => f,
|
||||
None => {
|
||||
extract_function_deps(
|
||||
program,
|
||||
name,
|
||||
&fprog,
|
||||
visited,
|
||||
extracted,
|
||||
source_text.clone(),
|
||||
allocator,
|
||||
);
|
||||
prog_to_expr(fprog)
|
||||
}
|
||||
};
|
||||
|
||||
extracted.push(make_declaration(fname, g, found_func, allocator));
|
||||
// extracted.extend(overloads);
|
||||
|
||||
for (stmt, name) in overloads {
|
||||
let olprog = makeprog_stmt(stmt, allocator);
|
||||
extract_function_deps(
|
||||
program,
|
||||
&name,
|
||||
&olprog,
|
||||
visited,
|
||||
extracted,
|
||||
source_text.clone(),
|
||||
allocator,
|
||||
);
|
||||
extracted.push(prog_to_stmt(olprog));
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
use oxc_parser::Parser;
|
||||
|
||||
#[test]
|
||||
fn t_extract_function() {
|
||||
let dyn_assign_js = Arc::new(
|
||||
r#"g.hB=function(){return "Hello"};g.hB[F[65]][F[42]]=function(){return "set"};"#
|
||||
.to_owned(),
|
||||
);
|
||||
|
||||
let allocator = Allocator::new();
|
||||
let ret = Parser::new(&allocator, &dyn_assign_js, SourceType::script()).parse();
|
||||
assert!(ret.errors.is_empty());
|
||||
|
||||
let mut program = ret.program;
|
||||
|
||||
let (found_fn, overloads) = find_function(
|
||||
&mut program,
|
||||
"hB".to_owned(),
|
||||
true,
|
||||
dyn_assign_js.clone(),
|
||||
&allocator,
|
||||
)
|
||||
.unwrap();
|
||||
assert!(found_fn.is_function());
|
||||
assert_eq!(overloads.len(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn t_extract_function2() {
|
||||
let dyn_assign_js = Arc::new(
|
||||
r#"g.hB=function(){return "Hello"};g.hB.prototype.set=function(){return "set"};"#
|
||||
.to_owned(),
|
||||
);
|
||||
|
||||
let allocator = Allocator::new();
|
||||
let ret = Parser::new(&allocator, &dyn_assign_js, SourceType::script()).parse();
|
||||
assert!(ret.errors.is_empty());
|
||||
|
||||
let mut program = ret.program;
|
||||
|
||||
let (found_fn, overloads) = find_function(
|
||||
&mut program,
|
||||
"hB".to_owned(),
|
||||
true,
|
||||
dyn_assign_js.clone(),
|
||||
&allocator,
|
||||
)
|
||||
.unwrap();
|
||||
assert!(found_fn.is_function());
|
||||
assert_eq!(overloads.len(), 1);
|
||||
}
|
||||
}
|
||||
113
deobfuscator/src/extract_deobf.rs
Normal file
113
deobfuscator/src/extract_deobf.rs
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
use std::collections::HashSet;
|
||||
use std::sync::Arc;
|
||||
|
||||
use itertools::Itertools;
|
||||
use oxc_allocator::{Allocator, Box as OxBox, FromIn, Vec as OxVec};
|
||||
use oxc_ast::ast::{
|
||||
BindingIdentifier, BindingPattern, Expression, ObjectExpression, Statement,
|
||||
VariableDeclaration, VariableDeclarator,
|
||||
};
|
||||
use oxc_parser::Parser;
|
||||
use oxc_semantic::NodeId;
|
||||
use oxc_span::{GetSpan, SPAN, SourceType};
|
||||
use oxc_str::Ident;
|
||||
|
||||
use crate::extract::{extract_function, makeprog};
|
||||
use crate::visitor::{find_deobf_fn, get_script_body};
|
||||
|
||||
pub use crate::error::DeobfExtractionError;
|
||||
|
||||
pub const DEOBF_SIG_FUNC_NAME: &str = "deobf_sig";
|
||||
pub const DEOBF_NSIG_FUNC_NAME: &str = "deobf_nsig";
|
||||
|
||||
pub fn extract_deobf_fn(player_js: Arc<String>) -> Result<String, DeobfExtractionError> {
|
||||
let allocator = Allocator::new();
|
||||
let ret = Parser::new(&allocator, &player_js, SourceType::script()).parse();
|
||||
if !ret.errors.is_empty() {
|
||||
let msg = ret
|
||||
.errors
|
||||
.into_iter()
|
||||
.map(|e| e.with_source_code(player_js.clone()))
|
||||
.join("\n");
|
||||
return Err(DeobfExtractionError::Parsing(msg));
|
||||
}
|
||||
|
||||
let mut program = ret.program;
|
||||
let script_body = get_script_body(&mut program, &allocator)
|
||||
.and_then(|fx| fx.body)
|
||||
.ok_or(DeobfExtractionError::NotFound("script body"))?;
|
||||
let mut program = makeprog(script_body.unbox().statements, &allocator);
|
||||
|
||||
let start_fn =
|
||||
find_deobf_fn(&program).ok_or(DeobfExtractionError::NotFound("deobf function"))?;
|
||||
|
||||
let mut visited = HashSet::new();
|
||||
let mut extracted = OxVec::from_array_in(
|
||||
[Statement::VariableDeclaration(OxBox::new_in(
|
||||
VariableDeclaration {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
kind: oxc_ast::ast::VariableDeclarationKind::Const,
|
||||
declarations: OxVec::from_array_in(
|
||||
[VariableDeclarator {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
kind: oxc_ast::ast::VariableDeclarationKind::Const,
|
||||
id: BindingPattern::BindingIdentifier(OxBox::new_in(
|
||||
BindingIdentifier {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
name: Ident::from_in("g", &allocator),
|
||||
symbol_id: None.into(),
|
||||
},
|
||||
&allocator,
|
||||
)),
|
||||
type_annotation: None,
|
||||
init: Some(Expression::ObjectExpression(OxBox::new_in(
|
||||
ObjectExpression {
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
span: SPAN,
|
||||
properties: OxVec::new_in(&allocator),
|
||||
},
|
||||
&allocator,
|
||||
))),
|
||||
definite: false,
|
||||
}],
|
||||
&allocator,
|
||||
),
|
||||
declare: false,
|
||||
},
|
||||
&allocator,
|
||||
))],
|
||||
&allocator,
|
||||
);
|
||||
extract_function(
|
||||
&mut program,
|
||||
&start_fn,
|
||||
&mut visited,
|
||||
&mut extracted,
|
||||
player_js.clone(),
|
||||
&allocator,
|
||||
);
|
||||
|
||||
if extracted.len() < 2 {
|
||||
return Err(DeobfExtractionError::NotFound("nothing extracted"));
|
||||
}
|
||||
|
||||
extracted.sort_by_key(|s| s.span().start);
|
||||
|
||||
let extracted_script = makeprog(extracted, &allocator);
|
||||
|
||||
let printed = oxc_codegen::Codegen::new()
|
||||
.with_options(oxc_codegen::CodegenOptions {
|
||||
minify: true,
|
||||
..Default::default()
|
||||
})
|
||||
.build(&extracted_script);
|
||||
let script = printed.code
|
||||
+ "\nconst solver=({sig,n})=>{const url="
|
||||
+ &start_fn
|
||||
+ r#"("https://youtube.com/watch?v=yt-dlp-wins","s",sig?encodeURIComponent(sig):undefined,);url.set("n",n);const proto=Object.getPrototypeOf(url);const keys=Object.keys(proto).concat(Object.getOwnPropertyNames(proto));for(const key of keys){if(!["constructor","set","get","clone"].includes(key)){url[key]();break}}const s=url.get("s");return{sig:s?decodeURIComponent(s):null,n:url.get("n")??null}};function deobf_sig(sig) {return solver({sig}).sig} function deobf_nsig(n) {return solver({n}).n}"#;
|
||||
|
||||
Ok(script)
|
||||
}
|
||||
114
deobfuscator/src/lib.rs
Normal file
114
deobfuscator/src/lib.rs
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
pub mod error;
|
||||
mod extract;
|
||||
mod extract_deobf;
|
||||
mod visitor;
|
||||
|
||||
use crate::error::DeobfuscationError;
|
||||
use crate::extract_deobf::{DEOBF_NSIG_FUNC_NAME, DEOBF_SIG_FUNC_NAME};
|
||||
use rand::RngExt;
|
||||
use rquickjs::{CatchResultExt, Context, Runtime};
|
||||
|
||||
pub use extract_deobf::extract_deobf_fn;
|
||||
|
||||
pub struct Deobfuscator {
|
||||
ctx: Context,
|
||||
}
|
||||
|
||||
impl Deobfuscator {
|
||||
/// Instantiate a new deobfuscator with the given data
|
||||
pub fn new(script: &str) -> Result<Self, DeobfuscationError> {
|
||||
let rt = Runtime::new()?;
|
||||
let ctx = Context::full(&rt)?;
|
||||
ctx.with(|ctx| {
|
||||
let mut opts = rquickjs::context::EvalOptions::default();
|
||||
opts.strict = false;
|
||||
ctx.eval_with_options::<(), _>(script.as_bytes(), opts)
|
||||
.catch(&ctx)
|
||||
.map_err(DeobfuscationError::from)
|
||||
})?;
|
||||
let deobf = Self { ctx };
|
||||
deobf.verify()?;
|
||||
Ok(deobf)
|
||||
}
|
||||
|
||||
/// Verify if the deobfuscator successfully processes a random input string
|
||||
fn verify(&self) -> Result<(), DeobfuscationError> {
|
||||
let testinp = generate_content_playback_nonce();
|
||||
|
||||
let res = self.deobfuscate_sig(&testinp)?;
|
||||
if res.is_empty() {
|
||||
return Err(DeobfuscationError::Other(
|
||||
"sig fn returned empty string".into(),
|
||||
));
|
||||
}
|
||||
if res.starts_with("enhanced_except_") || res.ends_with(&testinp) {
|
||||
return Err(DeobfuscationError::Other(
|
||||
"sig fn returned an exception".into(),
|
||||
));
|
||||
}
|
||||
|
||||
let res = self.deobfuscate_nsig(&testinp)?;
|
||||
if res.is_empty() {
|
||||
return Err(DeobfuscationError::Other(
|
||||
"nsig fn returned empty string".into(),
|
||||
));
|
||||
}
|
||||
if res.starts_with("enhanced_except_") || res.ends_with(&testinp) {
|
||||
return Err(DeobfuscationError::Other(
|
||||
"nsig fn returned an exception".into(),
|
||||
));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Deobfuscate the `s` parameter from the `signature_cipher` field
|
||||
pub fn deobfuscate_sig(&self, sig: &str) -> Result<String, DeobfuscationError> {
|
||||
let res = self.ctx.with(|ctx| {
|
||||
call_fn(&ctx, DEOBF_SIG_FUNC_NAME, sig)
|
||||
.catch(&ctx)
|
||||
.map_err(DeobfuscationError::from)
|
||||
})?;
|
||||
log::trace!("deobf sig: {sig} -> {res}");
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
/// Deobfuscate the `n` stream URL parameter to circumvent throttling
|
||||
pub fn deobfuscate_nsig(&self, nsig: &str) -> Result<String, DeobfuscationError> {
|
||||
let res = self.ctx.with(|ctx| {
|
||||
call_fn(&ctx, DEOBF_NSIG_FUNC_NAME, nsig)
|
||||
.catch(&ctx)
|
||||
.map_err(DeobfuscationError::from)
|
||||
})?;
|
||||
log::trace!("deobf nsig: {nsig} -> {res}");
|
||||
if res.starts_with("enhanced_except_") || res.ends_with(nsig) {
|
||||
return Err(DeobfuscationError::Other(
|
||||
"nsig fn returned an exception".into(),
|
||||
));
|
||||
}
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
fn call_fn(ctx: &rquickjs::Ctx, fn_name: &str, arg: &str) -> Result<String, rquickjs::Error> {
|
||||
let f: rquickjs::Function = ctx.globals().get(fn_name)?;
|
||||
f.call((arg,))
|
||||
}
|
||||
|
||||
/// Generate a random string with given length and byte charset.
|
||||
fn random_string(charset: &[u8], length: usize) -> String {
|
||||
let mut result = String::with_capacity(length);
|
||||
let mut rng = rand::rng();
|
||||
|
||||
for _ in 0..length {
|
||||
result.push(char::from(charset[rng.random_range(0..charset.len())]));
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
fn generate_content_playback_nonce() -> String {
|
||||
const CONTENT_PLAYBACK_NONCE_ALPHABET: &[u8; 64] =
|
||||
b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
|
||||
random_string(CONTENT_PLAYBACK_NONCE_ALPHABET, 16)
|
||||
}
|
||||
352
deobfuscator/src/visitor.rs
Normal file
352
deobfuscator/src/visitor.rs
Normal file
|
|
@ -0,0 +1,352 @@
|
|||
use std::sync::Arc;
|
||||
|
||||
use oxc_allocator::{Allocator, Box as OxBox, TakeIn};
|
||||
use oxc_ast::ast::{
|
||||
AssignmentExpression, AssignmentOperator, AssignmentTarget, BindingPattern, Expression,
|
||||
Function, FunctionBody, Program, Statement, StringLiteral, UnaryOperator, VariableDeclarator,
|
||||
};
|
||||
use oxc_ast_visit::{Visit, VisitMut};
|
||||
use oxc_semantic::NodeId;
|
||||
use oxc_span::GetSpan;
|
||||
|
||||
pub fn get_script_body<'a>(
|
||||
program: &mut Program<'a>,
|
||||
allocator: &'a Allocator,
|
||||
) -> Option<Function<'a>> {
|
||||
let mut ff = BodyFinder {
|
||||
allocator,
|
||||
found_function: None,
|
||||
};
|
||||
ff.visit_program(program);
|
||||
ff.found_function
|
||||
}
|
||||
|
||||
struct BodyFinder<'a> {
|
||||
allocator: &'a Allocator,
|
||||
found_function: Option<Function<'a>>,
|
||||
}
|
||||
|
||||
impl<'a> VisitMut<'a> for BodyFinder<'a> {
|
||||
fn visit_function(&mut self, func: &mut Function<'a>, _flags: oxc_semantic::ScopeFlags) {
|
||||
if self.found_function.is_none() && func.body.is_some() {
|
||||
let params = &func.params.items;
|
||||
let has_single_g = params.len() == 1
|
||||
&& matches!(
|
||||
¶ms[0].pattern,
|
||||
BindingPattern::BindingIdentifier(id)
|
||||
if id.name == "g"
|
||||
);
|
||||
if has_single_g {
|
||||
self.found_function = Some(func.take_in(self.allocator));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn find_function<'a>(
|
||||
program: &mut Program<'a>,
|
||||
name: String,
|
||||
g: bool,
|
||||
source_text: Arc<String>,
|
||||
allocator: &'a Allocator,
|
||||
) -> Option<(Expression<'a>, Vec<(Statement<'a>, String)>)> {
|
||||
let mut ff = FunctionFinder {
|
||||
allocator,
|
||||
name,
|
||||
g,
|
||||
source_text,
|
||||
found: None,
|
||||
overloads: Vec::new(),
|
||||
};
|
||||
ff.visit_program(program);
|
||||
ff.found.map(|f| (f, ff.overloads))
|
||||
}
|
||||
|
||||
struct FunctionFinder<'a> {
|
||||
allocator: &'a Allocator,
|
||||
name: String,
|
||||
g: bool,
|
||||
source_text: Arc<String>,
|
||||
found: Option<Expression<'a>>,
|
||||
overloads: Vec<(Statement<'a>, String)>,
|
||||
}
|
||||
|
||||
impl<'a> FunctionFinder<'a> {
|
||||
fn assignment_target_matches(&self, at: &AssignmentTarget<'a>, i: usize) -> usize {
|
||||
match at {
|
||||
// x = fn
|
||||
AssignmentTarget::AssignmentTargetIdentifier(id) => {
|
||||
self.id_matches(id.name.as_str(), i)
|
||||
}
|
||||
// g.hB = fn
|
||||
AssignmentTarget::StaticMemberExpression(static_member_expression) => {
|
||||
// First level must be g.
|
||||
if let Expression::Identifier(oid) = &static_member_expression.object
|
||||
&& self.g
|
||||
&& oid.name == "g"
|
||||
&& static_member_expression.property.name.as_str() == self.name
|
||||
{
|
||||
return i + 1;
|
||||
}
|
||||
self.expression_matches(&static_member_expression.object, i)
|
||||
}
|
||||
// g.hB[F[65]][F[22]] = fn
|
||||
// CME{object: CME{object: SME{object: g, property: hB}, expression: CME{object: F, expression: 65}}, expression: CME{object: F, expression: 22}}
|
||||
// hB[F[65]][F[22]] = fn
|
||||
// CME{object: CME{object:hB, expression: CME{object: F, expression: 65}}, expression: CME{object: F, expression: 22}}
|
||||
AssignmentTarget::ComputedMemberExpression(id) => {
|
||||
self.expression_matches(&id.object, i + 1)
|
||||
}
|
||||
_ => 0,
|
||||
}
|
||||
}
|
||||
|
||||
fn expression_matches(&self, exp: &Expression<'a>, i: usize) -> usize {
|
||||
match exp {
|
||||
Expression::ComputedMemberExpression(computed_member_expression) => {
|
||||
self.expression_matches(&computed_member_expression.object, i + 1)
|
||||
}
|
||||
Expression::StaticMemberExpression(static_member_expression) => {
|
||||
if let Expression::Identifier(oid) = &static_member_expression.object
|
||||
&& self.g
|
||||
&& oid.name == "g"
|
||||
&& static_member_expression.property.name.as_str() == self.name
|
||||
{
|
||||
return i + 1;
|
||||
}
|
||||
self.expression_matches(&static_member_expression.object, i + 1)
|
||||
}
|
||||
Expression::Identifier(id) => self.id_matches(id.name.as_str(), i),
|
||||
_ => 0,
|
||||
}
|
||||
}
|
||||
|
||||
fn id_matches(&self, id: &str, i: usize) -> usize {
|
||||
if !self.g && id == self.name { i + 1 } else { 0 }
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> VisitMut<'a> for FunctionFinder<'a> {
|
||||
fn visit_assignment_expression(&mut self, it: &mut AssignmentExpression<'a>) {
|
||||
let depth = self.assignment_target_matches(&it.left, 0);
|
||||
if depth == 1 {
|
||||
if self.found.is_none() {
|
||||
self.found = Some(it.right.take_in(self.allocator));
|
||||
}
|
||||
} else if depth > 1 {
|
||||
let stmt = Statement::ExpressionStatement(OxBox::new_in(
|
||||
oxc_ast::ast::ExpressionStatement {
|
||||
span: it.span,
|
||||
node_id: NodeId::DUMMY.into(),
|
||||
expression: Expression::AssignmentExpression(it.take_in_box(self.allocator)),
|
||||
},
|
||||
self.allocator,
|
||||
));
|
||||
|
||||
self.overloads.push((
|
||||
stmt,
|
||||
it.left.span().source_text(&self.source_text).to_owned(),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
fn visit_variable_declarator(&mut self, it: &mut VariableDeclarator<'a>) {
|
||||
if !self.g
|
||||
&& self.found.is_none()
|
||||
&& let BindingPattern::BindingIdentifier(ident) = &it.id
|
||||
&& ident.name.as_str() == self.name
|
||||
&& let Some(init) = &mut it.init
|
||||
{
|
||||
self.found = Some(init.take_in(self.allocator));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn program_contains_string(program: &Program<'_>, strings: &[&str]) -> Option<u32> {
|
||||
let mut sf = StringFinder {
|
||||
strings,
|
||||
found: None,
|
||||
};
|
||||
sf.visit_program(program);
|
||||
sf.found
|
||||
}
|
||||
|
||||
struct StringFinder<'a> {
|
||||
strings: &'a [&'a str],
|
||||
found: Option<u32>,
|
||||
}
|
||||
|
||||
impl<'a> Visit<'a> for StringFinder<'a> {
|
||||
fn visit_string_literal(&mut self, it: &StringLiteral<'a>) {
|
||||
if self.found.is_none() {
|
||||
self.found = self
|
||||
.strings
|
||||
.iter()
|
||||
.position(|s| it.value.starts_with(s))
|
||||
.map(|x| x as u32);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_function_length(program: &Program<'_>) -> usize {
|
||||
let mut fl = FunctionLength { len: 0 };
|
||||
fl.visit_program(program);
|
||||
fl.len
|
||||
}
|
||||
|
||||
struct FunctionLength {
|
||||
len: usize,
|
||||
}
|
||||
|
||||
impl<'a> Visit<'a> for FunctionLength {
|
||||
fn visit_function_body(&mut self, it: &FunctionBody<'a>) {
|
||||
self.len += it.statements.len();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn find_deobf_fn<'a>(program: &Program<'a>) -> Option<String> {
|
||||
let mut df = DeobfFinder { found: None };
|
||||
df.visit_program(program);
|
||||
df.found
|
||||
}
|
||||
|
||||
struct DeobfFinder {
|
||||
found: Option<String>,
|
||||
}
|
||||
|
||||
impl DeobfFinder {
|
||||
/// p0 = new g.Hd(p0, !0);
|
||||
fn is_url_creation(stmt: &Statement<'_>, p0: &str) -> bool {
|
||||
if let Statement::ExpressionStatement(expr) = stmt
|
||||
&& let Expression::AssignmentExpression(ae) = &expr.expression
|
||||
&& ae.operator == AssignmentOperator::Assign
|
||||
&& ae.left.get_identifier_name().is_some_and(|n| n == p0)
|
||||
&& let Expression::NewExpression(ne) = &ae.right
|
||||
&& let Expression::StaticMemberExpression(gne) = &ne.callee
|
||||
&& gne
|
||||
.object
|
||||
.get_identifier_reference()
|
||||
.is_some_and(|r| r.name == "g")
|
||||
&& ne.arguments.len() == 2
|
||||
{
|
||||
let a0 = &ne.arguments[0];
|
||||
let a1 = &ne.arguments[1];
|
||||
|
||||
if a0.as_expression().is_some_and(|x| x.is_specific_id(p0))
|
||||
&& let Some(Expression::UnaryExpression(ue)) = a1.as_expression()
|
||||
&& ue.operator == UnaryOperator::LogicalNot
|
||||
&& ue.argument.is_number_0()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
/// p0.set("alr", "yes");
|
||||
fn is_set_alr_yes(stmt: &Statement<'_>, p0: &str) -> bool {
|
||||
if let Statement::ExpressionStatement(expr) = stmt
|
||||
&& let Expression::CallExpression(call) = &expr.expression
|
||||
&& let Some(callee) = call.callee.as_member_expression()
|
||||
&& callee.object().is_specific_id(p0)
|
||||
{
|
||||
if callee.static_property_name().is_some_and(|pn| pn != "set") {
|
||||
return false;
|
||||
}
|
||||
if call.arguments.len() == 2
|
||||
&& let (Some(a0), Some(a1)) = (
|
||||
call.arguments[0].as_expression(),
|
||||
call.arguments[1].as_expression(),
|
||||
)
|
||||
{
|
||||
// accept string literal "alr" or any expression in case this gets obfuscated
|
||||
if a0.is_string_literal() && !a0.is_specific_string_literal("alr") {
|
||||
return false;
|
||||
}
|
||||
if a1.is_string_literal() && !a1.is_specific_string_literal("yes") {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
fn is_deobf_function(expression: &Expression<'_>) -> bool {
|
||||
let res = match expression {
|
||||
Expression::FunctionExpression(f) => {
|
||||
if f.r#async {
|
||||
None
|
||||
} else {
|
||||
f.body.as_ref().map(|b| (b, f.params.items.first()))
|
||||
}
|
||||
}
|
||||
Expression::ArrowFunctionExpression(f) => {
|
||||
if f.r#async {
|
||||
None
|
||||
} else {
|
||||
Some((&f.body, f.params.items.first()))
|
||||
}
|
||||
}
|
||||
_ => None,
|
||||
};
|
||||
|
||||
res.is_some_and(|(body, p0)| {
|
||||
if let Some(p0) = p0
|
||||
&& let BindingPattern::BindingIdentifier(p0_id) = &p0.pattern
|
||||
{
|
||||
let p0n = p0_id.name.as_str();
|
||||
if !(4..11).contains(&body.statements.len()) {
|
||||
return false;
|
||||
}
|
||||
if let Some(i_url_creation) = body
|
||||
.statements
|
||||
.iter()
|
||||
.position(|s| Self::is_url_creation(s, p0n))
|
||||
{
|
||||
return body
|
||||
.statements
|
||||
.iter()
|
||||
.skip(i_url_creation + 1)
|
||||
.any(|s| Self::is_set_alr_yes(s, p0n));
|
||||
}
|
||||
}
|
||||
false
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Visit<'a> for DeobfFinder {
|
||||
fn visit_assignment_expression(&mut self, it: &AssignmentExpression<'a>) {
|
||||
if self.found.is_none()
|
||||
&& matches!(
|
||||
&it.left,
|
||||
AssignmentTarget::AssignmentTargetIdentifier(_)
|
||||
| AssignmentTarget::StaticMemberExpression(_)
|
||||
)
|
||||
&& Self::is_deobf_function(&it.right)
|
||||
{
|
||||
match &it.left {
|
||||
AssignmentTarget::AssignmentTargetIdentifier(id) => {
|
||||
self.found = Some(id.name.to_string());
|
||||
}
|
||||
AssignmentTarget::StaticMemberExpression(id) => {
|
||||
if let Some(idr) = id.object.get_identifier_reference() {
|
||||
self.found = Some(format!("{}.{}", idr.name, id.property.name))
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn visit_variable_declarator(&mut self, it: &VariableDeclarator<'a>) {
|
||||
if self.found.is_none()
|
||||
&& let Some(init) = &it.init
|
||||
&& Self::is_deobf_function(init)
|
||||
&& let Some(ident) = it.id.get_identifier_name()
|
||||
{
|
||||
self.found = Some(ident.to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "rustypipe-downloader"
|
||||
version = "0.3.1"
|
||||
rust-version = "1.67.1"
|
||||
rust-version = "1.89.0"
|
||||
edition.workspace = true
|
||||
authors.workspace = true
|
||||
license.workspace = true
|
||||
|
|
@ -15,19 +15,23 @@ default = ["default-tls"]
|
|||
|
||||
# Reqwest TLS options
|
||||
default-tls = ["reqwest/default-tls", "rustypipe/default-tls"]
|
||||
rustls = ["reqwest/rustls", "rustypipe/rustls"]
|
||||
rustls-no-provider = [
|
||||
"reqwest/rustls-no-provider",
|
||||
"rustypipe/rustls-no-provider",
|
||||
]
|
||||
native-tls = ["reqwest/native-tls", "rustypipe/native-tls"]
|
||||
native-tls-alpn = ["reqwest/native-tls-alpn", "rustypipe/native-tls-alpn"]
|
||||
native-tls-no-alpn = [
|
||||
"reqwest/native-tls-no-alpn",
|
||||
"rustypipe/native-tls-no-alpn",
|
||||
]
|
||||
native-tls-vendored = [
|
||||
"reqwest/native-tls-vendored",
|
||||
"rustypipe/native-tls-vendored",
|
||||
]
|
||||
rustls-tls-webpki-roots = [
|
||||
"reqwest/rustls-tls-webpki-roots",
|
||||
"rustypipe/rustls-tls-webpki-roots",
|
||||
]
|
||||
rustls-tls-native-roots = [
|
||||
"reqwest/rustls-tls-native-roots",
|
||||
"rustypipe/rustls-tls-native-roots",
|
||||
native-tls-vendored-no-alpn = [
|
||||
"reqwest/native-tls-vendored-no-alpn",
|
||||
"rustypipe/native-tls-vendored-no-alpn",
|
||||
]
|
||||
|
||||
audiotag = ["dep:lofty", "dep:image", "dep:smartcrop2"]
|
||||
|
|
@ -45,7 +49,7 @@ indicatif = { workspace = true, optional = true }
|
|||
filenamify.workspace = true
|
||||
tracing.workspace = true
|
||||
time.workspace = true
|
||||
lofty = { version = "0.22.0", optional = true }
|
||||
lofty = { version = "0.24.0", optional = true }
|
||||
image = { version = "0.25.0", optional = true, default-features = false, features = [
|
||||
"rayon",
|
||||
"jpeg",
|
||||
|
|
|
|||
|
|
@ -17,14 +17,14 @@ use std::{
|
|||
|
||||
use futures_util::stream::{self, StreamExt, TryStreamExt};
|
||||
use once_cell::sync::Lazy;
|
||||
use rand::Rng;
|
||||
use rand::RngExt;
|
||||
use regex::Regex;
|
||||
use reqwest::{header, Client, StatusCode, Url};
|
||||
use reqwest::{Client, StatusCode, Url, header};
|
||||
use rustypipe::{
|
||||
client::{ClientType, RustyPipe},
|
||||
model::{
|
||||
traits::{FileFormat, YtEntity},
|
||||
AudioCodec, TrackItem, VideoCodec, VideoPlayer,
|
||||
traits::{FileFormat, YtEntity, YtStream},
|
||||
},
|
||||
param::StreamFilter,
|
||||
};
|
||||
|
|
@ -40,7 +40,7 @@ use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
|
|||
#[cfg(feature = "audiotag")]
|
||||
use lofty::{config::WriteOptions, picture::Picture, prelude::*, tag::Tag};
|
||||
#[cfg(feature = "audiotag")]
|
||||
use rustypipe::model::{richtext::ToPlaintext, VideoDetails, VideoPlayerDetails};
|
||||
use rustypipe::model::{VideoDetails, VideoPlayerDetails, richtext::ToPlaintext};
|
||||
#[cfg(feature = "audiotag")]
|
||||
use time::{Date, OffsetDateTime};
|
||||
|
||||
|
|
@ -742,8 +742,9 @@ impl DownloadQuery {
|
|||
);
|
||||
|
||||
// If the last download failed, try another client if possible
|
||||
if let Some(failed_client) = failed_client {
|
||||
if let Some(pos) = client_types.iter().position(|c| c == &failed_client) {
|
||||
if let Some(failed_client) = failed_client
|
||||
&& let Some(pos) = client_types.iter().position(|c| c == &failed_client)
|
||||
{
|
||||
let p2 = pos + 1;
|
||||
if p2 < client_types.len() {
|
||||
let mut v = client_types[p2..].to_vec();
|
||||
|
|
@ -751,7 +752,6 @@ impl DownloadQuery {
|
|||
client_types = v.into();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let player_data = q.player_from_clients(&self.video.id, &client_types).await?;
|
||||
let user_agent = q.user_agent(player_data.client_type);
|
||||
|
|
@ -812,18 +812,22 @@ impl DownloadQuery {
|
|||
|
||||
let mut downloads: Vec<StreamDownload> = Vec::new();
|
||||
|
||||
if let Some(v) = video {
|
||||
if let Some(v) = video
|
||||
&& let Some(url) = v.url()
|
||||
{
|
||||
downloads.push(StreamDownload {
|
||||
file: output_path.with_extension(format!("video{}", v.format.extension())),
|
||||
url: v.url.clone(),
|
||||
url: url.to_owned(),
|
||||
video_codec: Some(v.codec),
|
||||
audio_codec: None,
|
||||
});
|
||||
}
|
||||
if let Some(a) = audio {
|
||||
if let Some(a) = audio
|
||||
&& let Some(url) = a.url()
|
||||
{
|
||||
downloads.push(StreamDownload {
|
||||
file: output_path.with_extension(format!("audio{}", a.format.extension())),
|
||||
url: a.url.clone(),
|
||||
url: url.to_owned(),
|
||||
video_codec: None,
|
||||
audio_codec: Some(a.codec),
|
||||
});
|
||||
|
|
@ -842,8 +846,9 @@ impl DownloadQuery {
|
|||
)
|
||||
.await
|
||||
.map_err(|e| {
|
||||
if let DownloadError::Http(e) = &e {
|
||||
if e.status() == Some(StatusCode::FORBIDDEN) {
|
||||
if let DownloadError::Http(e) = &e
|
||||
&& e.status() == Some(StatusCode::FORBIDDEN)
|
||||
{
|
||||
// 403 errors may occur due to bad visitor data IDs
|
||||
if let Some(vd) = &player_data.visitor_data {
|
||||
q.remove_visitor_data(vd);
|
||||
|
|
@ -853,7 +858,6 @@ impl DownloadQuery {
|
|||
visitor_data: player_data.visitor_data.clone(),
|
||||
};
|
||||
}
|
||||
}
|
||||
e
|
||||
})?;
|
||||
|
||||
|
|
@ -955,11 +959,11 @@ impl DownloadQuery {
|
|||
.unwrap_or(details.channel.name),
|
||||
);
|
||||
tag.set_title(track.name);
|
||||
if let Some(release_date) = extract_yt_release_date(&description, details.publish_date) {
|
||||
if let Ok(date_str) = release_date.format(&YMD_FORMAT) {
|
||||
if let Some(release_date) = extract_yt_release_date(&description, details.publish_date)
|
||||
&& let Ok(date_str) = release_date.format(&YMD_FORMAT)
|
||||
{
|
||||
tag.insert_text(ItemKey::RecordingDate, date_str);
|
||||
}
|
||||
}
|
||||
tag.set_comment(description);
|
||||
if let Some(track_nr) = track_nr {
|
||||
tag.set_track(track_nr.into());
|
||||
|
|
@ -988,8 +992,8 @@ impl DownloadQuery {
|
|||
if let Some(thumbnail) = thumbnail {
|
||||
// Attempt to get the higher resolution, uncropped maxresdefault.jpg thumbnail if available
|
||||
let mut resp = None;
|
||||
if thumbnail.height != thumbnail.width {
|
||||
if let Ok(x) = self
|
||||
if thumbnail.height != thumbnail.width
|
||||
&& let Ok(x) = self
|
||||
.dl
|
||||
.i
|
||||
.http
|
||||
|
|
@ -1003,7 +1007,6 @@ impl DownloadQuery {
|
|||
{
|
||||
resp = Some(x);
|
||||
}
|
||||
}
|
||||
|
||||
let resp = match resp {
|
||||
Some(resp) => resp,
|
||||
|
|
@ -1209,19 +1212,21 @@ async fn download_single_file(
|
|||
.open(&output_path_tmp)
|
||||
.await?;
|
||||
|
||||
let res = if is_gvideo && size.is_some() {
|
||||
let res = match size {
|
||||
Some(size) if is_gvideo => {
|
||||
download_chunks_by_param(
|
||||
http,
|
||||
&mut file,
|
||||
url,
|
||||
size.unwrap(),
|
||||
size,
|
||||
offset,
|
||||
user_agent,
|
||||
#[cfg(feature = "indicatif")]
|
||||
pb,
|
||||
)
|
||||
.await
|
||||
} else {
|
||||
}
|
||||
_ => {
|
||||
download_chunks_by_header(
|
||||
http,
|
||||
&mut file,
|
||||
|
|
@ -1233,6 +1238,7 @@ async fn download_single_file(
|
|||
pb,
|
||||
)
|
||||
.await
|
||||
}
|
||||
};
|
||||
|
||||
drop(file);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ fn rp() -> RustyPipe {
|
|||
|
||||
#[rstest]
|
||||
#[tokio::test]
|
||||
#[ignore]
|
||||
async fn download_video(rp: RustyPipe) {
|
||||
let td = TempDir::default();
|
||||
let td_path = td.to_path_buf();
|
||||
|
|
@ -43,6 +44,7 @@ async fn download_video(rp: RustyPipe) {
|
|||
|
||||
#[rstest]
|
||||
#[tokio::test]
|
||||
#[ignore]
|
||||
async fn download_music(rp: RustyPipe) {
|
||||
let td = TempDir::default();
|
||||
let td_path = td.to_path_buf();
|
||||
|
|
|
|||
33
rbody.json
Normal file
33
rbody.json
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"videoId": "83C3TZ4Zm_o",
|
||||
"context": {
|
||||
"client": {
|
||||
"hl": "de",
|
||||
"gl": "DE",
|
||||
"deviceMake": "Samsung",
|
||||
"deviceModel": "SmartTV",
|
||||
"visitorData": "CgtTT3hKd0FIZVVOOCjdoqfRBjIKCgJERRIEEgAgMGLfAgrcAjE5LllUPW9PQUdYdlRSblFFYk1oR3Q4clpLSVVlVWtkR1UyemU1VDd6aWJRRmpsVGtSbFhhd3M2dVJjaWdFbE5MZmpxYkdFdlpDcDhKVjdGWDNacFZMQ1lnaFRHdGdNSVRuS0ZKa2ZQckxwT19vTmlQYjNUMEpobmN6NmRFRnQ3SWZtVVJzZjEzWkh4Z2QxZVhtb04yUHRMM2ZsS1FtQmJNakluRDJxc3hMQWtZeXhJWUo4d1RhQl9vV21hV0cxRTYtSUI5TUFMWGdpS0hCeVc1VDhQUUdack1SN3JzN2UtZnVYbTBMVGUwZEJyeWF4SjBxOWJfQnlyQnZ6UTZHYUE1WW0tT28ta19DbHc0bUxWSnlnOGFLdHQ1OG5wV1k5T3RDbGRLMU5XMGNLWkRBRk9mOVZZUjViWnNKX3p0TWE4Q1VrUTdkdmY3cEV2Z2hXMnRpY0RRN3hfeEtXQQ%3D%3D",
|
||||
"clientName": "TVHTML5",
|
||||
"clientVersion": "7.20260609.06.00",
|
||||
"osName": "Tizen",
|
||||
"osVersion": "5.0",
|
||||
"originalUrl": "https://www.youtube.com/tv",
|
||||
"platform": "TV",
|
||||
"clientFormFactor": "UNKNOWN_FORM_FACTOR",
|
||||
"webpSupport": false,
|
||||
"timeZone": "Europe/Berlin",
|
||||
"clientScreen": "WATCH"
|
||||
},
|
||||
"user": { "lockedSafetyMode": false },
|
||||
"request": {
|
||||
"useSsl": true,
|
||||
"internalExperimentFlags": []
|
||||
}
|
||||
},
|
||||
"playbackContext": {
|
||||
"contentPlaybackContext": {
|
||||
"referer": "https://www.youtube.com/tv#/watch?v=83C3TZ4Zm_o&list=RD83C3TZ4Zm_o",
|
||||
"signatureTimestamp": 20612
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -8,16 +8,16 @@ use crate::{
|
|||
client::response::YouTubeListItem,
|
||||
error::{Error, ExtractionError},
|
||||
model::{
|
||||
paginator::{ContinuationEndpoint, Paginator},
|
||||
Channel, ChannelInfo, PlaylistItem, Verification, VideoItem,
|
||||
paginator::{ContinuationEndpoint, Paginator},
|
||||
},
|
||||
param::{ChannelOrder, ChannelVideoTab, Language},
|
||||
serializer::{text::TextComponent, MapResult},
|
||||
util::{self, timeago, ProtoBuilder},
|
||||
serializer::{MapResult, text::TextComponent},
|
||||
util::{self, ProtoBuilder, timeago},
|
||||
};
|
||||
|
||||
use super::{
|
||||
response, ClientType, MapRespCtx, MapRespOptions, MapResponse, QContinuation, RustyPipeQuery,
|
||||
ClientType, MapRespCtx, MapRespOptions, MapResponse, QContinuation, RustyPipeQuery, response,
|
||||
};
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
|
|
@ -37,7 +37,7 @@ enum ChannelTab {
|
|||
Shorts,
|
||||
#[serde(rename = "EgdzdHJlYW1z8gYECgJ6AA%3D%3D")]
|
||||
Live,
|
||||
#[serde(rename = "EglwbGF5bGlzdHMgAQ%3D%3D")]
|
||||
#[serde(rename = "EglwbGF5bGlzdHPyBgQKAkIA")]
|
||||
Playlists,
|
||||
#[serde(rename = "EgZzZWFyY2jyBgQKAloA")]
|
||||
Search,
|
||||
|
|
@ -123,7 +123,7 @@ impl RustyPipeQuery {
|
|||
order: ChannelOrder,
|
||||
) -> Result<Paginator<VideoItem>, Error> {
|
||||
self.continuation(
|
||||
order_ctoken(channel_id.as_ref(), tab, order, &random_target()),
|
||||
order_ctoken(channel_id.as_ref(), tab, order, &util::random_uuid()),
|
||||
ContinuationEndpoint::Browse,
|
||||
None,
|
||||
)
|
||||
|
|
@ -626,35 +626,27 @@ fn order_ctoken(
|
|||
order: ChannelOrder,
|
||||
target_id: &str,
|
||||
) -> String {
|
||||
let mut pb_tab = ProtoBuilder::new();
|
||||
pb_tab.string(2, target_id);
|
||||
let mut pb_tab_order = ProtoBuilder::new();
|
||||
pb_tab_order.string(1, target_id);
|
||||
|
||||
match tab {
|
||||
ChannelVideoTab::Videos => match order {
|
||||
ChannelOrder::Latest => {
|
||||
pb_tab.varint(3, 1);
|
||||
pb_tab.varint(4, 4);
|
||||
let order_id = if tab == ChannelVideoTab::Live {
|
||||
match order {
|
||||
ChannelOrder::Latest => 12,
|
||||
ChannelOrder::Popular => 14,
|
||||
ChannelOrder::Oldest => 13,
|
||||
}
|
||||
ChannelOrder::Popular => {
|
||||
pb_tab.varint(3, 2);
|
||||
pb_tab.varint(4, 2);
|
||||
}
|
||||
ChannelOrder::Oldest => {
|
||||
pb_tab.varint(3, 4);
|
||||
pb_tab.varint(4, 5);
|
||||
}
|
||||
},
|
||||
ChannelVideoTab::Shorts => match order {
|
||||
ChannelOrder::Latest => pb_tab.varint(4, 4),
|
||||
ChannelOrder::Popular => pb_tab.varint(4, 2),
|
||||
ChannelOrder::Oldest => pb_tab.varint(4, 5),
|
||||
},
|
||||
ChannelVideoTab::Live => match order {
|
||||
ChannelOrder::Latest => pb_tab.varint(5, 12),
|
||||
ChannelOrder::Popular => pb_tab.varint(5, 14),
|
||||
ChannelOrder::Oldest => pb_tab.varint(5, 13),
|
||||
},
|
||||
} else {
|
||||
match order {
|
||||
ChannelOrder::Latest => 4,
|
||||
ChannelOrder::Popular => 2,
|
||||
ChannelOrder::Oldest => 5,
|
||||
}
|
||||
};
|
||||
pb_tab_order.varint(3, order_id);
|
||||
|
||||
let mut pb_tab = ProtoBuilder::new();
|
||||
let otabid = if tab == ChannelVideoTab::Shorts { 7 } else { 8 };
|
||||
pb_tab.embedded(otabid, pb_tab_order);
|
||||
|
||||
let mut pb_3 = ProtoBuilder::new();
|
||||
pb_3.embedded(tab.order_ctoken_id(), pb_tab);
|
||||
|
|
@ -709,9 +701,9 @@ mod tests {
|
|||
use rstest::rstest;
|
||||
|
||||
use crate::{
|
||||
client::{response, MapRespCtx, MapResponse},
|
||||
client::{MapRespCtx, MapResponse, response},
|
||||
error::{ExtractionError, UnavailabilityReason},
|
||||
model::{paginator::Paginator, Channel, ChannelInfo, PlaylistItem, VideoItem},
|
||||
model::{Channel, ChannelInfo, PlaylistItem, VideoItem, paginator::Paginator},
|
||||
param::{ChannelOrder, ChannelVideoTab},
|
||||
serializer::MapResult,
|
||||
util::tests::TESTFILES,
|
||||
|
|
@ -733,7 +725,7 @@ mod tests {
|
|||
#[case::livestreams("livestreams", "UC2DjFE7Xf11URZqWBigcVOQ")]
|
||||
#[case::pageheader("shorts_20240129_pageheader", "UCh8gHdtzO2tXd593_bjErWg")]
|
||||
#[case::pageheader2("videos_20240324_pageheader2", "UC2DjFE7Xf11URZqWBigcVOQ")]
|
||||
#[case::lockup("shorts_20240910_lockup", "UCh8gHdtzO2tXd593_bjErWg")]
|
||||
#[case::s20260606("shorts_20260606", "UCh8gHdtzO2tXd593_bjErWg")]
|
||||
fn map_channel_videos(#[case] name: &str, #[case] id: &str) {
|
||||
let json_path = path!(*TESTFILES / "channel" / format!("channel_{name}.json"));
|
||||
let json_file = File::open(json_path).unwrap();
|
||||
|
|
@ -827,7 +819,10 @@ mod tests {
|
|||
ChannelOrder::Popular,
|
||||
"\n$6461d7c8-0000-2040-87aa-089e0827e420",
|
||||
);
|
||||
assert_eq!(videos_popular_token, "4qmFsgJgEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaRDhnWXdHaTU2TEJJbUNpUTJORFl4WkRkak9DMHdNREF3TFRJd05EQXRPRGRoWVMwd09EbGxNRGd5TjJVME1qQVlBaUFD");
|
||||
assert_eq!(
|
||||
videos_popular_token,
|
||||
"4qmFsgJgEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaRDhnWXdHaTU2TEVJcUNpWUtKRFkwTmpGa04yTTRMVEF3TURBdE1qQTBNQzA0TjJGaExUQTRPV1V3T0RJM1pUUXlNQmdD"
|
||||
);
|
||||
|
||||
let shorts_popular_token = order_ctoken(
|
||||
channel_id,
|
||||
|
|
@ -835,7 +830,10 @@ mod tests {
|
|||
ChannelOrder::Popular,
|
||||
"\n$64679ffb-0000-26b3-a1bd-582429d2c794",
|
||||
);
|
||||
assert_eq!(shorts_popular_token, "4qmFsgJkEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaSDhnWXVHaXhTS2hJbUNpUTJORFkzT1dabVlpMHdNREF3TFRJMllqTXRZVEZpWkMwMU9ESTBNamxrTW1NM09UUWdBZyUzRCUzRA%3D%3D");
|
||||
assert_eq!(
|
||||
shorts_popular_token,
|
||||
"4qmFsgJgEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaRDhnWXdHaTVTTERvcUNpWUtKRFkwTmpjNVptWmlMVEF3TURBdE1qWmlNeTFoTVdKa0xUVTRNalF5T1dReVl6YzVOQmdD"
|
||||
);
|
||||
|
||||
let live_popular_token = order_ctoken(
|
||||
channel_id,
|
||||
|
|
@ -843,7 +841,10 @@ mod tests {
|
|||
ChannelOrder::Popular,
|
||||
"\n$64693069-0000-2a1e-8c7d-582429bd5ba8",
|
||||
);
|
||||
assert_eq!(live_popular_token, "4qmFsgJkEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaSDhnWXVHaXh5S2hJbUNpUTJORFk1TXpBMk9TMHdNREF3TFRKaE1XVXRPR00zWkMwMU9ESTBNamxpWkRWaVlUZ29EZyUzRCUzRA%3D%3D");
|
||||
assert_eq!(
|
||||
live_popular_token,
|
||||
"4qmFsgJgEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaRDhnWXdHaTV5TEVJcUNpWUtKRFkwTmprek1EWTVMVEF3TURBdE1tRXhaUzA0WXpka0xUVTRNalF5T1dKa05XSmhPQmdP"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
@ -851,6 +852,9 @@ mod tests {
|
|||
let channel_id = "UCh8gHdtzO2tXd593_bjErWg";
|
||||
|
||||
let token = channel_info_ctoken(channel_id, "\n$655b339a-0000-20b9-92dc-582429d254b4");
|
||||
assert_eq!(token, "4qmFsgJgEhhVQ2g4Z0hkdHpPMnRYZDU5M19iakVyV2caRDhnWXJHaW1hQVNZS0pEWTFOV0l6TXpsaExUQXdNREF0TWpCaU9TMDVNbVJqTFRVNE1qUXlPV1F5TlRSaU5BJTNEJTNE");
|
||||
assert_eq!(
|
||||
token,
|
||||
"4qmFsgJgEhhVQ2g4Z0hkdHpPMnRYZDU5M19iakVyV2caRDhnWXJHaW1hQVNZS0pEWTFOV0l6TXpsaExUQXdNREF0TWpCaU9TMDVNbVJqTFRVNE1qUXlPV1F5TlRSaU5BJTNEJTNE"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use crate::{
|
|||
util,
|
||||
};
|
||||
|
||||
use super::{response, RustyPipeQuery};
|
||||
use super::{RustyPipeQuery, response};
|
||||
|
||||
impl RustyPipeQuery {
|
||||
/// Get the 15 latest videos from the channel's RSS feed
|
||||
|
|
@ -50,14 +50,14 @@ impl RustyPipeQuery {
|
|||
operation: "channel_rss",
|
||||
error: Some(e.to_string()),
|
||||
msgs: Vec::new(),
|
||||
deobf_data: None,
|
||||
deobf_js_url: None,
|
||||
http_request: crate::report::HTTPRequest {
|
||||
url: &url,
|
||||
method: "GET",
|
||||
status: 200,
|
||||
req_header: None,
|
||||
req_body: None,
|
||||
resp_body: xml,
|
||||
resp_body: &xml,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -37,21 +37,23 @@ use std::{borrow::Cow, fmt::Debug, time::Duration};
|
|||
|
||||
use once_cell::sync::Lazy;
|
||||
use regex::Regex;
|
||||
use reqwest::{header, Client, ClientBuilder, Request, RequestBuilder, Response, StatusCode};
|
||||
use serde::{de::DeserializeOwned, Deserialize, Serialize};
|
||||
use reqwest::{Client, ClientBuilder, Request, RequestBuilder, Response, StatusCode, header};
|
||||
use serde::{Deserialize, Serialize, de::DeserializeOwned};
|
||||
use serde_with::{DefaultOnError, serde_as};
|
||||
use sha1::{Digest, Sha1};
|
||||
use time::{OffsetDateTime, UtcOffset};
|
||||
use tokio::sync::RwLock as AsyncRwLock;
|
||||
|
||||
use crate::deobfuscate::Deobfuscator;
|
||||
use crate::error::AuthError;
|
||||
use crate::util::VisitorDataCache;
|
||||
use crate::{
|
||||
cache::{CacheStorage, FileStorage, DEFAULT_CACHE_FILE},
|
||||
cache::{CacheStorage, DEFAULT_CACHE_FILE, FileStorage},
|
||||
deobfuscate::DeobfData,
|
||||
error::{Error, ExtractionError},
|
||||
model::ArtistId,
|
||||
param::{Country, Language},
|
||||
report::{FileReporter, Level, Report, Reporter, RustyPipeInfo, DEFAULT_REPORT_DIR},
|
||||
report::{DEFAULT_REPORT_DIR, FileReporter, Level, Report, Reporter, RustyPipeInfo},
|
||||
serializer::MapResult,
|
||||
util,
|
||||
};
|
||||
|
|
@ -85,6 +87,8 @@ pub enum ClientType {
|
|||
/// - no obfuscated stream URLs
|
||||
/// - includes lower resolution audio streams
|
||||
Android,
|
||||
/// Client used by the Android VR Player
|
||||
AndroidVr,
|
||||
/// Client used by the iOS app
|
||||
///
|
||||
/// - no obfuscated stream URLs
|
||||
|
|
@ -100,7 +104,11 @@ impl ClientType {
|
|||
}
|
||||
|
||||
fn needs_deobf(self) -> bool {
|
||||
!matches!(self, ClientType::Ios)
|
||||
self.is_web() || self == ClientType::Tv
|
||||
}
|
||||
|
||||
fn needs_visitor_data(self) -> bool {
|
||||
self == ClientType::Tv
|
||||
}
|
||||
|
||||
fn needs_po_token(self) -> bool {
|
||||
|
|
@ -133,6 +141,8 @@ struct ClientInfo<'a> {
|
|||
#[serde(skip_serializing_if = "str::is_empty")]
|
||||
client_screen: &'a str,
|
||||
#[serde(skip_serializing_if = "str::is_empty")]
|
||||
device_make: &'a str,
|
||||
#[serde(skip_serializing_if = "str::is_empty")]
|
||||
device_model: &'a str,
|
||||
#[serde(skip_serializing_if = "str::is_empty")]
|
||||
os_name: &'a str,
|
||||
|
|
@ -156,6 +166,7 @@ impl Default for ClientInfo<'_> {
|
|||
client_name: "",
|
||||
client_version: Cow::default(),
|
||||
client_screen: "",
|
||||
device_make: "",
|
||||
device_model: "",
|
||||
os_name: "",
|
||||
os_version: "",
|
||||
|
|
@ -357,8 +368,8 @@ const IOS_CLIENT_VERSION: &str = "20.03.02";
|
|||
const IOS_VERSION: &str = "18_2_1";
|
||||
const IOS_VERSION_BUILD: &str = "18.2.1.22C161";
|
||||
const IOS_DEVICE_MODEL: &str = "iPhone16,2";
|
||||
const ANDROID_CLIENT_VERSION: &str = "19.44.38";
|
||||
const ANDROID_VERSION: &str = "11";
|
||||
const ANDROID_CLIENT_VERSION: &str = "21.03.36";
|
||||
const ANDROID_VERSION: &str = "15";
|
||||
|
||||
const OAUTH_CLIENT_ID: &str =
|
||||
"861556708454-d6dlm3lh05idd8npek18k6be8ba3oc68.apps.googleusercontent.com";
|
||||
|
|
@ -570,13 +581,18 @@ struct CacheHolder {
|
|||
auth_cookie: RwLock<Option<AuthCookie>>,
|
||||
}
|
||||
|
||||
#[serde_as]
|
||||
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(default)]
|
||||
struct CacheData {
|
||||
#[serde_as(as = "DefaultOnError")]
|
||||
clients: HashMap<ClientType, CacheEntry<ClientData>>,
|
||||
#[serde_as(as = "DefaultOnError")]
|
||||
deobf: CacheEntry<DeobfData>,
|
||||
#[serde_as(as = "DefaultOnError")]
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
oauth_token: Option<OauthToken>,
|
||||
#[serde_as(as = "DefaultOnError")]
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
auth_cookie: Option<AuthCookie>,
|
||||
}
|
||||
|
|
@ -626,6 +642,7 @@ impl<T> CacheEntry<T> {
|
|||
}
|
||||
|
||||
/// Get the content of the cache, even if it is expired
|
||||
#[allow(unused)]
|
||||
fn get_expired(&self) -> Option<&T> {
|
||||
self.data.as_ref()
|
||||
}
|
||||
|
|
@ -1271,40 +1288,47 @@ impl RustyPipe {
|
|||
}
|
||||
|
||||
/// Get deobfuscation data (either from cache or extracted from YouTube's JavaScript code)
|
||||
async fn get_deobf_data(&self) -> Result<DeobfData, Error> {
|
||||
async fn get_deobf_data(&self) -> Result<Option<DeobfData>, Error> {
|
||||
// Write lock here to prevent concurrent tasks from fetching the same data
|
||||
let mut deobf_data = self.inner.cache.deobf.write().await;
|
||||
|
||||
match deobf_data.get() {
|
||||
Some(deobf_data) => Ok(deobf_data.clone()),
|
||||
None => {
|
||||
// Return cached deobf data if it is up-to-date and contains extracted script
|
||||
// If the deobfuscator is disabled, allow deobf data without a script (STS is still required for player requests)
|
||||
if let Some(d) = deobf_data.get()
|
||||
&& (d.script.is_some() || !Deobfuscator::ENABLED)
|
||||
{
|
||||
Ok(Some(d.clone()))
|
||||
} else {
|
||||
// Only attempt to fetch deobf data every 24 hours to avoid a flood of error reports
|
||||
// if the client JS cannot be parsed
|
||||
if deobf_data.should_retry() {
|
||||
tracing::debug!("getting deobf data");
|
||||
|
||||
match DeobfData::extract(&self.inner.http, self.inner.reporter.as_deref()).await
|
||||
{
|
||||
match DeobfData::extract(&self.inner.http, self.inner.reporter.as_deref()).await {
|
||||
Ok(new_data) => {
|
||||
// Write new data to the cache
|
||||
*deobf_data = CacheEntry::from(new_data.clone());
|
||||
drop(deobf_data);
|
||||
self.store_cache().await;
|
||||
Ok(new_data)
|
||||
Ok(Some(new_data))
|
||||
}
|
||||
Err(e) => {
|
||||
// Try to fall back to expired cache data if available, otherwise return error
|
||||
deobf_data.retry_later(24);
|
||||
let res = match deobf_data.get_expired() {
|
||||
Some(d) => {
|
||||
tracing::warn!("could not get new deobf data ({e}), falling back to expired cache");
|
||||
|
||||
let res = if let Some(d) = deobf_data.get_expired()
|
||||
&& (d.script.is_some() || !Deobfuscator::ENABLED)
|
||||
{
|
||||
tracing::warn!(
|
||||
"could not get new deobf data ({e}), falling back to expired cache"
|
||||
);
|
||||
Ok(d.clone())
|
||||
}
|
||||
None => Err(e),
|
||||
} else {
|
||||
Err(e)
|
||||
};
|
||||
drop(deobf_data);
|
||||
self.store_cache().await;
|
||||
res
|
||||
res.map(Some)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1313,16 +1337,15 @@ impl RustyPipe {
|
|||
tracing::warn!(
|
||||
"could not get new deobf data, falling back to expired cache"
|
||||
);
|
||||
Ok(d.clone())
|
||||
Ok(Some(d.clone()))
|
||||
}
|
||||
None => Err(Error::Extraction(ExtractionError::Deobfuscation(
|
||||
"could not get deobf data".into(),
|
||||
crate::error::DeobfError::Extraction("deobf data".into()),
|
||||
))),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Write the current cache data to the storage backend.
|
||||
async fn store_cache(&self) {
|
||||
|
|
@ -1839,6 +1862,9 @@ impl RustyPipeQuery {
|
|||
ANDROID_CLIENT_VERSION, ANDROID_VERSION
|
||||
)
|
||||
.into(),
|
||||
ClientType::AndroidVr => Cow::Borrowed(
|
||||
"com.google.android.apps.youtube.vr.oculus/1.65.10 (Linux; U; Android 12L; en_US; Quest 3 Build/SQ3A.220605.009.A1) gzip",
|
||||
),
|
||||
ClientType::Ios => format!(
|
||||
"com.google.ios.youtube/{} ({}; U; CPU iOS {} like Mac OS X)",
|
||||
IOS_CLIENT_VERSION, IOS_DEVICE_MODEL, IOS_VERSION
|
||||
|
|
@ -1976,7 +2002,11 @@ impl RustyPipeQuery {
|
|||
client_version: self.client.get_client_version(ctype).await,
|
||||
client_screen: "WATCH",
|
||||
platform: "TV",
|
||||
device_make: "Samsung",
|
||||
device_model: "SmartTV",
|
||||
os_name: "Tizen",
|
||||
os_version: "5.0",
|
||||
original_url: "https://www.youtube.com/tv",
|
||||
visitor_data,
|
||||
hl,
|
||||
gl,
|
||||
|
|
@ -1996,7 +2026,28 @@ impl RustyPipeQuery {
|
|||
client_version: ANDROID_CLIENT_VERSION.into(),
|
||||
os_name: "Android",
|
||||
os_version: ANDROID_VERSION,
|
||||
android_sdk_version: Some(30),
|
||||
android_sdk_version: Some(35),
|
||||
platform: "MOBILE",
|
||||
client_screen: "WATCH",
|
||||
visitor_data,
|
||||
hl,
|
||||
gl,
|
||||
time_zone,
|
||||
utc_offset_minutes,
|
||||
..Default::default()
|
||||
},
|
||||
request: None,
|
||||
user: User::default(),
|
||||
third_party: None,
|
||||
},
|
||||
ClientType::AndroidVr => YTContext {
|
||||
client: ClientInfo {
|
||||
client_name: "ANDROID_VR",
|
||||
client_version: "1.65.10".into(),
|
||||
device_model: "Quest 3",
|
||||
os_name: "Android",
|
||||
os_version: "12L",
|
||||
android_sdk_version: Some(32),
|
||||
platform: "MOBILE",
|
||||
visitor_data,
|
||||
hl,
|
||||
|
|
@ -2114,6 +2165,15 @@ impl RustyPipeQuery {
|
|||
))
|
||||
.header("X-YouTube-Client-Name", "3")
|
||||
.header("X-Goog-Api-Format-Version", "2"),
|
||||
ClientType::AndroidVr => self
|
||||
.client
|
||||
.inner
|
||||
.http
|
||||
.post(format!(
|
||||
"{YOUTUBEI_V1_GAPIS_URL}{endpoint}?{DISABLE_PRETTY_PRINT_PARAMETER}"
|
||||
))
|
||||
.header("X-YouTube-Client-Name", "28")
|
||||
.header("X-Goog-Api-Format-Version", "2"),
|
||||
ClientType::Ios => self
|
||||
.client
|
||||
.inner
|
||||
|
|
@ -2517,15 +2577,16 @@ impl RustyPipeQuery {
|
|||
}
|
||||
};
|
||||
|
||||
if level > Level::DBG || self.opts.report {
|
||||
if let Some(reporter) = &self.client.inner.reporter {
|
||||
if (level > Level::DBG || self.opts.report)
|
||||
&& let Some(reporter) = &self.client.inner.reporter
|
||||
{
|
||||
let report = Report {
|
||||
info: self.rp_info(),
|
||||
level,
|
||||
operation: &format!("{operation}({id})"),
|
||||
error,
|
||||
msgs,
|
||||
deobf_data: ctx_src.deobf.cloned(),
|
||||
deobf_js_url: ctx_src.deobf.as_ref().map(|d| d.js_url.to_owned()),
|
||||
http_request: crate::report::HTTPRequest {
|
||||
url: request.url().as_str(),
|
||||
method: request.method().as_str(),
|
||||
|
|
@ -2550,12 +2611,11 @@ impl RustyPipeQuery {
|
|||
.and_then(|b| b.as_bytes())
|
||||
.map(|b| String::from_utf8_lossy(b).into_owned()),
|
||||
status: req_res.status.into(),
|
||||
resp_body: req_res.body,
|
||||
resp_body: &req_res.body,
|
||||
},
|
||||
};
|
||||
reporter.report(&report);
|
||||
}
|
||||
}
|
||||
|
||||
if res.is_ok() && level > Level::DBG && self.opts.strict {
|
||||
return Err(Error::Extraction(ExtractionError::DeserializationWarnings));
|
||||
|
|
@ -2700,7 +2760,9 @@ trait MapResponse<T> {
|
|||
|
||||
fn validate_country(country: Country) -> Country {
|
||||
if country == Country::Zz {
|
||||
tracing::warn!("Country:Zz (Global) can only be used for fetching music charts, falling back to Country:Us");
|
||||
tracing::warn!(
|
||||
"Country:Zz (Global) can only be used for fetching music charts, falling back to Country:Us"
|
||||
);
|
||||
Country::Us
|
||||
} else {
|
||||
country
|
||||
|
|
@ -2806,7 +2868,7 @@ mod tests {
|
|||
let token_bts = data_encoding::BASE64URL
|
||||
.decode(po_token.po_token.as_bytes())
|
||||
.unwrap();
|
||||
assert_eq!(token_bts.len(), ident.len() + 74);
|
||||
assert!(token_bts.len() > 100, "{}", po_token.po_token);
|
||||
assert!(
|
||||
po_token.valid_until > OffsetDateTime::now_utc() + time::Duration::minutes(30),
|
||||
"valid until {}",
|
||||
|
|
|
|||
|
|
@ -6,22 +6,22 @@ use tracing::debug;
|
|||
|
||||
use crate::{
|
||||
client::{
|
||||
response::{music_item::map_album_type, url_endpoint::NavigationEndpoint},
|
||||
MapRespOptions, QContinuation,
|
||||
response::{music_item::map_album_type, url_endpoint::NavigationEndpoint},
|
||||
},
|
||||
error::{Error, ExtractionError},
|
||||
model::{
|
||||
paginator::Paginator, traits::FromYtItem, AlbumItem, AlbumType, ArtistId, MusicArtist,
|
||||
MusicItem,
|
||||
AlbumItem, AlbumType, ArtistId, MusicArtist, MusicItem, paginator::Paginator,
|
||||
richtext::RichText, traits::FromYtItem,
|
||||
},
|
||||
param::{AlbumFilter, AlbumOrder},
|
||||
serializer::MapResult,
|
||||
serializer::{MapResult, text::TextComponent},
|
||||
util::{self, ProtoBuilder},
|
||||
};
|
||||
|
||||
use super::{
|
||||
response::{self, music_item::MusicListMapper, url_endpoint::PageType},
|
||||
ClientType, MapRespCtx, MapResponse, QBrowse, QBrowseParams, RustyPipeQuery,
|
||||
response::{self, music_item::MusicListMapper, url_endpoint::PageType},
|
||||
};
|
||||
|
||||
impl RustyPipeQuery {
|
||||
|
|
@ -181,12 +181,12 @@ fn map_artist_page(
|
|||
.and_then(|pb| util::b64_decode(pb.as_bytes()).ok())
|
||||
.and_then(|pb| util::string_from_pb(pb, 3));
|
||||
|
||||
if let Some(share_channel_id) = share_channel_id {
|
||||
if share_channel_id != ctx.id {
|
||||
if let Some(share_channel_id) = share_channel_id
|
||||
&& share_channel_id != ctx.id
|
||||
{
|
||||
return Err(ExtractionError::Redirect(share_channel_id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let sections = contents
|
||||
.single_column_browse_results_renderer
|
||||
|
|
@ -211,19 +211,13 @@ fn map_artist_page(
|
|||
for section in sections {
|
||||
match section {
|
||||
response::music_item::ItemSection::MusicShelfRenderer(shelf) => {
|
||||
if tracks_playlist_id.is_none() {
|
||||
if let Some(ep) = shelf.bottom_endpoint {
|
||||
if let Some(cfg) =
|
||||
ep.browse_endpoint.browse_endpoint_context_supported_configs
|
||||
{
|
||||
if cfg.browse_endpoint_context_music_config.page_type
|
||||
== PageType::Playlist
|
||||
if tracks_playlist_id.is_none()
|
||||
&& let Some(ep) = shelf.bottom_endpoint
|
||||
&& let Some(cfg) = ep.browse_endpoint.browse_endpoint_context_supported_configs
|
||||
&& cfg.browse_endpoint_context_music_config.page_type == PageType::Playlist
|
||||
{
|
||||
tracks_playlist_id = Some(ep.browse_endpoint.browse_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mapper.album_type = AlbumType::Single;
|
||||
mapper.map_response(shelf.contents);
|
||||
}
|
||||
|
|
@ -234,8 +228,7 @@ fn map_artist_page(
|
|||
if let Some(button) = h
|
||||
.music_carousel_shelf_basic_header_renderer
|
||||
.more_content_button
|
||||
{
|
||||
if let NavigationEndpoint::Browse {
|
||||
&& let NavigationEndpoint::Browse {
|
||||
browse_endpoint, ..
|
||||
} = button.button_renderer.navigation_endpoint
|
||||
{
|
||||
|
|
@ -259,15 +252,18 @@ fn map_artist_page(
|
|||
extendable_albums = true;
|
||||
} else {
|
||||
// Peek at the first item to determine type
|
||||
if let Some(response::music_item::MusicResponseItem::MusicTwoRowItemRenderer(item)) = shelf.contents.c.first() {
|
||||
if let Some(PageType::Album) = item.navigation_endpoint.page_type() {
|
||||
if let Some(
|
||||
response::music_item::MusicResponseItem::MusicTwoRowItemRenderer(
|
||||
item,
|
||||
),
|
||||
) = shelf.contents.c.first()
|
||||
&& let Some(PageType::Album) = item.navigation_endpoint.page_type()
|
||||
{
|
||||
can_fetch_more = true;
|
||||
extendable_albums = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mapper.album_type = map_album_type(
|
||||
h.music_carousel_shelf_basic_header_renderer
|
||||
.title
|
||||
|
|
@ -287,17 +283,11 @@ fn map_artist_page(
|
|||
let mut mapped = mapper.group_items();
|
||||
|
||||
static WIKIPEDIA_REGEX: Lazy<Regex> =
|
||||
Lazy::new(|| Regex::new(r"\(?https://[a-z\d-]+\.wikipedia.org/wiki/[^\s]+").unwrap());
|
||||
let wikipedia_url = header.description.as_deref().and_then(|h| {
|
||||
WIKIPEDIA_REGEX.captures(h).and_then(|c| c.get(0)).map(|m| {
|
||||
let m = m.as_str();
|
||||
match m.strip_prefix('(') {
|
||||
Some(m) => match m.strip_suffix(')') {
|
||||
Some(m) => m.to_owned(),
|
||||
None => m.to_owned(),
|
||||
},
|
||||
None => m.to_owned(),
|
||||
}
|
||||
Lazy::new(|| Regex::new(r"^https://[a-z\d-]+\.wikipedia.org/wiki/").unwrap());
|
||||
let wikipedia_url = header.description.as_ref().and_then(|d| {
|
||||
d.0.iter().find_map(|c| match c {
|
||||
TextComponent::Web { url, .. } if WIKIPEDIA_REGEX.is_match(url) => Some(url.to_owned()),
|
||||
_ => None,
|
||||
})
|
||||
});
|
||||
|
||||
|
|
@ -316,7 +306,7 @@ fn map_artist_page(
|
|||
id: ctx.id.to_owned(),
|
||||
name: header.title,
|
||||
header_image: header.thumbnail.into(),
|
||||
description: header.description,
|
||||
description: header.description.map(RichText::from),
|
||||
wikipedia_url,
|
||||
subscriber_count: header.subscription_button.and_then(|btn| {
|
||||
util::parse_large_numstr_or_warn(
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ use crate::{
|
|||
};
|
||||
|
||||
use super::{
|
||||
response::{self, music_item::MusicListMapper, url_endpoint::MusicPageType},
|
||||
ClientType, MapRespCtx, MapResponse, RustyPipeQuery,
|
||||
response::{self, music_item::MusicListMapper, url_endpoint::MusicPageType},
|
||||
};
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
|
|
|
|||
|
|
@ -5,18 +5,18 @@ use serde::Serialize;
|
|||
use crate::{
|
||||
error::{Error, ExtractionError},
|
||||
model::{
|
||||
paginator::{ContinuationEndpoint, Paginator},
|
||||
ArtistId, Lyrics, MusicRelated, TrackDetails, TrackItem,
|
||||
paginator::{ContinuationEndpoint, Paginator},
|
||||
},
|
||||
serializer::MapResult,
|
||||
};
|
||||
|
||||
use super::{
|
||||
ClientType, MapRespCtx, MapResponse, QBrowse, RustyPipeQuery,
|
||||
response::{
|
||||
self,
|
||||
music_item::{map_queue_item, MusicListMapper},
|
||||
music_item::{MusicListMapper, map_queue_item},
|
||||
},
|
||||
ClientType, MapRespCtx, MapResponse, QBrowse, RustyPipeQuery,
|
||||
};
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
|
|
@ -207,7 +207,7 @@ impl MapResponse<TrackDetails> for response::MusicDetails {
|
|||
response::music_item::PlaylistPanelVideo::None => None,
|
||||
})
|
||||
.ok_or(ExtractionError::InvalidData(Cow::Borrowed("no video item")))?;
|
||||
let mut track = map_queue_item(track_item, ctx.lang);
|
||||
let mut track = map_queue_item(track_item, ctx.lang)?;
|
||||
|
||||
let mut warnings = content.contents.warnings;
|
||||
warnings.append(&mut track.warnings);
|
||||
|
|
@ -254,10 +254,17 @@ impl MapResponse<Paginator<TrackItem>> for response::MusicDetails {
|
|||
.into_iter()
|
||||
.filter_map(|item| match item {
|
||||
response::music_item::PlaylistPanelVideo::PlaylistPanelVideoRenderer(item) => {
|
||||
let mut track = map_queue_item(item, ctx.lang);
|
||||
match map_queue_item(item, ctx.lang) {
|
||||
Ok(mut track) => {
|
||||
warnings.append(&mut track.warnings);
|
||||
Some(track.c)
|
||||
}
|
||||
Err(e) => {
|
||||
warnings.push(e.to_string());
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
response::music_item::PlaylistPanelVideo::None => None,
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
|
@ -393,6 +400,7 @@ mod tests {
|
|||
|
||||
#[rstest]
|
||||
#[case::mv("mv", "ZeerrnuLi5E")]
|
||||
#[case::mv_20260603("mv_20260603", "ZeerrnuLi5E")]
|
||||
#[case::track("track", "7nigXQS1Xb0")]
|
||||
fn map_music_details(#[case] name: &str, #[case] id: &str) {
|
||||
let json_path = path!(*TESTFILES / "music_details" / format!("details_{name}.json"));
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ use crate::{
|
|||
};
|
||||
|
||||
use super::{
|
||||
response::{self, music_item::MusicListMapper, url_endpoint::NavigationEndpoint},
|
||||
ClientType, MapRespCtx, MapResponse, QBrowse, QBrowseParams, RustyPipeQuery,
|
||||
response::{self, music_item::MusicListMapper, url_endpoint::NavigationEndpoint},
|
||||
};
|
||||
|
||||
impl RustyPipeQuery {
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@ use std::borrow::Cow;
|
|||
use crate::{
|
||||
client::response::music_item::MusicListMapper,
|
||||
error::{Error, ExtractionError},
|
||||
model::{traits::FromYtItem, AlbumItem, TrackItem},
|
||||
model::{AlbumItem, TrackItem, traits::FromYtItem},
|
||||
serializer::MapResult,
|
||||
};
|
||||
|
||||
use super::{response, ClientType, MapRespCtx, MapResponse, QBrowse, RustyPipeQuery};
|
||||
use super::{ClientType, MapRespCtx, MapResponse, QBrowse, RustyPipeQuery, response};
|
||||
|
||||
impl RustyPipeQuery {
|
||||
/// Get the new albums that were released on YouTube Music
|
||||
|
|
|
|||
|
|
@ -4,22 +4,22 @@ use crate::{
|
|||
client::response::url_endpoint::NavigationEndpoint,
|
||||
error::{Error, ExtractionError},
|
||||
model::{
|
||||
AlbumId, ChannelId, MusicAlbum, MusicPlaylist, TrackItem, TrackType,
|
||||
paginator::{ContinuationEndpoint, Paginator},
|
||||
richtext::RichText,
|
||||
AlbumId, ChannelId, MusicAlbum, MusicPlaylist, TrackItem, TrackType,
|
||||
},
|
||||
serializer::{text::TextComponents, MapResult},
|
||||
util::{self, dictionary, TryRemove, DOT_SEPARATOR},
|
||||
serializer::{MapResult, text::TextComponents},
|
||||
util::{self, DOT_SEPARATOR, TryRemove, dictionary},
|
||||
};
|
||||
|
||||
use self::response::url_endpoint::MusicPageType;
|
||||
|
||||
use super::{
|
||||
ClientType, MapRespCtx, MapResponse, QBrowse, RustyPipeQuery,
|
||||
response::{
|
||||
self,
|
||||
music_item::{map_album_type, map_artist_id, map_artists, MusicListMapper},
|
||||
music_item::{MusicListMapper, map_album_type, map_artist_id, map_artists},
|
||||
},
|
||||
ClientType, MapRespCtx, MapResponse, QBrowse, RustyPipeQuery,
|
||||
};
|
||||
|
||||
impl RustyPipeQuery {
|
||||
|
|
@ -211,14 +211,14 @@ impl MapResponse<MusicPlaylist> for response::MusicPlaylist {
|
|||
"no sectionListRenderer content",
|
||||
)))?;
|
||||
|
||||
if let Some(playlist_id) = shelf.playlist_id {
|
||||
if playlist_id != ctx.id {
|
||||
if let Some(playlist_id) = shelf.playlist_id
|
||||
&& playlist_id != ctx.id
|
||||
{
|
||||
return Err(ExtractionError::WrongResult(format!(
|
||||
"got wrong playlist id {}, expected {}",
|
||||
playlist_id, ctx.id
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
||||
let mut mapper = MusicListMapper::new(ctx.lang);
|
||||
mapper.map_response(shelf.contents);
|
||||
|
|
|
|||
|
|
@ -3,19 +3,19 @@ use std::{borrow::Cow, fmt::Debug};
|
|||
use serde::Serialize;
|
||||
|
||||
use crate::{
|
||||
client::response::music_item::MusicListMapper,
|
||||
client::response::{music_item::MusicListMapper, music_search::ItemSectionRendererItem},
|
||||
error::{Error, ExtractionError},
|
||||
model::{
|
||||
paginator::{ContinuationEndpoint, Paginator},
|
||||
traits::FromYtItem,
|
||||
AlbumItem, ArtistItem, MusicItem, MusicPlaylistItem, MusicSearchResult,
|
||||
MusicSearchSuggestion, TrackItem, UserItem,
|
||||
paginator::{ContinuationEndpoint, Paginator},
|
||||
traits::FromYtItem,
|
||||
},
|
||||
param::search_filter::MusicSearchFilter,
|
||||
serializer::MapResult,
|
||||
};
|
||||
|
||||
use super::{response, ClientType, MapRespCtx, MapResponse, RustyPipeQuery};
|
||||
use super::{ClientType, MapRespCtx, MapResponse, RustyPipeQuery, response};
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
|
@ -46,10 +46,14 @@ impl RustyPipeQuery {
|
|||
query,
|
||||
params: filter.map(MusicSearchFilter::params),
|
||||
};
|
||||
let op = match filter {
|
||||
Some(op) => Cow::Owned(format!("music_search_{op:?}").to_ascii_lowercase()),
|
||||
None => Cow::Borrowed("music_search"),
|
||||
};
|
||||
|
||||
self.execute_request::<response::MusicSearch, _, _>(
|
||||
ClientType::DesktopMusic,
|
||||
"music_search_tracks",
|
||||
&op,
|
||||
query,
|
||||
"search",
|
||||
&request_body,
|
||||
|
|
@ -179,9 +183,22 @@ impl<T: FromYtItem> MapResponse<MusicSearchResult<T>> for response::MusicSearch
|
|||
response::music_search::ItemSection::MusicCardShelfRenderer(card) => {
|
||||
mapper.map_card(card);
|
||||
}
|
||||
response::music_search::ItemSection::ItemSectionRenderer { contents } => {
|
||||
if let Some(corrected) = contents.into_iter().next() {
|
||||
corrected_query = Some(corrected.showing_results_for_renderer.corrected_query);
|
||||
response::music_search::ItemSection::ItemSectionRenderer { mut contents } => {
|
||||
mapper.add_warnings(&mut contents.warnings);
|
||||
for item in contents.c {
|
||||
match item {
|
||||
ItemSectionRendererItem::MusicResponsiveListItemRenderer(
|
||||
list_music_item,
|
||||
) => {
|
||||
mapper.add_list_item(list_music_item);
|
||||
}
|
||||
ItemSectionRendererItem::ShowingResultsForRenderer(
|
||||
showing_results_for_renderer,
|
||||
) => {
|
||||
corrected_query = Some(showing_results_for_renderer.corrected_query);
|
||||
}
|
||||
ItemSectionRendererItem::None => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
response::music_search::ItemSection::None => {}
|
||||
|
|
@ -251,7 +268,7 @@ mod tests {
|
|||
use rstest::rstest;
|
||||
|
||||
use crate::{
|
||||
client::{response, MapRespCtx, MapResponse},
|
||||
client::{MapRespCtx, MapResponse, response},
|
||||
model::{
|
||||
AlbumItem, ArtistItem, MusicItem, MusicPlaylistItem, MusicSearchResult,
|
||||
MusicSearchSuggestion, TrackItem,
|
||||
|
|
@ -266,6 +283,7 @@ mod tests {
|
|||
#[case::radio("radio")]
|
||||
#[case::artist("artist")]
|
||||
#[case::live("live")]
|
||||
#[case::artist_20260603("artist_20260603")]
|
||||
fn map_music_search_main(#[case] name: &str) {
|
||||
let json_path = path!(*TESTFILES / "music_search" / format!("main_{name}.json"));
|
||||
let json_file = File::open(json_path).unwrap();
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@ use std::fmt::Debug;
|
|||
|
||||
use crate::{
|
||||
client::{
|
||||
response::{self, music_item::MusicListMapper},
|
||||
ClientType, MapResponse, QBrowseParams, RustyPipeQuery,
|
||||
response::{self, music_item::MusicListMapper},
|
||||
},
|
||||
error::{Error, ExtractionError},
|
||||
model::{
|
||||
paginator::{ContinuationEndpoint, Paginator},
|
||||
AlbumItem, ArtistItem, HistoryItem, MusicPlaylist, MusicPlaylistItem, TrackItem,
|
||||
paginator::{ContinuationEndpoint, Paginator},
|
||||
},
|
||||
serializer::MapResult,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@ use std::fmt::Debug;
|
|||
|
||||
use crate::error::{Error, ExtractionError};
|
||||
use crate::model::{
|
||||
Comment, MusicItem, YouTubeItem,
|
||||
paginator::{ContinuationEndpoint, Paginator},
|
||||
traits::FromYtItem,
|
||||
Comment, MusicItem, YouTubeItem,
|
||||
};
|
||||
use crate::serializer::MapResult;
|
||||
|
||||
|
|
@ -12,11 +12,11 @@ use crate::serializer::MapResult;
|
|||
use crate::model::{HistoryItem, TrackItem, VideoItem};
|
||||
|
||||
use super::response::{
|
||||
music_item::{map_queue_item, MusicListMapper, PlaylistPanelVideo},
|
||||
YouTubeListItem,
|
||||
music_item::{MusicListMapper, PlaylistPanelVideo, map_queue_item},
|
||||
};
|
||||
use super::{
|
||||
response, ClientType, MapRespCtx, MapRespOptions, MapResponse, QContinuation, RustyPipeQuery,
|
||||
ClientType, MapRespCtx, MapRespOptions, MapResponse, QContinuation, RustyPipeQuery, response,
|
||||
};
|
||||
|
||||
impl RustyPipeQuery {
|
||||
|
|
@ -189,10 +189,16 @@ impl MapResponse<Paginator<MusicItem>> for response::MusicContinuation {
|
|||
mapper.add_warnings(&mut panel.contents.warnings);
|
||||
panel.contents.c.into_iter().for_each(|item| {
|
||||
if let PlaylistPanelVideo::PlaylistPanelVideoRenderer(item) = item {
|
||||
let mut track = map_queue_item(item, ctx.lang);
|
||||
match map_queue_item(item, ctx.lang) {
|
||||
Ok(mut track) => {
|
||||
mapper.add_item(MusicItem::Track(track.c));
|
||||
mapper.add_warnings(&mut track.warnings);
|
||||
}
|
||||
Err(e) => {
|
||||
mapper.add_warning(e.to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
Some(response::music_item::ContinuationContents::GridContinuation(mut grid)) => {
|
||||
|
|
@ -249,11 +255,9 @@ impl MapResponse<Paginator<HistoryItem<VideoItem>>> for response::Continuation {
|
|||
&mut map_res,
|
||||
);
|
||||
}
|
||||
response::YouTubeListItem::ContinuationItemRenderer(ep) => {
|
||||
if ctoken.is_none() {
|
||||
response::YouTubeListItem::ContinuationItemRenderer(ep) if ctoken.is_none() => {
|
||||
ctoken = ep.continuation_endpoint.into_token();
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
use std::{
|
||||
borrow::Cow,
|
||||
collections::{BTreeMap, HashMap, HashSet},
|
||||
collections::{BTreeMap, HashMap},
|
||||
fmt::Debug,
|
||||
};
|
||||
|
||||
|
|
@ -12,21 +12,21 @@ use url::Url;
|
|||
|
||||
use crate::{
|
||||
deobfuscate::{DeobfData, Deobfuscator},
|
||||
error::{internal::DeobfError, AuthError, Error, ExtractionError, UnavailabilityReason},
|
||||
error::{AuthError, DeobfError, Error, ExtractionError, UnavailabilityReason},
|
||||
model::{
|
||||
traits::QualityOrd, AudioCodec, AudioFormat, AudioStream, AudioTrack, DrmLicense,
|
||||
DrmSystem, Frameset, Subtitle, VideoCodec, VideoFormat, VideoPlayer, VideoPlayerDetails,
|
||||
VideoPlayerDrm, VideoStream,
|
||||
AudioCodec, AudioFormat, AudioStream, AudioTrack, DrmLicense, DrmSystem, Frameset,
|
||||
Subtitle, VideoCodec, VideoFormat, VideoPlayer, VideoPlayerDetails, VideoPlayerDrm,
|
||||
VideoStream, traits::QualityOrd,
|
||||
},
|
||||
util,
|
||||
};
|
||||
|
||||
use super::{
|
||||
ClientType, MapRespCtx, MapRespOptions, MapResponse, MapResult, PoToken, RustyPipeQuery,
|
||||
response::{
|
||||
self,
|
||||
player::{self, Format},
|
||||
},
|
||||
ClientType, MapRespCtx, MapRespOptions, MapResponse, MapResult, PoToken, RustyPipeQuery,
|
||||
};
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
|
|
@ -106,7 +106,6 @@ impl RustyPipeQuery {
|
|||
let mut last_e = None;
|
||||
let mut query = Cow::Borrowed(self);
|
||||
let mut clients_iter = clients.iter().peekable();
|
||||
let mut failed_clients = HashSet::new();
|
||||
|
||||
while let Some(client) = clients_iter.next() {
|
||||
if query.opts.auth == Some(true) && !self.auth_enabled(*client) {
|
||||
|
|
@ -116,9 +115,6 @@ impl RustyPipeQuery {
|
|||
}
|
||||
continue;
|
||||
}
|
||||
if failed_clients.contains(client) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let res = query.player_from_client(video_id, *client).await;
|
||||
match res {
|
||||
|
|
@ -131,10 +127,11 @@ impl RustyPipeQuery {
|
|||
return Err(Error::Extraction(e));
|
||||
}
|
||||
if let Some(next_client) = clients_iter.peek() {
|
||||
tracing::warn!("error fetching player with {client:?} client: {e}; retrying with {next_client:?} client");
|
||||
tracing::warn!(
|
||||
"error fetching player with {client:?} client: {e}; retrying with {next_client:?} client"
|
||||
);
|
||||
}
|
||||
last_e = Some(Error::Extraction(e));
|
||||
failed_clients.insert(*client);
|
||||
}
|
||||
Err(e) => return Err(e),
|
||||
}
|
||||
|
|
@ -191,10 +188,10 @@ impl RustyPipeQuery {
|
|||
}
|
||||
let video_id = video_id.as_ref();
|
||||
|
||||
let (deobf, player_po) = tokio::try_join!(
|
||||
let (deobf, player_po, visitor_data) = tokio::try_join!(
|
||||
async {
|
||||
if client_type.needs_deobf() {
|
||||
Ok::<_, Error>(Some(self.client.get_deobf_data().await?))
|
||||
Ok::<_, Error>(self.client.get_deobf_data().await?)
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
|
|
@ -205,7 +202,14 @@ impl RustyPipeQuery {
|
|||
} else {
|
||||
Ok(PlayerPoToken::default())
|
||||
}
|
||||
},
|
||||
async {
|
||||
if client_type.needs_visitor_data() {
|
||||
Ok::<_, Error>(Some(self.get_visitor_data(false).await?))
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
},
|
||||
)?;
|
||||
|
||||
let playback_context = deobf.as_ref().map(|deobf| QPlaybackContext {
|
||||
|
|
@ -230,7 +234,10 @@ impl RustyPipeQuery {
|
|||
"player",
|
||||
&request_body,
|
||||
MapRespOptions {
|
||||
visitor_data: player_po.visitor_data.as_deref(),
|
||||
visitor_data: player_po
|
||||
.visitor_data
|
||||
.as_deref()
|
||||
.or(visitor_data.as_deref()),
|
||||
deobf: deobf.as_ref(),
|
||||
unlocalized: true,
|
||||
session_po_token: player_po.session_po_token,
|
||||
|
|
@ -245,10 +252,12 @@ impl RustyPipeQuery {
|
|||
/// The order may change in the future in case YouTube applies changes to their
|
||||
/// platform that disable a client or make it less reliable.
|
||||
pub fn player_client_order(&self) -> &'static [ClientType] {
|
||||
if self.client.inner.botguard.is_some() {
|
||||
&[ClientType::Desktop, ClientType::Ios, ClientType::Tv]
|
||||
if self.client.inner.botguard.is_some() && Deobfuscator::ENABLED {
|
||||
&[ClientType::Tv, ClientType::AndroidVr, ClientType::Desktop]
|
||||
} else if Deobfuscator::ENABLED {
|
||||
&[ClientType::Tv, ClientType::AndroidVr]
|
||||
} else {
|
||||
&[ClientType::Ios, ClientType::Tv]
|
||||
&[ClientType::AndroidVr]
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -300,7 +309,8 @@ impl MapResponse<VideoPlayer> for response::Player {
|
|||
// Check playability status
|
||||
let is_live = match self.playability_status {
|
||||
response::player::PlayabilityStatus::Ok { live_streamability } => {
|
||||
live_streamability.is_some()
|
||||
let ls = live_streamability.live_streamability_renderer;
|
||||
ls.broadcast_id.is_some() && !ls.display_endscreen
|
||||
}
|
||||
response::player::PlayabilityStatus::Unplayable {
|
||||
reason,
|
||||
|
|
@ -387,21 +397,6 @@ impl MapResponse<VideoPlayer> for response::Player {
|
|||
video_details.video_id, ctx.id
|
||||
)));
|
||||
}
|
||||
// Sometimes YouTube Desktop does not output any URLs for adaptive streams.
|
||||
// Since this is currently rare, it is best to retry the request in this case.
|
||||
if !is_live
|
||||
&& !streaming_data.adaptive_formats.c.is_empty()
|
||||
&& streaming_data
|
||||
.adaptive_formats
|
||||
.c
|
||||
.iter()
|
||||
.all(|f| f.url.is_none() && f.signature_cipher.is_none())
|
||||
{
|
||||
return Err(ExtractionError::Unavailable {
|
||||
reason: UnavailabilityReason::TryAgain,
|
||||
msg: "no adaptive stream URLs".to_owned(),
|
||||
});
|
||||
}
|
||||
|
||||
let video_info = VideoPlayerDetails {
|
||||
id: video_details.video_id,
|
||||
|
|
@ -417,11 +412,27 @@ impl MapResponse<VideoPlayer> for response::Player {
|
|||
is_live_content: video_details.is_live_content,
|
||||
};
|
||||
|
||||
let streams = if !is_live {
|
||||
let mut mapper = StreamsMapper::new(
|
||||
ctx.deobf,
|
||||
ctx.session_po_token.as_ref().map(|t| t.po_token.as_str()),
|
||||
)?;
|
||||
|
||||
let abr_streaming_url = match &streaming_data.server_abr_streaming_url {
|
||||
Some(url) => match mapper.map_url_abr(url) {
|
||||
Ok(res) => Some(res),
|
||||
Err(e) => {
|
||||
warnings.push(format!("could not map abr_streaming_url: {e}"));
|
||||
None
|
||||
}
|
||||
},
|
||||
None => None,
|
||||
};
|
||||
let abr_ustreamer_config = self.player_config.media_common_config.map(|cfg| {
|
||||
cfg.media_ustreamer_request_config
|
||||
.video_playback_ustreamer_config
|
||||
});
|
||||
|
||||
let streams = if !is_live {
|
||||
mapper.map_streams(streaming_data.formats);
|
||||
mapper.map_streams(streaming_data.adaptive_formats);
|
||||
let mut res = mapper.output()?;
|
||||
|
|
@ -530,6 +541,12 @@ impl MapResponse<VideoPlayer> for response::Player {
|
|||
valid_until,
|
||||
hls_manifest_url: streaming_data.hls_manifest_url,
|
||||
dash_manifest_url: streaming_data.dash_manifest_url,
|
||||
abr_streaming_url,
|
||||
abr_ustreamer_config,
|
||||
po_token: ctx
|
||||
.session_po_token
|
||||
.as_ref()
|
||||
.map(|pot| pot.po_token.to_owned()),
|
||||
preview_frames,
|
||||
drm,
|
||||
client_type: ctx.client_type,
|
||||
|
|
@ -568,8 +585,8 @@ impl<'a> StreamsMapper<'a> {
|
|||
deobf_data: Option<&DeobfData>,
|
||||
session_po_token: Option<&'a str>,
|
||||
) -> Result<Self, DeobfError> {
|
||||
let deobf = match deobf_data {
|
||||
Some(deobf_data) => Some(Deobfuscator::new(deobf_data)?),
|
||||
let deobf = match deobf_data.and_then(|d| d.script.as_deref()) {
|
||||
Some(script) => Some(Deobfuscator::new(script)?),
|
||||
None => None,
|
||||
};
|
||||
|
||||
|
|
@ -588,10 +605,15 @@ impl<'a> StreamsMapper<'a> {
|
|||
self.warnings.append(&mut streams.warnings);
|
||||
|
||||
let map_e = |m: &mut Self, e: ExtractionError| {
|
||||
if !matches!(
|
||||
e,
|
||||
ExtractionError::Deobfuscation(DeobfError::Disabled | DeobfError::NoInstance)
|
||||
) {
|
||||
m.warnings.push(e.to_string());
|
||||
if m.first_err.is_none() {
|
||||
m.first_err = Some(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for f in streams.c {
|
||||
|
|
@ -623,11 +645,10 @@ impl<'a> StreamsMapper<'a> {
|
|||
// If we did not extract any streams and there were mapping errors, fail with the first error
|
||||
if self.streams.video_streams.is_empty()
|
||||
&& (self.streams.video_only_streams.is_empty() || self.streams.audio_streams.is_empty())
|
||||
&& let Some(e) = self.first_err
|
||||
{
|
||||
if let Some(e) = self.first_err {
|
||||
return Err(e);
|
||||
}
|
||||
}
|
||||
|
||||
self.streams.video_streams.sort_by(QualityOrd::quality_cmp);
|
||||
self.streams
|
||||
|
|
@ -642,9 +663,11 @@ impl<'a> StreamsMapper<'a> {
|
|||
}
|
||||
|
||||
fn deobf(&self) -> Result<&Deobfuscator, DeobfError> {
|
||||
self.deobf
|
||||
.as_ref()
|
||||
.ok_or(DeobfError::Other("no deobfuscator".into()))
|
||||
self.deobf.as_ref().ok_or(if Deobfuscator::ENABLED {
|
||||
DeobfError::NoInstance
|
||||
} else {
|
||||
DeobfError::Disabled
|
||||
})
|
||||
}
|
||||
|
||||
fn cipher_to_url_params(
|
||||
|
|
@ -659,13 +682,18 @@ impl<'a> StreamsMapper<'a> {
|
|||
// `sp`: Signature parameter
|
||||
// `url`: URL that is missing the signature parameter
|
||||
|
||||
let sig = params.get("s").ok_or(DeobfError::Extraction("s param"))?;
|
||||
let sp = params.get("sp").ok_or(DeobfError::Extraction("sp param"))?;
|
||||
let sig = params
|
||||
.get("s")
|
||||
.ok_or(DeobfError::Extraction("s param".into()))?;
|
||||
let sp = params
|
||||
.get("sp")
|
||||
.ok_or(DeobfError::Extraction("sp param".into()))?;
|
||||
let raw_url = params
|
||||
.get("url")
|
||||
.ok_or(DeobfError::Extraction("no url param"))?;
|
||||
let (url_base, mut url_params) =
|
||||
util::url_to_params(raw_url).or(Err(DeobfError::Extraction("url params")))?;
|
||||
.ok_or(DeobfError::Extraction("no url param".into()))?;
|
||||
let (url_base, mut url_params) = util::url_to_params(raw_url).or(Err(
|
||||
DeobfError::Extraction("cannot split url to params".into()),
|
||||
))?;
|
||||
|
||||
let deobf_sig = self.deobf()?.deobfuscate_sig(sig)?;
|
||||
url_params.insert(sp.to_string(), deobf_sig);
|
||||
|
|
@ -694,23 +722,23 @@ impl<'a> StreamsMapper<'a> {
|
|||
url: &Option<String>,
|
||||
signature_cipher: &Option<String>,
|
||||
) -> Result<UrlMapRes, ExtractionError> {
|
||||
let (url_base, mut url_params) =
|
||||
match url {
|
||||
let (url_base, mut url_params) = match url {
|
||||
Some(url) => util::url_to_params(url).map_err(|_| {
|
||||
ExtractionError::InvalidData(format!("Could not parse url `{url}`").into())
|
||||
}),
|
||||
None => match signature_cipher {
|
||||
Some(signature_cipher) => {
|
||||
self.cipher_to_url_params(signature_cipher).map_err(|e| {
|
||||
if matches!(e, DeobfError::Extraction(_)) {
|
||||
ExtractionError::InvalidData(
|
||||
format!("Could not deobfuscate signatureCipher `{signature_cipher}`: {e}")
|
||||
.into(),
|
||||
)
|
||||
.into())
|
||||
} else {
|
||||
ExtractionError::Deobfuscation(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
None => Err(ExtractionError::InvalidData(
|
||||
"stream contained neither url or cipher".into(),
|
||||
)),
|
||||
None => return Ok(UrlMapRes::default()),
|
||||
},
|
||||
}?;
|
||||
|
||||
|
|
@ -723,11 +751,21 @@ impl<'a> StreamsMapper<'a> {
|
|||
.map_err(|_| ExtractionError::InvalidData("could not combine URL".into()))?;
|
||||
|
||||
Ok(UrlMapRes {
|
||||
url: url.to_string(),
|
||||
url: Some(url.to_string()),
|
||||
xtags: url_params.get("xtags").cloned(),
|
||||
})
|
||||
}
|
||||
|
||||
fn map_url_abr(&mut self, url: &str) -> Result<String, ExtractionError> {
|
||||
let (url_base, mut url_params) = util::url_to_params(url).map_err(|_| {
|
||||
ExtractionError::InvalidData(format!("Could not parse url `{url}`").into())
|
||||
})?;
|
||||
self.deobf_nsig(&mut url_params)?;
|
||||
let url = Url::parse_with_params(url_base.as_str(), url_params.iter())
|
||||
.map_err(|_| ExtractionError::InvalidData("could not combine URL".into()))?;
|
||||
Ok(url.to_string())
|
||||
}
|
||||
|
||||
fn map_video_stream(&mut self, f: player::Format) -> Result<VideoStream, ExtractionError> {
|
||||
let Some((mtype, codecs)) = parse_mime(&f.mime_type) else {
|
||||
return Err(ExtractionError::InvalidData(
|
||||
|
|
@ -751,6 +789,7 @@ impl<'a> StreamsMapper<'a> {
|
|||
bitrate: f.bitrate,
|
||||
average_bitrate: f.average_bitrate.unwrap_or(f.bitrate),
|
||||
size: f.content_length,
|
||||
last_modified: f.last_modified,
|
||||
index_range: f.index_range,
|
||||
init_range: f.init_range,
|
||||
duration_ms: f.approx_duration_ms,
|
||||
|
|
@ -765,6 +804,7 @@ impl<'a> StreamsMapper<'a> {
|
|||
format,
|
||||
codec: get_video_codec(codecs),
|
||||
mime: f.mime_type,
|
||||
xtags: f.xtags,
|
||||
drm_track_type: f.drm_track_type.map(|t| t.into()),
|
||||
drm_systems: f.drm_families.into_iter().map(|t| t.into()).collect(),
|
||||
})
|
||||
|
|
@ -795,6 +835,7 @@ impl<'a> StreamsMapper<'a> {
|
|||
format!("no audio content length. itag: {}", f.itag).into(),
|
||||
)
|
||||
})?,
|
||||
last_modified: f.last_modified,
|
||||
index_range: f.index_range,
|
||||
init_range: f.init_range,
|
||||
duration_ms: f.approx_duration_ms,
|
||||
|
|
@ -803,9 +844,11 @@ impl<'a> StreamsMapper<'a> {
|
|||
mime: f.mime_type,
|
||||
channels: f.audio_channels,
|
||||
loudness_db: f.loudness_db,
|
||||
is_drc: f.is_drc,
|
||||
track: f
|
||||
.audio_track
|
||||
.map(|t| self.map_audio_track(t, map_res.xtags)),
|
||||
.map(|t| self.map_audio_track(t, map_res.xtags.as_deref())),
|
||||
xtags: f.xtags,
|
||||
drm_track_type: f.drm_track_type.map(|t| t.into()),
|
||||
drm_systems: f.drm_families.into_iter().map(|t| t.into()).collect(),
|
||||
})
|
||||
|
|
@ -814,7 +857,7 @@ impl<'a> StreamsMapper<'a> {
|
|||
fn map_audio_track(
|
||||
&mut self,
|
||||
track: response::player::AudioTrack,
|
||||
xtags: Option<String>,
|
||||
xtags: Option<&str>,
|
||||
) -> AudioTrack {
|
||||
let mut lang = None;
|
||||
let mut track_type = None;
|
||||
|
|
@ -850,8 +893,9 @@ impl<'a> StreamsMapper<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
struct UrlMapRes {
|
||||
url: String,
|
||||
url: Option<String>,
|
||||
xtags: Option<String>,
|
||||
}
|
||||
|
||||
|
|
@ -957,13 +1001,12 @@ mod tests {
|
|||
use time::UtcOffset;
|
||||
|
||||
use super::*;
|
||||
use crate::{deobfuscate::DeobfData, param::Language, util::tests::TESTFILES};
|
||||
use crate::{param::Language, util::tests::TESTFILES};
|
||||
|
||||
static DEOBF_DATA: Lazy<DeobfData> = Lazy::new(|| {
|
||||
DeobfData {
|
||||
js_url: "https://www.youtube.com/s/player/c8b8a173/player_ias.vflset/en_US/base.js".to_owned(),
|
||||
sig_fn: "var oB={B4:function(a){a.reverse()},xm:function(a,b){a.splice(0,b)},dC:function(a,b){var c=a[0];a[0]=a[b%a.length];a[b%a.length]=c}};var Vva=function(a){a=a.split(\"\");oB.dC(a,42);oB.xm(a,3);oB.dC(a,48);oB.B4(a,68);return a.join(\"\")};var deobf_sig=Vva;".to_owned(),
|
||||
nsig_fn: "Ska=function(a){var b=a.split(\"\"),c=[-1505243983,function(d,e){e=(e%d.length+d.length)%d.length;d.splice(-e).reverse().forEach(function(f){d.unshift(f)})},\n-1692381986,function(d,e){e=(e%d.length+d.length)%d.length;var f=d[0];d[0]=d[e];d[e]=f},\n-262444939,\"unshift\",function(d){for(var e=d.length;e;)d.push(d.splice(--e,1)[0])},\n1201502951,-546377604,-504264123,-1978377336,1042456724,function(d,e){for(e=(e%d.length+d.length)%d.length;e--;)d.unshift(d.pop())},\n711986897,406699922,-1842537993,-1678108293,1803491779,1671716087,12778705,-718839990,null,null,-1617525823,342523552,-1338406651,-399705108,-696713950,b,function(d,e){e=(e%d.length+d.length)%d.length;d.splice(0,1,d.splice(e,1,d[0])[0])},\nfunction(d,e){e=(e%d.length+d.length)%d.length;d.splice(e,1)},\n-980602034,356396192,null,-1617525823,function(d,e,f){var h=f.length;d.forEach(function(l,m,n){this.push(n[m]=f[(f.indexOf(l)-f.indexOf(this[m])+m+h--)%f.length])},e.split(\"\"))},\n-1029864222,-641353250,-1681901809,-1391247867,1707415199,-1957855835,b,function(){for(var d=64,e=[];++d-e.length-32;)switch(d){case 58:d=96;continue;case 91:d=44;break;case 65:d=47;continue;case 46:d=153;case 123:d-=58;default:e.push(String.fromCharCode(d))}return e},\n-1936558978,-1505243983,function(d){d.reverse()},\n1296889058,-1813915420,-943019300,function(d,e,f){var h=f.length;d.forEach(function(l,m,n){this.push(n[m]=f[(f.indexOf(l)-f.indexOf(this[m])+m+h--)%f.length])},e.split(\"\"))},\n\"join\",b,-2061642263];c[21]=c;c[22]=c;c[33]=c;try{c[3](c[33],c[9]),c[29](c[22],c[25]),c[29](c[22],c[19]),c[29](c[33],c[17]),c[29](c[21],c[2]),c[29](c[42],c[10]),c[1](c[52],c[40]),c[12](c[28],c[8]),c[29](c[21],c[45]),c[1](c[21],c[48]),c[44](c[26]),c[39](c[5],c[2]),c[31](c[53],c[16]),c[30](c[29],c[8]),c[51](c[29],c[6],c[44]()),c[4](c[43],c[1]),c[2](c[23],c[42]),c[2](c[0],c[46]),c[38](c[14],c[52]),c[32](c[5]),c[26](c[29],c[46]),c[26](c[5],c[13]),c[28](c[1],c[37]),c[26](c[31],c[13]),c[26](c[1],c[34]),\nc[46](c[1],c[32],c[40]()),c[26](c[50],c[44]),c[17](c[50],c[51]),c[0](c[3],c[24]),c[32](c[13]),c[43](c[3],c[51]),c[0](c[34],c[17]),c[16](c[45],c[53]),c[29](c[44],c[13]),c[42](c[1],c[50]),c[47](c[22],c[53]),c[37](c[22]),c[13](c[52],c[21]),c[6](c[43],c[34]),c[6](c[31],c[46])}catch(d){return\"enhanced_except_gZYB_un-_w8_\"+a}return b.join(\"\")};var deobf_nsig=Ska;".to_owned(),
|
||||
script: Some("var oB={B4:function(a){a.reverse()},xm:function(a,b){a.splice(0,b)},dC:function(a,b){var c=a[0];a[0]=a[b%a.length];a[b%a.length]=c}};var Vva=function(a){a=a.split(\"\");oB.dC(a,42);oB.xm(a,3);oB.dC(a,48);oB.B4(a,68);return a.join(\"\")};var deobf_sig=Vva; var Ska=function(a){var b=a.split(\"\"),c=[-1505243983,function(d,e){e=(e%d.length+d.length)%d.length;d.splice(-e).reverse().forEach(function(f){d.unshift(f)})},\n-1692381986,function(d,e){e=(e%d.length+d.length)%d.length;var f=d[0];d[0]=d[e];d[e]=f},\n-262444939,\"unshift\",function(d){for(var e=d.length;e;)d.push(d.splice(--e,1)[0])},\n1201502951,-546377604,-504264123,-1978377336,1042456724,function(d,e){for(e=(e%d.length+d.length)%d.length;e--;)d.unshift(d.pop())},\n711986897,406699922,-1842537993,-1678108293,1803491779,1671716087,12778705,-718839990,null,null,-1617525823,342523552,-1338406651,-399705108,-696713950,b,function(d,e){e=(e%d.length+d.length)%d.length;d.splice(0,1,d.splice(e,1,d[0])[0])},\nfunction(d,e){e=(e%d.length+d.length)%d.length;d.splice(e,1)},\n-980602034,356396192,null,-1617525823,function(d,e,f){var h=f.length;d.forEach(function(l,m,n){this.push(n[m]=f[(f.indexOf(l)-f.indexOf(this[m])+m+h--)%f.length])},e.split(\"\"))},\n-1029864222,-641353250,-1681901809,-1391247867,1707415199,-1957855835,b,function(){for(var d=64,e=[];++d-e.length-32;)switch(d){case 58:d=96;continue;case 91:d=44;break;case 65:d=47;continue;case 46:d=153;case 123:d-=58;default:e.push(String.fromCharCode(d))}return e},\n-1936558978,-1505243983,function(d){d.reverse()},\n1296889058,-1813915420,-943019300,function(d,e,f){var h=f.length;d.forEach(function(l,m,n){this.push(n[m]=f[(f.indexOf(l)-f.indexOf(this[m])+m+h--)%f.length])},e.split(\"\"))},\n\"join\",b,-2061642263];c[21]=c;c[22]=c;c[33]=c;try{c[3](c[33],c[9]),c[29](c[22],c[25]),c[29](c[22],c[19]),c[29](c[33],c[17]),c[29](c[21],c[2]),c[29](c[42],c[10]),c[1](c[52],c[40]),c[12](c[28],c[8]),c[29](c[21],c[45]),c[1](c[21],c[48]),c[44](c[26]),c[39](c[5],c[2]),c[31](c[53],c[16]),c[30](c[29],c[8]),c[51](c[29],c[6],c[44]()),c[4](c[43],c[1]),c[2](c[23],c[42]),c[2](c[0],c[46]),c[38](c[14],c[52]),c[32](c[5]),c[26](c[29],c[46]),c[26](c[5],c[13]),c[28](c[1],c[37]),c[26](c[31],c[13]),c[26](c[1],c[34]),\nc[46](c[1],c[32],c[40]()),c[26](c[50],c[44]),c[17](c[50],c[51]),c[0](c[3],c[24]),c[32](c[13]),c[43](c[3],c[51]),c[0](c[34],c[17]),c[16](c[45],c[53]),c[29](c[44],c[13]),c[42](c[1],c[50]),c[47](c[22],c[53]),c[37](c[22]),c[13](c[52],c[21]),c[6](c[43],c[34]),c[6](c[31],c[46])}catch(d){return\"enhanced_except_gZYB_un-_w8_\"+a}return b.join(\"\")};var deobf_nsig=Ska;".to_owned()),
|
||||
sts: "19201".to_owned(),
|
||||
}
|
||||
});
|
||||
|
|
@ -1013,8 +1056,12 @@ mod tests {
|
|||
let url = mapper
|
||||
.map_url(&None, &Some(signature_cipher.to_owned()))
|
||||
.unwrap()
|
||||
.url;
|
||||
.url
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(url, "https://rr5---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=3781277&dur=229.301&ei=vb7nYvH5BMK8gAfBj7ToBQ&expire=1659376413&fexp=24001373%2C24007246&fvip=5&gir=yes&id=o-AB_BABwrXZJN428ZwDxq5ScPn2AbcGODnRlTVhCQ3mj2&initcwndbps=1588750&ip=2003%3Ade%3Aaf06%3A6300%3Ac750%3A1b77%3Ac74a%3A80e3&itag=251&keepalive=yes&lmt=1655510291473933&lsig=AG3C_xAwRQIgCKCGJ1iu4wlaGXy3jcJyU3inh9dr1FIfqYOZEG_MdmACIQCbungkQYFk7EhD6K2YvLaHFMjKOFWjw001_tLb0lPDtg%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=hH&mime=audio%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5ednsl&ms=au%2Conr&mt=1659354538&mv=m&mvi=5&n=XzXGSfGusw6OCQ&ns=b_Mq_qlTFcSGlG9RpwpM9xQH&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAPIsKd7-xi4xVHEC9gb__dU4hzfzsHEj9ytd3nt0gEceAiACJWBcw-wFEq9qir35bwKHJZxtQ9mOL7SKiVkLQNDa6A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khi831z8dTejFIRCvCEwx_6romtM&txp=4532434&vprv=1");
|
||||
assert_eq!(
|
||||
url,
|
||||
"https://rr5---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=3781277&dur=229.301&ei=vb7nYvH5BMK8gAfBj7ToBQ&expire=1659376413&fexp=24001373%2C24007246&fvip=5&gir=yes&id=o-AB_BABwrXZJN428ZwDxq5ScPn2AbcGODnRlTVhCQ3mj2&initcwndbps=1588750&ip=2003%3Ade%3Aaf06%3A6300%3Ac750%3A1b77%3Ac74a%3A80e3&itag=251&keepalive=yes&lmt=1655510291473933&lsig=AG3C_xAwRQIgCKCGJ1iu4wlaGXy3jcJyU3inh9dr1FIfqYOZEG_MdmACIQCbungkQYFk7EhD6K2YvLaHFMjKOFWjw001_tLb0lPDtg%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=hH&mime=audio%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5ednsl&ms=au%2Conr&mt=1659354538&mv=m&mvi=5&n=XzXGSfGusw6OCQ&ns=b_Mq_qlTFcSGlG9RpwpM9xQH&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAPIsKd7-xi4xVHEC9gb__dU4hzfzsHEj9ytd3nt0gEceAiACJWBcw-wFEq9qir35bwKHJZxtQ9mOL7SKiVkLQNDa6A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khi831z8dTejFIRCvCEwx_6romtM&txp=4532434&vprv=1"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,15 +5,15 @@ use time::OffsetDateTime;
|
|||
use crate::{
|
||||
error::{Error, ExtractionError},
|
||||
model::{
|
||||
ChannelId, Playlist, VideoItem,
|
||||
paginator::{ContinuationEndpoint, Paginator},
|
||||
richtext::RichText,
|
||||
ChannelId, Playlist, VideoItem,
|
||||
},
|
||||
serializer::text::{TextComponent, TextComponents},
|
||||
util::{self, dictionary, timeago, TryRemove},
|
||||
util::{self, TryRemove, dictionary, timeago},
|
||||
};
|
||||
|
||||
use super::{response, ClientType, MapRespCtx, MapResponse, MapResult, QBrowse, RustyPipeQuery};
|
||||
use super::{ClientType, MapRespCtx, MapResponse, MapResult, QBrowse, RustyPipeQuery, response};
|
||||
|
||||
impl RustyPipeQuery {
|
||||
/// Get a YouTube playlist
|
||||
|
|
@ -59,14 +59,8 @@ impl MapResponse<Playlist> for response::Playlist {
|
|||
"sectionListRenderer empty",
|
||||
)))?
|
||||
.item_section_renderer
|
||||
.contents
|
||||
.into_iter()
|
||||
.next()
|
||||
.ok_or(ExtractionError::InvalidData(Cow::Borrowed(
|
||||
"itemSectionRenderer empty",
|
||||
)))?
|
||||
.playlist_video_list_renderer
|
||||
.contents;
|
||||
// dbg!(&ci.warnings);
|
||||
|
||||
let mut mapper = response::YouTubeListMapper::<VideoItem>::new(ctx.lang);
|
||||
mapper.map_response(video_items);
|
||||
|
|
@ -258,6 +252,8 @@ mod tests {
|
|||
#[case::live("live", "UULVvqRdlKsE5Q8mf8YXbdIJLw")]
|
||||
#[case::pageheader("20241011_pageheader", "PLT2w2oBf1TZKyvY_M6JsASs73m-wjLzH5")]
|
||||
#[case::cmdexecutor("20250316_cmdexecutor", "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi")]
|
||||
#[case::featuring("featuring", "PLLsua0MU5Y8JZZaDko8Ewv95Tv98A36ee")]
|
||||
#[case::noplrenderer("20260610_noplrenderer", "PLbZIPy20-1pN7mqjckepWF78ndb6ci_qi")]
|
||||
fn map_playlist_data(#[case] name: &str, #[case] id: &str) {
|
||||
let json_path = path!(*TESTFILES / "playlist" / format!("playlist_{name}.json"));
|
||||
let json_file = File::open(json_path).unwrap();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
use serde::Deserialize;
|
||||
use serde_with::{rust::deserialize_ignore_any, serde_as, DefaultOnError, VecSkipError};
|
||||
use serde_with::{DefaultOnError, VecSkipError, rust::deserialize_ignore_any, serde_as};
|
||||
|
||||
use super::{
|
||||
video_item::YouTubeListRenderer, Alert, AttachmentRun, AvatarViewModel, ChannelBadge,
|
||||
ContentRenderer, ContentsRenderer, ContinuationActionWrap, ImageView,
|
||||
PageHeaderRendererContent, PhMetadataView, ResponseContext, Thumbnails, TwoColumnBrowseResults,
|
||||
Alert, AttachmentRun, AvatarViewModel, ChannelBadge, ContentRenderer, ContentsRenderer,
|
||||
ContinuationActionWrap, ImageView, PageHeaderRendererContent, PhMetadataView, ResponseContext,
|
||||
Thumbnails, TwoColumnBrowseResults, video_item::YouTubeListRenderer,
|
||||
};
|
||||
use crate::{
|
||||
model::Verification,
|
||||
|
|
@ -75,7 +75,6 @@ pub(crate) struct ChannelTabWebCommandMetadata {
|
|||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[allow(clippy::enum_variant_names)]
|
||||
pub(crate) enum Header {
|
||||
C4TabbedHeaderRenderer(HeaderRenderer),
|
||||
/// Used for special channels like YouTube Music
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
use serde::Deserialize;
|
||||
|
||||
use super::{video_item::YouTubeListRendererWrap, Tab, TwoColumnBrowseResults};
|
||||
use super::{Tab, TwoColumnBrowseResults, video_item::YouTubeListRendererWrap};
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub(crate) struct History {
|
||||
|
|
|
|||
|
|
@ -61,11 +61,12 @@ use std::collections::HashMap;
|
|||
use std::marker::PhantomData;
|
||||
|
||||
use serde::{
|
||||
de::{IgnoredAny, Visitor},
|
||||
Deserialize,
|
||||
de::{IgnoredAny, Visitor},
|
||||
};
|
||||
use serde_with::{serde_as, DisplayFromStr, VecSkipError};
|
||||
use serde_with::{DisplayFromStr, VecSkipError, serde_as};
|
||||
|
||||
use crate::client::response::url_endpoint::OnTapWrap;
|
||||
use crate::error::ExtractionError;
|
||||
use crate::serializer::text::{AttributedText, Text, TextComponent};
|
||||
use crate::serializer::{MapResult, VecSkipErrorWrap};
|
||||
|
|
@ -142,13 +143,16 @@ pub(crate) struct Thumbnails {
|
|||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct Thumbnail {
|
||||
pub url: String,
|
||||
#[serde(default)]
|
||||
pub width: u32,
|
||||
#[serde(default)]
|
||||
pub height: u32,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct ContinuationItemRenderer {
|
||||
#[serde(alias = "continuationCommand")]
|
||||
pub continuation_endpoint: ContinuationEndpoint,
|
||||
}
|
||||
|
||||
|
|
@ -156,9 +160,16 @@ pub(crate) struct ContinuationItemRenderer {
|
|||
#[serde(untagged)]
|
||||
pub(crate) enum ContinuationEndpoint {
|
||||
ContinuationCommand(ContinuationCommandWrap),
|
||||
InnertubeCommand(ContinuationInnertubeCommand),
|
||||
CommandExecutorCommand(CommandExecutorCommandWrap),
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct ContinuationInnertubeCommand {
|
||||
pub innertube_command: ContinuationCommandWrap,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct ContinuationCommandWrap {
|
||||
|
|
@ -189,6 +200,7 @@ impl ContinuationEndpoint {
|
|||
pub fn into_token(self) -> Option<String> {
|
||||
match self {
|
||||
Self::ContinuationCommand(cmd) => Some(cmd.continuation_command.token),
|
||||
Self::InnertubeCommand(cmd) => Some(cmd.innertube_command.continuation_command.token),
|
||||
Self::CommandExecutorCommand(cmd) => cmd
|
||||
.command_executor_command
|
||||
.commands
|
||||
|
|
@ -702,6 +714,7 @@ pub(crate) struct ThumbnailViewModelWrap {
|
|||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct ImageViewOl {
|
||||
pub image: Thumbnails,
|
||||
#[serde(default)]
|
||||
#[serde_as(as = "VecSkipError<_>")]
|
||||
pub overlays: Vec<ImageViewOverlay>,
|
||||
}
|
||||
|
|
@ -709,15 +722,17 @@ pub(crate) struct ImageViewOl {
|
|||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct ImageViewOverlay {
|
||||
pub thumbnail_overlay_badge_view_model: ThumbnailOverlayBadgeViewModel,
|
||||
#[serde(alias = "thumbnailOverlayBadgeViewModel")]
|
||||
pub thumbnail_bottom_overlay_view_model: ThumbnailBottomOverlayViewModel,
|
||||
}
|
||||
|
||||
#[serde_as]
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct ThumbnailOverlayBadgeViewModel {
|
||||
pub(crate) struct ThumbnailBottomOverlayViewModel {
|
||||
#[serde(alias = "thumbnailBadges")]
|
||||
#[serde_as(as = "VecSkipError<_>")]
|
||||
pub thumbnail_badges: Vec<ThumbnailBadges>,
|
||||
pub badges: Vec<ThumbnailBadges>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
|
|
@ -728,3 +743,9 @@ pub(crate) struct ThumbnailBadges {
|
|||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub(crate) struct Empty {}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct AvatarRendererContext {
|
||||
pub command_context: Option<OnTapWrap>,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
use serde::Deserialize;
|
||||
use serde_with::{serde_as, DefaultOnError};
|
||||
use serde_with::{DefaultOnError, serde_as};
|
||||
|
||||
use crate::serializer::text::Text;
|
||||
use crate::serializer::text::{Text, TextComponents};
|
||||
|
||||
use super::{
|
||||
SectionList, Tab,
|
||||
music_item::{
|
||||
Button, Grid, ItemSection, MusicMicroformat, MusicThumbnailRenderer, SimpleHeader,
|
||||
SingleColumnBrowseResult,
|
||||
},
|
||||
SectionList, Tab,
|
||||
};
|
||||
|
||||
/// Response model for YouTube Music artists
|
||||
|
|
@ -37,8 +37,7 @@ pub(crate) struct MusicHeaderRenderer {
|
|||
#[serde(default)]
|
||||
#[serde_as(as = "DefaultOnError")]
|
||||
pub subscription_button: Option<SubscriptionButton>,
|
||||
#[serde_as(as = "Option<Text>")]
|
||||
pub description: Option<String>,
|
||||
pub description: Option<TextComponents>,
|
||||
#[serde(default)]
|
||||
pub thumbnail: MusicThumbnailRenderer,
|
||||
#[serde(default)]
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
use serde::Deserialize;
|
||||
use serde_with::{rust::deserialize_ignore_any, serde_as, VecSkipError};
|
||||
use serde_with::{VecSkipError, rust::deserialize_ignore_any, serde_as};
|
||||
|
||||
use crate::param::Country;
|
||||
|
||||
use super::{music_item::MusicCarouselShelf, ContentsRenderer, SectionList, Tab};
|
||||
use super::{ContentsRenderer, SectionList, Tab, music_item::MusicCarouselShelf};
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
use serde::Deserialize;
|
||||
use serde_with::{serde_as, DefaultOnError, VecSkipError};
|
||||
use serde_with::{DefaultOnError, VecSkipError, serde_as};
|
||||
|
||||
use crate::serializer::text::Text;
|
||||
|
||||
use super::ContentsRenderer;
|
||||
use super::TextBox;
|
||||
use super::{
|
||||
music_item::{ItemSection, PlaylistPanelRenderer},
|
||||
ContentRenderer,
|
||||
music_item::{ItemSection, PlaylistPanelRenderer},
|
||||
};
|
||||
|
||||
/// Response model for YouTube Music track details
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@ use serde_with::{rust::deserialize_ignore_any, serde_as};
|
|||
use crate::serializer::text::Text;
|
||||
|
||||
use super::{
|
||||
ContentsRendererLogged, SectionList, Tab,
|
||||
music_item::{ItemSection, SimpleHeader, SingleColumnBrowseResult},
|
||||
url_endpoint::BrowseEndpointWrap,
|
||||
ContentsRendererLogged, SectionList, Tab,
|
||||
};
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
|
|
|
|||
|
|
@ -1,25 +1,29 @@
|
|||
#![allow(clippy::large_enum_variant)]
|
||||
|
||||
use double_ended_peekable::DoubleEndedPeekableExt;
|
||||
use serde::Deserialize;
|
||||
use serde_with::{rust::deserialize_ignore_any, serde_as, DefaultOnError, VecSkipError};
|
||||
use serde_with::{DefaultOnError, VecSkipError, rust::deserialize_ignore_any, serde_as};
|
||||
|
||||
use crate::{
|
||||
error::ExtractionError,
|
||||
model::{
|
||||
self, traits::FromYtItem, AlbumId, AlbumItem, AlbumType, ArtistId, ArtistItem, ChannelId,
|
||||
MusicItem, MusicItemType, MusicPlaylistItem, TrackItem, UserItem,
|
||||
self, AlbumId, AlbumItem, AlbumType, ArtistId, ArtistItem, ChannelId, MusicItem,
|
||||
MusicItemType, MusicPlaylistItem, TrackItem, UserItem, traits::FromYtItem,
|
||||
},
|
||||
param::Language,
|
||||
serializer::{
|
||||
text::{Text, TextComponent, TextComponents},
|
||||
MapResult,
|
||||
text::{Text, TextComponent, TextComponents},
|
||||
},
|
||||
util::{self, dictionary, timeago},
|
||||
};
|
||||
|
||||
use super::{
|
||||
ContentsRenderer, ContinuationActionWrap, ContinuationEndpoint, MusicContinuationData,
|
||||
SimpleHeaderRenderer, Thumbnails, ThumbnailsWrap,
|
||||
url_endpoint::{
|
||||
BrowseEndpointWrap, MusicPage, MusicPageType, MusicVideoType, NavigationEndpoint, PageType,
|
||||
},
|
||||
ContentsRenderer, ContinuationActionWrap, ContinuationEndpoint, MusicContinuationData,
|
||||
SimpleHeaderRenderer, Thumbnails, ThumbnailsWrap,
|
||||
};
|
||||
|
||||
#[cfg(feature = "userdata")]
|
||||
|
|
@ -88,7 +92,6 @@ pub(crate) struct MusicCardShelf {
|
|||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[allow(clippy::enum_variant_names)]
|
||||
pub(crate) enum MusicResponseItem {
|
||||
MusicResponsiveListItemRenderer(ListMusicItem),
|
||||
MusicTwoRowItemRenderer(CoverMusicItem),
|
||||
|
|
@ -264,7 +267,7 @@ pub(crate) enum PlaylistPanelVideo {
|
|||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct QueueMusicItem {
|
||||
pub video_id: String,
|
||||
pub video_id: Option<String>,
|
||||
#[serde_as(as = "Text")]
|
||||
pub title: String,
|
||||
#[serde_as(as = "Option<Text>")]
|
||||
|
|
@ -279,6 +282,8 @@ pub(crate) struct QueueMusicItem {
|
|||
#[serde(default)]
|
||||
pub thumbnail: Thumbnails,
|
||||
pub menu: Option<MusicItemMenu>,
|
||||
/// Alternative source for Video ID
|
||||
pub navigation_endpoint: Option<NavigationEndpoint>,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Deserialize)]
|
||||
|
|
@ -345,7 +350,6 @@ pub(crate) struct MusicContinuation {
|
|||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[allow(clippy::enum_variant_names)]
|
||||
pub(crate) enum ContinuationContents {
|
||||
#[serde(alias = "musicPlaylistShelfContinuation")]
|
||||
MusicShelfContinuation(MusicShelf),
|
||||
|
|
@ -561,11 +565,11 @@ impl MusicListMapper {
|
|||
let mut etype = None;
|
||||
self.warnings.append(&mut res.warnings);
|
||||
res.c.into_iter().for_each(|item| {
|
||||
if let Some(et) = self.add_response_item(item) {
|
||||
if etype.is_none() {
|
||||
if let Some(et) = self.add_response_item(item)
|
||||
&& etype.is_none()
|
||||
{
|
||||
etype = Some(et);
|
||||
}
|
||||
}
|
||||
});
|
||||
etype
|
||||
}
|
||||
|
|
@ -658,12 +662,14 @@ impl MusicListMapper {
|
|||
..Default::default()
|
||||
}
|
||||
} else {
|
||||
let mut subtitle_parts = c2
|
||||
let subtitle_parts = c2
|
||||
.ok_or_else(|| format!("track {id}: could not get subtitle"))?
|
||||
.renderer
|
||||
.text
|
||||
.split(util::DOT_SEPARATOR)
|
||||
.into_iter();
|
||||
let subtitle_parts_len = subtitle_parts.len();
|
||||
let mut subtitle_parts = subtitle_parts.double_ended_peekable();
|
||||
|
||||
// Is this a related video?
|
||||
if item.item_height == ItemHeight::Compact {
|
||||
|
|
@ -692,8 +698,17 @@ impl MusicListMapper {
|
|||
}
|
||||
} else {
|
||||
// Skip first part (track type)
|
||||
if subtitle_parts.len() > 3
|
||||
|| (vtype == MusicVideoType::Video && subtitle_parts.len() == 2)
|
||||
// Track (main search): Track type * Artists * View count
|
||||
// Track (main search featured): {Track type * Artists * Duration}, {View count}
|
||||
// Track (dedicated): {Artists * Album * Duration}, {View count}
|
||||
// Video: [Track type] * Artists * View count * (Duration)
|
||||
|
||||
// If last part is not duration, remove first part (from main search)
|
||||
|
||||
if subtitle_parts_len > 3
|
||||
|| !subtitle_parts.peek_back().is_some_and(|p| {
|
||||
util::parse_video_length(p.first_str()).is_some()
|
||||
})
|
||||
{
|
||||
subtitle_parts.next();
|
||||
}
|
||||
|
|
@ -767,8 +782,8 @@ impl MusicListMapper {
|
|||
// This is used for extracting artist pages.
|
||||
// On some albums, the artist name of the tracks is not given but different
|
||||
// from the album artist. In this case dont copy the album artist.
|
||||
if let Some((fb_artists, _)) = &self.artists {
|
||||
if artists.is_empty()
|
||||
if let Some((fb_artists, _)) = &self.artists
|
||||
&& artists.is_empty()
|
||||
&& (self.artist_page
|
||||
|| artist_id.is_none()
|
||||
|| fb_artists.iter().any(|fb_id| {
|
||||
|
|
@ -781,7 +796,6 @@ impl MusicListMapper {
|
|||
{
|
||||
artists.clone_from(fb_artists);
|
||||
}
|
||||
}
|
||||
|
||||
let track_nr = item.index.and_then(|txt| util::parse_numeric(&txt).ok());
|
||||
|
||||
|
|
@ -852,11 +866,11 @@ impl MusicListMapper {
|
|||
|
||||
// Album artist links may be invisible on the search page, so
|
||||
// fall back to menu data
|
||||
if let Some(a1) = artists.first_mut() {
|
||||
if a1.id.is_none() {
|
||||
if let Some(a1) = artists.first_mut()
|
||||
&& a1.id.is_none()
|
||||
{
|
||||
a1.id.clone_from(&artist_id);
|
||||
}
|
||||
}
|
||||
|
||||
let year =
|
||||
subtitle_p3.and_then(|st| util::parse_numeric(st.first_str()).ok());
|
||||
|
|
@ -1054,7 +1068,7 @@ impl MusicListMapper {
|
|||
let from_ytm = subtitle_p2
|
||||
.as_ref()
|
||||
.and_then(|p| p.0.first())
|
||||
.map_or(true, util::is_ytm);
|
||||
.is_none_or(util::is_ytm);
|
||||
let channel = subtitle_p2
|
||||
.and_then(|p| p.0.into_iter().find_map(|c| ChannelId::try_from(c).ok()));
|
||||
|
||||
|
|
@ -1190,7 +1204,7 @@ impl MusicListMapper {
|
|||
let from_ytm = subtitle_p2
|
||||
.as_ref()
|
||||
.and_then(|p| p.0.first())
|
||||
.map_or(true, util::is_ytm);
|
||||
.is_none_or(util::is_ytm);
|
||||
let channel = subtitle_p2
|
||||
.and_then(|p| p.0.into_iter().find_map(|c| ChannelId::try_from(c).ok()));
|
||||
let track_count =
|
||||
|
|
@ -1248,6 +1262,20 @@ impl MusicListMapper {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn add_list_item(&mut self, item: ListMusicItem) -> Option<MusicItemType> {
|
||||
match self.map_list_item(item) {
|
||||
Ok(et) => et,
|
||||
Err(e) => {
|
||||
self.warnings.push(e);
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add_warning(&mut self, warning: String) {
|
||||
self.warnings.push(warning);
|
||||
}
|
||||
|
||||
pub fn add_warnings(&mut self, warnings: &mut Vec<String>) {
|
||||
self.warnings.append(warnings);
|
||||
}
|
||||
|
|
@ -1395,23 +1423,45 @@ pub(crate) fn map_album_type(txt: &str, lang: Language) -> AlbumType {
|
|||
.unwrap_or_default()
|
||||
}
|
||||
|
||||
pub(crate) fn map_queue_item(item: QueueMusicItem, lang: Language) -> MapResult<TrackItem> {
|
||||
pub(crate) fn map_queue_item(
|
||||
item: QueueMusicItem,
|
||||
lang: Language,
|
||||
) -> Result<MapResult<TrackItem>, ExtractionError> {
|
||||
let mut warnings = Vec::new();
|
||||
let mut subtitle_parts = item.long_byline_text.split(util::DOT_SEPARATOR).into_iter();
|
||||
|
||||
let is_video = !item
|
||||
let nav_wep = item.navigation_endpoint.and_then(|itm| {
|
||||
if let NavigationEndpoint::Watch { watch_endpoint } = itm {
|
||||
Some(watch_endpoint)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
});
|
||||
|
||||
let mv_type = nav_wep
|
||||
.as_ref()
|
||||
.map(|wep| {
|
||||
wep.watch_endpoint_music_supported_configs
|
||||
.watch_endpoint_music_config
|
||||
.music_video_type
|
||||
})
|
||||
.unwrap_or_else(|| {
|
||||
MusicVideoType::from_is_video(
|
||||
!item
|
||||
.thumbnail
|
||||
.thumbnails
|
||||
.first()
|
||||
.map(|tn| tn.height == tn.width)
|
||||
.unwrap_or_default();
|
||||
.unwrap_or_default(),
|
||||
)
|
||||
});
|
||||
|
||||
let artist_p = subtitle_parts.next();
|
||||
let (artists, by_va) = map_artists(artist_p);
|
||||
let artist_id = map_artist_id_fallback(item.menu, artists.first());
|
||||
|
||||
let subtitle_p2 = subtitle_parts.next();
|
||||
let (album, view_count) = if is_video {
|
||||
let (album, view_count) = if mv_type.is_video() {
|
||||
(
|
||||
None,
|
||||
subtitle_p2
|
||||
|
|
@ -1424,9 +1474,14 @@ pub(crate) fn map_queue_item(item: QueueMusicItem, lang: Language) -> MapResult<
|
|||
)
|
||||
};
|
||||
|
||||
MapResult {
|
||||
let video_id = item
|
||||
.video_id
|
||||
.or(nav_wep.map(|wep| wep.video_id))
|
||||
.ok_or(ExtractionError::InvalidData("missing video ID".into()))?;
|
||||
|
||||
Ok(MapResult {
|
||||
c: TrackItem {
|
||||
id: item.video_id,
|
||||
id: video_id,
|
||||
name: item.title,
|
||||
duration: item
|
||||
.length_text
|
||||
|
|
@ -1436,13 +1491,13 @@ pub(crate) fn map_queue_item(item: QueueMusicItem, lang: Language) -> MapResult<
|
|||
artist_id,
|
||||
album,
|
||||
view_count,
|
||||
track_type: MusicVideoType::from_is_video(is_video).into(),
|
||||
track_type: mv_type.into(),
|
||||
track_nr: None,
|
||||
by_va,
|
||||
unavailable: false,
|
||||
},
|
||||
warnings,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
use serde::Deserialize;
|
||||
|
||||
use super::{
|
||||
music_item::{Grid, SingleColumnBrowseResult},
|
||||
SectionList, Tab,
|
||||
music_item::{Grid, SingleColumnBrowseResult},
|
||||
};
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
|
|
|
|||
|
|
@ -1,15 +1,17 @@
|
|||
use serde::Deserialize;
|
||||
use serde_with::{serde_as, DefaultOnError, VecSkipError};
|
||||
use serde_with::{DefaultOnError, VecSkipError, serde_as};
|
||||
|
||||
use crate::serializer::text::{AttributedText, Text, TextComponents};
|
||||
use crate::{
|
||||
client::response::AvatarRendererContext,
|
||||
serializer::text::{AttributedText, Text, TextComponents},
|
||||
};
|
||||
|
||||
use super::{
|
||||
ContentsRenderer, SectionList, Tab,
|
||||
music_item::{
|
||||
Button, ItemSection, MusicContentsRenderer, MusicItemMenuEntry, MusicMicroformat,
|
||||
MusicThumbnailRenderer,
|
||||
},
|
||||
url_endpoint::OnTapWrap,
|
||||
ContentsRenderer, SectionList, Tab,
|
||||
};
|
||||
|
||||
/// Response model for YouTube Music playlists and albums
|
||||
|
|
@ -153,11 +155,5 @@ pub(crate) struct AvatarStackViewModel {
|
|||
// pub avatars: Vec<AvatarViewModel>,
|
||||
#[serde_as(as = "AttributedText")]
|
||||
pub text: String,
|
||||
pub renderer_context: AvatarStackRendererContext,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct AvatarStackRendererContext {
|
||||
pub command_context: Option<OnTapWrap>,
|
||||
pub renderer_context: AvatarRendererContext,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
use serde::Deserialize;
|
||||
use serde_with::{rust::deserialize_ignore_any, serde_as, VecSkipError};
|
||||
use serde_with::{VecSkipError, rust::deserialize_ignore_any, serde_as};
|
||||
|
||||
use crate::serializer::text::Text;
|
||||
use crate::serializer::{MapResult, text::Text};
|
||||
|
||||
use super::{
|
||||
music_item::{ListMusicItem, MusicCardShelf, MusicShelf},
|
||||
ContentsRenderer, SectionList, Tab,
|
||||
music_item::{ListMusicItem, MusicCardShelf, MusicShelf},
|
||||
};
|
||||
|
||||
/// Response model for YouTube Music search
|
||||
|
|
@ -31,25 +31,26 @@ pub(crate) struct Contents {
|
|||
pub tabbed_search_results_renderer: ContentsRenderer<Tab<SectionList<ItemSection>>>,
|
||||
}
|
||||
|
||||
#[allow(clippy::enum_variant_names)]
|
||||
#[serde_as]
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) enum ItemSection {
|
||||
MusicShelfRenderer(MusicShelf),
|
||||
MusicCardShelfRenderer(MusicCardShelf),
|
||||
ItemSectionRenderer {
|
||||
#[serde_as(as = "VecSkipError<_>")]
|
||||
contents: Vec<ShowingResultsFor>,
|
||||
contents: MapResult<Vec<ItemSectionRendererItem>>,
|
||||
},
|
||||
#[serde(other, deserialize_with = "deserialize_ignore_any")]
|
||||
None,
|
||||
}
|
||||
|
||||
#[allow(clippy::large_enum_variant)]
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct ShowingResultsFor {
|
||||
pub showing_results_for_renderer: ShowingResultsForRenderer,
|
||||
pub(crate) enum ItemSectionRendererItem {
|
||||
MusicResponsiveListItemRenderer(ListMusicItem),
|
||||
ShowingResultsForRenderer(ShowingResultsForRenderer),
|
||||
#[serde(other, deserialize_with = "deserialize_ignore_any")]
|
||||
None,
|
||||
}
|
||||
|
||||
#[serde_as]
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use serde_with::serde_as;
|
|||
use serde_with::{DefaultOnError, DisplayFromStr, VecSkipError};
|
||||
|
||||
use super::{Empty, ResponseContext, Thumbnails};
|
||||
use crate::serializer::{text::Text, MapResult};
|
||||
use crate::serializer::{MapResult, text::Text};
|
||||
|
||||
#[serde_as]
|
||||
#[derive(Debug, Deserialize)]
|
||||
|
|
@ -30,7 +30,10 @@ pub(crate) struct Player {
|
|||
#[serde(tag = "status", rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
pub(crate) enum PlayabilityStatus {
|
||||
#[serde(rename_all = "camelCase")]
|
||||
Ok { live_streamability: Option<Empty> },
|
||||
Ok {
|
||||
#[serde(default)]
|
||||
live_streamability: LiveStreamability,
|
||||
},
|
||||
/// Video cant be played because of DRM / Geoblock
|
||||
#[serde(rename_all = "camelCase")]
|
||||
Unplayable {
|
||||
|
|
@ -78,6 +81,20 @@ pub(crate) struct ErrorMessage {
|
|||
pub subreason: String,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct LiveStreamability {
|
||||
pub live_streamability_renderer: LiveStreamabilityRenderer,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct LiveStreamabilityRenderer {
|
||||
pub broadcast_id: Option<String>,
|
||||
#[serde(default)]
|
||||
pub display_endscreen: bool,
|
||||
}
|
||||
|
||||
#[serde_as]
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
|
@ -92,6 +109,7 @@ pub(crate) struct StreamingData {
|
|||
pub dash_manifest_url: Option<String>,
|
||||
/// Only on livestreams
|
||||
pub hls_manifest_url: Option<String>,
|
||||
pub server_abr_streaming_url: Option<String>,
|
||||
pub drm_params: Option<String>,
|
||||
#[serde(default)]
|
||||
#[serde_as(deserialize_as = "VecSkipError<_>")]
|
||||
|
|
@ -109,8 +127,12 @@ pub(crate) struct Format {
|
|||
pub format_type: FormatType,
|
||||
|
||||
pub mime_type: String,
|
||||
|
||||
#[serde_as(as = "Option<DisplayFromStr>")]
|
||||
pub last_modified: Option<u64>,
|
||||
#[serde_as(as = "Option<DisplayFromStr>")]
|
||||
pub content_length: Option<u64>,
|
||||
pub bitrate: u32,
|
||||
pub xtags: Option<String>,
|
||||
|
||||
pub width: Option<u32>,
|
||||
pub height: Option<u32>,
|
||||
|
|
@ -122,9 +144,6 @@ pub(crate) struct Format {
|
|||
#[serde_as(as = "Option<crate::serializer::Range>")]
|
||||
pub init_range: Option<Range<u32>>,
|
||||
|
||||
#[serde_as(as = "Option<DisplayFromStr>")]
|
||||
pub content_length: Option<u64>,
|
||||
|
||||
#[serde(default)]
|
||||
#[serde_as(deserialize_as = "DefaultOnError")]
|
||||
pub quality: Option<Quality>,
|
||||
|
|
@ -141,6 +160,8 @@ pub(crate) struct Format {
|
|||
pub audio_sample_rate: Option<u32>,
|
||||
pub audio_channels: Option<u8>,
|
||||
pub loudness_db: Option<f32>,
|
||||
#[serde(default)]
|
||||
pub is_drc: bool,
|
||||
pub audio_track: Option<AudioTrack>,
|
||||
|
||||
pub signature_cipher: Option<String>,
|
||||
|
|
@ -216,7 +237,6 @@ pub(crate) enum Primaries {
|
|||
|
||||
#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Eq)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
#[allow(clippy::enum_variant_names)]
|
||||
pub(crate) enum DrmTrackType {
|
||||
DrmTrackTypeAudio,
|
||||
DrmTrackTypeSd,
|
||||
|
|
@ -294,9 +314,13 @@ pub(crate) struct StoryboardRenderer {
|
|||
pub spec: String,
|
||||
}
|
||||
|
||||
#[serde_as]
|
||||
#[derive(Default, Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct PlayerConfig {
|
||||
#[serde(default)]
|
||||
#[serde_as(deserialize_as = "DefaultOnError")]
|
||||
pub media_common_config: Option<MediaCommonConfig>,
|
||||
pub web_drm_config: Option<WebDrmConfig>,
|
||||
}
|
||||
|
||||
|
|
@ -306,6 +330,18 @@ pub(crate) struct WebDrmConfig {
|
|||
pub widevine_service_cert: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct MediaCommonConfig {
|
||||
pub media_ustreamer_request_config: UstreamerRequestConfig,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct UstreamerRequestConfig {
|
||||
pub video_playback_ustreamer_config: String,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct HeartbeatParams {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
use serde::Deserialize;
|
||||
use serde_with::{serde_as, DefaultOnError, VecSkipError};
|
||||
use serde_with::{DefaultOnError, VecSkipError, serde_as};
|
||||
|
||||
use crate::serializer::text::{AttributedText, Text, TextComponent, TextComponents};
|
||||
|
||||
use super::{
|
||||
url_endpoint::OnTapWrap, video_item::YouTubeListRenderer, Alert, ContentRenderer,
|
||||
ContentsRenderer, ImageView, PageHeaderRendererContent, PhMetadataView, ResponseContext,
|
||||
SectionList, Tab, TextBox, ThumbnailsWrap, TwoColumnBrowseResults,
|
||||
Alert, ContentRenderer, ContentsRenderer, ImageView, PageHeaderRendererContent, PhMetadataView,
|
||||
ResponseContext, SectionList, Tab, TextBox, ThumbnailsWrap, TwoColumnBrowseResults,
|
||||
url_endpoint::OnTapWrap, video_item::YouTubeListRenderer,
|
||||
};
|
||||
|
||||
#[serde_as]
|
||||
|
|
@ -24,14 +24,7 @@ pub(crate) struct Playlist {
|
|||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct ItemSection {
|
||||
pub item_section_renderer: ContentsRenderer<PlaylistVideoListRenderer>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct PlaylistVideoListRenderer {
|
||||
#[serde(alias = "richGridRenderer")]
|
||||
pub playlist_video_list_renderer: YouTubeListRenderer,
|
||||
pub item_section_renderer: YouTubeListRenderer,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
use serde::{
|
||||
de::{IgnoredAny, Visitor},
|
||||
Deserialize,
|
||||
de::{IgnoredAny, Visitor},
|
||||
};
|
||||
use serde_with::{serde_as, DisplayFromStr};
|
||||
use serde_with::{DisplayFromStr, serde_as};
|
||||
|
||||
use super::{video_item::YouTubeListRendererWrap, ResponseContext};
|
||||
use super::{ResponseContext, video_item::YouTubeListRendererWrap};
|
||||
|
||||
#[serde_as]
|
||||
#[derive(Debug, Deserialize)]
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
use serde::Deserialize;
|
||||
|
||||
use super::{video_item::YouTubeListRendererWrap, Tab, TwoColumnBrowseResults};
|
||||
use super::{Tab, TwoColumnBrowseResults, video_item::YouTubeListRendererWrap};
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use serde::Deserialize;
|
||||
use serde_with::{serde_as, DefaultOnError};
|
||||
use serde_with::{DefaultOnError, serde_as};
|
||||
|
||||
use crate::{
|
||||
model::{TrackType, UrlTarget},
|
||||
|
|
@ -191,11 +191,7 @@ impl MusicVideoType {
|
|||
}
|
||||
|
||||
pub fn from_is_video(is_video: bool) -> Self {
|
||||
if is_video {
|
||||
Self::Video
|
||||
} else {
|
||||
Self::Track
|
||||
}
|
||||
if is_video { Self::Video } else { Self::Track }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -380,11 +376,11 @@ impl NavigationEndpoint {
|
|||
} => Some(browse_endpoint.browse_id).filter(|_| {
|
||||
browse_endpoint
|
||||
.browse_endpoint_context_supported_configs
|
||||
.map(|c| c.browse_endpoint_context_music_config.page_type == PageType::Playlist)
|
||||
.unwrap_or_default()
|
||||
.is_some_and(|c| {
|
||||
c.browse_endpoint_context_music_config.page_type == PageType::Playlist
|
||||
})
|
||||
|| command_metadata
|
||||
.map(|c| c.web_command_metadata.web_page_type == PageType::Playlist)
|
||||
.unwrap_or_default()
|
||||
.is_some_and(|c| c.web_command_metadata.web_page_type == PageType::Playlist)
|
||||
}),
|
||||
NavigationEndpoint::Url { .. } => None,
|
||||
NavigationEndpoint::WatchPlaylist {
|
||||
|
|
@ -393,4 +389,22 @@ impl NavigationEndpoint {
|
|||
NavigationEndpoint::CreatePlaylist { .. } => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn into_channel_id(self) -> Option<String> {
|
||||
match self {
|
||||
NavigationEndpoint::Browse {
|
||||
browse_endpoint,
|
||||
command_metadata,
|
||||
} => Some(browse_endpoint.browse_id).filter(|_| {
|
||||
browse_endpoint
|
||||
.browse_endpoint_context_supported_configs
|
||||
.is_some_and(|c| {
|
||||
c.browse_endpoint_context_music_config.page_type == PageType::Channel
|
||||
})
|
||||
|| command_metadata
|
||||
.is_some_and(|c| c.web_command_metadata.web_page_type == PageType::Channel)
|
||||
}),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,27 +1,31 @@
|
|||
#![allow(clippy::enum_variant_names)]
|
||||
|
||||
use serde::Deserialize;
|
||||
use serde_with::{rust::deserialize_ignore_any, serde_as, DefaultOnError, VecSkipError};
|
||||
use serde_with::{DefaultOnError, VecSkipError, rust::deserialize_ignore_any, serde_as};
|
||||
|
||||
use crate::serializer::{
|
||||
text::{AccessibilityText, AttributedText, Text, TextComponent, TextComponents},
|
||||
use crate::{
|
||||
client::response::video_item::DialogNavigationEndpoint,
|
||||
serializer::{
|
||||
MapResult,
|
||||
text::{AccessibilityText, AttributedText, Text, TextComponents},
|
||||
},
|
||||
};
|
||||
|
||||
use super::{
|
||||
url_endpoint::BrowseEndpointWrap, ContinuationEndpoint, ContinuationItemRenderer, Icon,
|
||||
MusicContinuationData, Thumbnails,
|
||||
};
|
||||
use super::{
|
||||
ChannelBadge, ContentsRendererLogged, FrameworkUpdates, ImageView, ResponseContext,
|
||||
YouTubeListItem,
|
||||
};
|
||||
use super::{
|
||||
ContinuationEndpoint, ContinuationItemRenderer, Icon, MusicContinuationData, Thumbnails,
|
||||
url_endpoint::BrowseEndpointWrap,
|
||||
};
|
||||
|
||||
/*
|
||||
#VIDEO DETAILS
|
||||
*/
|
||||
|
||||
/// Video details response
|
||||
#[serde_as]
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct VideoDetails {
|
||||
|
|
@ -30,7 +34,8 @@ pub(crate) struct VideoDetails {
|
|||
/// Video ID
|
||||
pub current_video_endpoint: Option<CurrentVideoEndpoint>,
|
||||
/// Video chapters + comment section
|
||||
pub engagement_panels: MapResult<Vec<EngagementPanel>>,
|
||||
#[serde_as(as = "VecSkipError<_>")]
|
||||
pub engagement_panels: Vec<EngagementPanel>,
|
||||
pub response_context: ResponseContext,
|
||||
}
|
||||
|
||||
|
|
@ -224,8 +229,13 @@ pub(crate) struct VideoOwner {
|
|||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct VideoOwnerRenderer {
|
||||
pub title: TextComponent,
|
||||
pub thumbnail: Thumbnails,
|
||||
#[serde(alias = "attributedTitle")]
|
||||
#[serde_as(as = "Text")]
|
||||
pub title: String,
|
||||
/// Channel avatar (single channel)
|
||||
pub thumbnail: Option<Thumbnails>,
|
||||
/// Channel avatar (featuring channels)
|
||||
pub navigation_endpoint: DialogNavigationEndpoint,
|
||||
#[serde_as(as = "Option<Text>")]
|
||||
pub subscriber_count_text: Option<String>,
|
||||
#[serde(default)]
|
||||
|
|
@ -364,14 +374,6 @@ pub(crate) enum EngagementPanelRenderer {
|
|||
/// Comment section (contains no comments, but the
|
||||
/// continuation tokens for fetching top/latest comments)
|
||||
EngagementPanelCommentsSection { header: CommentItemSectionHeader },
|
||||
/// Ignored items:
|
||||
/// - `engagement-panel-ads`
|
||||
/// - `engagement-panel-structured-description`
|
||||
/// (Description already included in `VideoSecondaryInfoRenderer`)
|
||||
/// - `engagement-panel-searchable-transcript`
|
||||
/// (basically video subtitles in a different format)
|
||||
#[serde(other, deserialize_with = "deserialize_ignore_any")]
|
||||
None,
|
||||
}
|
||||
|
||||
/// Chapter markers
|
||||
|
|
@ -430,6 +432,8 @@ pub(crate) struct CommentItemSectionHeader {
|
|||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct CommentItemSectionHeaderRenderer {
|
||||
#[serde_as(as = "Option<Text>")]
|
||||
pub contextual_info: Option<String>,
|
||||
pub menu: CommentItemSectionHeaderMenu,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
use serde::Deserialize;
|
||||
use serde_with::{
|
||||
rust::deserialize_ignore_any, serde_as, DefaultOnError, DisplayFromStr, VecSkipError,
|
||||
DefaultOnError, DisplayFromStr, VecSkipError, rust::deserialize_ignore_any, serde_as,
|
||||
};
|
||||
use time::OffsetDateTime;
|
||||
|
||||
use super::{ChannelBadge, ContentImage, ContinuationItemRenderer, PhMetadataView, Thumbnails};
|
||||
use crate::{
|
||||
model::{Channel, ChannelItem, ChannelTag, PlaylistItem, VideoItem, YouTubeItem},
|
||||
client::response::{
|
||||
AvatarRendererContext, AvatarViewModel, ThumbnailViewModelWrap,
|
||||
url_endpoint::BrowseEndpoint,
|
||||
},
|
||||
model::{Channel, ChannelItem, ChannelTag, PlaylistItem, Verification, VideoItem, YouTubeItem},
|
||||
param::Language,
|
||||
serializer::{
|
||||
text::{AttributedText, Text, TextComponent},
|
||||
MapResult,
|
||||
text::{AttributedText, Text, TextComponent},
|
||||
},
|
||||
util::{self, timeago, TryRemove},
|
||||
util::{self, DOT_SEPARATOR, TryRemove, timeago},
|
||||
};
|
||||
|
||||
#[cfg(feature = "userdata")]
|
||||
|
|
@ -25,7 +29,7 @@ use time::UtcOffset;
|
|||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) enum YouTubeListItem {
|
||||
#[serde(alias = "gridVideoRenderer", alias = "compactVideoRenderer")]
|
||||
VideoRenderer(VideoRenderer),
|
||||
VideoRenderer(Box<VideoRenderer>),
|
||||
ReelItemRenderer(ReelItemRenderer),
|
||||
ShortsLockupViewModel(ShortsLockupViewModel),
|
||||
PlaylistVideoRenderer(PlaylistVideoRenderer),
|
||||
|
|
@ -39,6 +43,7 @@ pub(crate) enum YouTubeListItem {
|
|||
|
||||
/// Continuation items are located at the end of a list
|
||||
/// and contain the continuation token for progressive loading
|
||||
#[serde(alias = "continuationItemViewModel")]
|
||||
ContinuationItemRenderer(ContinuationItemRenderer),
|
||||
|
||||
/// Corrected search query
|
||||
|
|
@ -63,9 +68,17 @@ pub(crate) enum YouTubeListItem {
|
|||
/// as of 11.10.2022
|
||||
///
|
||||
/// GridRenderer: contains videos on channel page
|
||||
#[serde(alias = "expandedShelfContentsRenderer", alias = "gridRenderer")]
|
||||
#[serde(
|
||||
alias = "expandedShelfContentsRenderer",
|
||||
alias = "gridRenderer",
|
||||
alias = "verticalListRenderer",
|
||||
alias = "gridShelfViewModel",
|
||||
alias = "playlistVideoListRenderer"
|
||||
)]
|
||||
ItemSectionRenderer {
|
||||
#[cfg(feature = "userdata")]
|
||||
#[serde(default)]
|
||||
#[serde_as(as = "DefaultOnError")]
|
||||
header: Option<ItemSectionHeader>,
|
||||
#[serde(alias = "items")]
|
||||
contents: MapResult<Vec<YouTubeListItem>>,
|
||||
|
|
@ -127,6 +140,7 @@ pub(crate) struct VideoRenderer {
|
|||
pub detailed_metadata_snippets: Option<Vec<DetailedMetadataSnippet>>,
|
||||
/// Release date for upcoming videos
|
||||
pub upcoming_event_data: Option<UpcomingEventData>,
|
||||
pub avatar: Option<LockupViewModelMetadataImage>,
|
||||
}
|
||||
|
||||
/// Short video item
|
||||
|
|
@ -152,7 +166,7 @@ pub(crate) struct ReelItemRenderer {
|
|||
pub(crate) struct ShortsLockupViewModel {
|
||||
/// `shorts-shelf-item-[video_id]`
|
||||
pub entity_id: String,
|
||||
pub thumbnail: Thumbnails,
|
||||
pub thumbnail_view_model: ThumbnailViewModelWrap,
|
||||
pub overlay_metadata: ShortsOverlayMetadata,
|
||||
}
|
||||
|
||||
|
|
@ -183,7 +197,6 @@ pub(crate) struct LockupViewModel {
|
|||
|
||||
#[derive(Default, Debug, Deserialize)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
#[allow(clippy::enum_variant_names)]
|
||||
pub(crate) enum LockupContentType {
|
||||
LockupContentTypePlaylist,
|
||||
LockupContentTypeVideo,
|
||||
|
|
@ -203,9 +216,106 @@ pub(crate) struct LockupViewModelMetadata {
|
|||
pub(crate) struct LockupViewModelMetadataInner {
|
||||
#[serde_as(as = "AttributedText")]
|
||||
pub title: String,
|
||||
/// Channel avatar image with link to channel
|
||||
pub image: Option<LockupViewModelMetadataImage>,
|
||||
pub metadata: PhMetadataView,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) enum LockupViewModelMetadataImage {
|
||||
/// Single channel avatar
|
||||
#[serde(rename_all = "camelCase")]
|
||||
DecoratedAvatarViewModel { avatar: AvatarViewModel },
|
||||
/// Multiple avatars for featured channels
|
||||
#[serde(rename_all = "camelCase")]
|
||||
AvatarStackViewModel {
|
||||
renderer_context: AvatarStackRendererContext,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct AvatarStackRendererContext {
|
||||
pub command_context: AvatarStackRendererContext2,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct AvatarStackRendererContext2 {
|
||||
pub on_tap: AvatarStackRendererContext3,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct AvatarStackRendererContext3 {
|
||||
pub innertube_command: DialogNavigationEndpoint,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(untagged)]
|
||||
pub(crate) enum DialogNavigationEndpoint {
|
||||
#[serde(rename_all = "camelCase")]
|
||||
Browse { browse_endpoint: BrowseEndpoint },
|
||||
#[serde(rename_all = "camelCase")]
|
||||
ShowDialog {
|
||||
show_dialog_command: ShowDialogCommand,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct ShowDialogCommand {
|
||||
pub panel_loading_strategy: AvatarStackRendererContext6,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct AvatarStackRendererContext6 {
|
||||
pub inline_content: AvatarStackRendererContext7,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct AvatarStackRendererContext7 {
|
||||
pub dialog_view_model: AvatarStackRendererContext8,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct AvatarStackRendererContext8 {
|
||||
pub custom_content: AvatarStackRendererContext9,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct AvatarStackRendererContext9 {
|
||||
pub list_view_model: AvatarStackRendererContext10,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct AvatarStackRendererContext10 {
|
||||
pub list_items: Vec<AvatarStackRendererContext11>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct AvatarStackRendererContext11 {
|
||||
pub list_item_view_model: ChannelDialogItem,
|
||||
}
|
||||
|
||||
#[serde_as]
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct ChannelDialogItem {
|
||||
pub title: AttributedText,
|
||||
#[serde_as(as = "Text")]
|
||||
pub subtitle: String,
|
||||
pub renderer_context: AvatarRendererContext,
|
||||
pub leading_accessory: AvatarViewModel,
|
||||
}
|
||||
|
||||
/// Video displayed in a playlist
|
||||
#[serde_as]
|
||||
#[derive(Debug, Deserialize)]
|
||||
|
|
@ -457,6 +567,66 @@ impl IsShort for Vec<TimeOverlay> {
|
|||
}
|
||||
}
|
||||
|
||||
impl ShowDialogCommand {
|
||||
pub fn map(
|
||||
self,
|
||||
lang: Language,
|
||||
warnings: &mut Vec<String>,
|
||||
) -> Option<(ChannelTag, Vec<ChannelTag>)> {
|
||||
let mut channel_items = self
|
||||
.panel_loading_strategy
|
||||
.inline_content
|
||||
.dialog_view_model
|
||||
.custom_content
|
||||
.list_view_model
|
||||
.list_items
|
||||
.into_iter()
|
||||
.filter_map(|itm| {
|
||||
let itm = itm.list_item_view_model;
|
||||
let id = if let Some(id) = itm
|
||||
.renderer_context
|
||||
.command_context
|
||||
.and_then(|x| x.on_tap.innertube_command.into_channel_id())
|
||||
.or_else(|| {
|
||||
itm.title
|
||||
.command_runs
|
||||
.into_iter()
|
||||
.find_map(|c| c.on_tap.innertube_command.into_channel_id())
|
||||
}) {
|
||||
id
|
||||
} else {
|
||||
warnings.push("could not parse featured channel: no ID".to_owned());
|
||||
return None;
|
||||
};
|
||||
let subscriber_count =
|
||||
if let Some((_vname, stxt)) = itm.subtitle.split_once(DOT_SEPARATOR) {
|
||||
util::parse_large_numstr_or_warn(stxt, lang, warnings)
|
||||
} else {
|
||||
warnings.push(
|
||||
"could not parse featured channel: could not split subtitle".to_owned(),
|
||||
);
|
||||
None
|
||||
};
|
||||
|
||||
Some(ChannelTag {
|
||||
id,
|
||||
name: itm.title.content,
|
||||
avatar: itm.leading_accessory.avatar_view_model.image.into(),
|
||||
verification: itm
|
||||
.title
|
||||
.attachment_runs
|
||||
.into_iter()
|
||||
.next()
|
||||
.map(Verification::from)
|
||||
.unwrap_or_default(),
|
||||
subscriber_count,
|
||||
})
|
||||
});
|
||||
|
||||
channel_items.next().map(|c| (c, channel_items.collect()))
|
||||
}
|
||||
}
|
||||
|
||||
/// Result of mapping a list of different YouTube enities
|
||||
/// (videos, channels, playlists)
|
||||
#[derive(Debug)]
|
||||
|
|
@ -513,12 +683,7 @@ impl<T> YouTubeListMapper<T> {
|
|||
.map(|ol| ol.thumbnail_overlay_time_status_renderer.text)
|
||||
});
|
||||
|
||||
VideoItem {
|
||||
id: video.video_id,
|
||||
name: video.title,
|
||||
duration: length_text.and_then(|txt| util::parse_video_length(&txt)),
|
||||
thumbnail: video.thumbnail.into(),
|
||||
channel: video
|
||||
let channel_t = video
|
||||
.channel
|
||||
.and_then(|c| ChannelTag::try_from(c).ok())
|
||||
.map(|mut c| {
|
||||
|
|
@ -532,8 +697,45 @@ impl<T> YouTubeListMapper<T> {
|
|||
c.verification = video.owner_badges.into();
|
||||
}
|
||||
c
|
||||
})
|
||||
.or_else(|| self.channel.clone()),
|
||||
});
|
||||
|
||||
let (channel, channels_feat) = match video.avatar {
|
||||
Some(LockupViewModelMetadataImage::DecoratedAvatarViewModel { avatar }) => {
|
||||
let mut c = channel_t;
|
||||
if let Some(c) = &mut c
|
||||
&& c.avatar.is_empty()
|
||||
{
|
||||
c.avatar = avatar.avatar_view_model.image.into();
|
||||
}
|
||||
(c, Vec::new())
|
||||
}
|
||||
Some(LockupViewModelMetadataImage::AvatarStackViewModel { renderer_context }) => {
|
||||
if let DialogNavigationEndpoint::ShowDialog {
|
||||
show_dialog_command,
|
||||
} = renderer_context.command_context.on_tap.innertube_command
|
||||
{
|
||||
if let Some((c, feat)) = show_dialog_command.map(self.lang, &mut self.warnings)
|
||||
{
|
||||
(Some(c), feat)
|
||||
} else {
|
||||
self.warnings
|
||||
.push("no valid featured channel item".to_owned());
|
||||
(None, Vec::new())
|
||||
}
|
||||
} else {
|
||||
(None, Vec::new())
|
||||
}
|
||||
}
|
||||
None => (channel_t, Vec::new()),
|
||||
};
|
||||
|
||||
VideoItem {
|
||||
id: video.video_id,
|
||||
name: video.title,
|
||||
duration: length_text.and_then(|txt| util::parse_video_length(&txt)),
|
||||
thumbnail: video.thumbnail.into(),
|
||||
channel: channel.or_else(|| self.channel.clone()),
|
||||
channels_feat,
|
||||
publish_date: video
|
||||
.upcoming_event_data
|
||||
.as_ref()
|
||||
|
|
@ -573,6 +775,7 @@ impl<T> YouTubeListMapper<T> {
|
|||
duration: None,
|
||||
thumbnail: video.thumbnail.into(),
|
||||
channel: self.channel.clone(),
|
||||
channels_feat: Vec::new(),
|
||||
publish_date: pub_date_txt.as_ref().and_then(|txt| {
|
||||
timeago::parse_timeago_dt_or_warn(self.lang, txt, &mut self.warnings)
|
||||
}),
|
||||
|
|
@ -593,8 +796,9 @@ impl<T> YouTubeListMapper<T> {
|
|||
id: video_id.to_owned(),
|
||||
name: video.overlay_metadata.primary_text,
|
||||
duration: None,
|
||||
thumbnail: video.thumbnail.into(),
|
||||
thumbnail: video.thumbnail_view_model.thumbnail_view_model.image.into(),
|
||||
channel: self.channel.clone(),
|
||||
channels_feat: Vec::new(),
|
||||
publish_date: None,
|
||||
publish_date_txt: None,
|
||||
view_count: video.overlay_metadata.secondary_text.and_then(|txt| {
|
||||
|
|
@ -653,6 +857,7 @@ impl<T> YouTubeListMapper<T> {
|
|||
duration: video.length_seconds,
|
||||
thumbnail: video.thumbnail.into(),
|
||||
channel,
|
||||
channels_feat: Vec::new(), // TODO: multi-channel
|
||||
publish_date,
|
||||
publish_date_txt,
|
||||
view_count: view_count_txt.and_then(|txt| {
|
||||
|
|
@ -731,26 +936,63 @@ impl<T> YouTubeListMapper<T> {
|
|||
video_count: tn
|
||||
.overlays
|
||||
.first()
|
||||
.and_then(|ol| {
|
||||
ol.thumbnail_overlay_badge_view_model
|
||||
.thumbnail_badges
|
||||
.first()
|
||||
})
|
||||
.and_then(|ol| ol.thumbnail_bottom_overlay_view_model.badges.first())
|
||||
.and_then(|badge| {
|
||||
util::parse_numeric(&badge.thumbnail_badge_view_model.text).ok()
|
||||
}),
|
||||
}))
|
||||
}
|
||||
LockupContentType::LockupContentTypeVideo => {
|
||||
// Metadata rows:
|
||||
// Channel name
|
||||
// 55M views * 1 month ago
|
||||
let mut mdr = md
|
||||
.metadata
|
||||
.content_metadata_view_model
|
||||
.metadata_rows
|
||||
.into_iter();
|
||||
let channel = mdr
|
||||
.next()
|
||||
.into_iter()
|
||||
.peekable();
|
||||
|
||||
let channel_t = if mdr.peek().is_some_and(|r1| r1.metadata_parts.len() == 1) {
|
||||
mdr.next()
|
||||
.and_then(|r| r.metadata_parts.into_iter().next())
|
||||
.and_then(|p| ChannelTag::try_from(p.into_text_component()).ok());
|
||||
.and_then(|p| ChannelTag::try_from(p.into_text_component()).ok())
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
let (channel, channels_feat) = match md.image {
|
||||
Some(LockupViewModelMetadataImage::DecoratedAvatarViewModel {
|
||||
avatar, ..
|
||||
}) => channel_t
|
||||
.map(|mut c| {
|
||||
c.avatar = avatar.avatar_view_model.image.into();
|
||||
(Some(c), Vec::new())
|
||||
})
|
||||
.unwrap_or_default(),
|
||||
Some(LockupViewModelMetadataImage::AvatarStackViewModel {
|
||||
renderer_context,
|
||||
}) => {
|
||||
if let DialogNavigationEndpoint::ShowDialog {
|
||||
show_dialog_command,
|
||||
} = renderer_context.command_context.on_tap.innertube_command
|
||||
{
|
||||
if let Some((c, feat)) =
|
||||
show_dialog_command.map(self.lang, &mut self.warnings)
|
||||
{
|
||||
(Some(c), feat)
|
||||
} else {
|
||||
self.warnings
|
||||
.push("no valid featured channel item".to_owned());
|
||||
(None, Vec::new())
|
||||
}
|
||||
} else {
|
||||
(None, Vec::new())
|
||||
}
|
||||
}
|
||||
None => (channel_t, Vec::new()),
|
||||
};
|
||||
|
||||
let (view_count, publish_date_txt) = mdr
|
||||
.next()
|
||||
.map(|metadata_row| {
|
||||
|
|
@ -776,16 +1018,13 @@ impl<T> YouTubeListMapper<T> {
|
|||
duration: tn
|
||||
.overlays
|
||||
.first()
|
||||
.and_then(|ol| {
|
||||
ol.thumbnail_overlay_badge_view_model
|
||||
.thumbnail_badges
|
||||
.first()
|
||||
})
|
||||
.and_then(|ol| ol.thumbnail_bottom_overlay_view_model.badges.first())
|
||||
.and_then(|badge| {
|
||||
util::parse_video_length(&badge.thumbnail_badge_view_model.text)
|
||||
}),
|
||||
thumbnail: tn.image.into(),
|
||||
channel,
|
||||
channels_feat,
|
||||
publish_date: publish_date_txt.as_deref().and_then(|t| {
|
||||
timeago::parse_timeago_dt_or_warn(self.lang, t, &mut self.warnings)
|
||||
}),
|
||||
|
|
@ -806,7 +1045,7 @@ impl YouTubeListMapper<YouTubeItem> {
|
|||
fn map_item(&mut self, item: YouTubeListItem) {
|
||||
match item {
|
||||
YouTubeListItem::VideoRenderer(video) => {
|
||||
let mapped = YouTubeItem::Video(self.map_video(video));
|
||||
let mapped = YouTubeItem::Video(self.map_video(*video));
|
||||
self.items.push(mapped);
|
||||
}
|
||||
YouTubeListItem::ShortsLockupViewModel(video) => {
|
||||
|
|
@ -864,7 +1103,7 @@ impl YouTubeListMapper<VideoItem> {
|
|||
fn map_item(&mut self, item: YouTubeListItem) {
|
||||
match item {
|
||||
YouTubeListItem::VideoRenderer(video) => {
|
||||
let mapped = self.map_video(video);
|
||||
let mapped = self.map_video(*video);
|
||||
self.items.push(mapped);
|
||||
}
|
||||
YouTubeListItem::ReelItemRenderer(video) => {
|
||||
|
|
|
|||
|
|
@ -5,14 +5,14 @@ use serde::Serialize;
|
|||
use crate::{
|
||||
error::{Error, ExtractionError},
|
||||
model::{
|
||||
SearchResult, YouTubeItem,
|
||||
paginator::{ContinuationEndpoint, Paginator},
|
||||
traits::FromYtItem,
|
||||
SearchResult, YouTubeItem,
|
||||
},
|
||||
param::search_filter::SearchFilter,
|
||||
};
|
||||
|
||||
use super::{response, ClientType, MapRespCtx, MapResponse, MapResult, RustyPipeQuery};
|
||||
use super::{ClientType, MapRespCtx, MapResponse, MapResult, RustyPipeQuery, response};
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
|
@ -143,7 +143,7 @@ mod tests {
|
|||
use rstest::rstest;
|
||||
|
||||
use crate::{
|
||||
client::{response, MapRespCtx, MapResponse},
|
||||
client::{MapRespCtx, MapResponse, response},
|
||||
model::{SearchResult, YouTubeItem},
|
||||
serializer::MapResult,
|
||||
util::tests::TESTFILES,
|
||||
|
|
@ -153,6 +153,7 @@ mod tests {
|
|||
#[case::default("default")]
|
||||
#[case::playlists("playlists")]
|
||||
#[case::empty("empty")]
|
||||
#[case::featuring("featuring")]
|
||||
#[case::ab3_channel_handles("20221121_AB3_channel_handles")]
|
||||
fn t_map_search(#[case] name: &str) {
|
||||
let json_path = path!(*TESTFILES / "search" / format!("{name}.json"));
|
||||
|
|
|
|||
|
|
@ -128,6 +128,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 1 year ago"),
|
||||
view_count: Some(28847),
|
||||
|
|
@ -169,6 +170,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(24182),
|
||||
|
|
@ -210,6 +212,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(23565),
|
||||
|
|
@ -251,6 +254,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(25015),
|
||||
|
|
@ -292,6 +296,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(8752),
|
||||
|
|
@ -333,6 +338,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(9189),
|
||||
|
|
@ -374,6 +380,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(17241),
|
||||
|
|
@ -415,6 +422,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(47171),
|
||||
|
|
@ -456,6 +464,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(23998),
|
||||
|
|
@ -497,6 +506,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(36880),
|
||||
|
|
@ -538,6 +548,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(49061),
|
||||
|
|
@ -579,6 +590,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(13210),
|
||||
|
|
@ -620,6 +632,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(37927),
|
||||
|
|
@ -661,6 +674,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 5 years ago"),
|
||||
view_count: Some(18865),
|
||||
|
|
@ -702,6 +716,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 5 years ago"),
|
||||
view_count: Some(72807),
|
||||
|
|
@ -743,6 +758,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 5 years ago"),
|
||||
view_count: Some(61173),
|
||||
|
|
@ -784,6 +800,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 6 years ago"),
|
||||
view_count: Some(13529),
|
||||
|
|
@ -825,6 +842,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 6 years ago"),
|
||||
view_count: Some(6536),
|
||||
|
|
@ -866,6 +884,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 6 years ago"),
|
||||
view_count: Some(14472),
|
||||
|
|
@ -907,6 +926,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 6 years ago"),
|
||||
view_count: Some(21240),
|
||||
|
|
@ -948,6 +968,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 6 years ago"),
|
||||
view_count: Some(30840),
|
||||
|
|
@ -989,6 +1010,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 6 years ago"),
|
||||
view_count: Some(34258),
|
||||
|
|
@ -1030,6 +1052,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 6 years ago"),
|
||||
view_count: Some(26864),
|
||||
|
|
@ -1071,6 +1094,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 6 years ago"),
|
||||
view_count: Some(10757),
|
||||
|
|
@ -1112,6 +1136,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 7 years ago"),
|
||||
view_count: Some(21599),
|
||||
|
|
@ -1153,6 +1178,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 7 years ago"),
|
||||
view_count: Some(23010),
|
||||
|
|
@ -1194,6 +1220,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 7 years ago"),
|
||||
view_count: Some(24056),
|
||||
|
|
@ -1235,6 +1262,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 7 years ago"),
|
||||
view_count: Some(41211),
|
||||
|
|
@ -1276,6 +1304,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 8 years ago"),
|
||||
view_count: Some(25316),
|
||||
|
|
@ -1317,6 +1346,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(884000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 8 years ago"),
|
||||
view_count: Some(11747),
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1300000),
|
||||
|
|
@ -110,6 +111,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3000000),
|
||||
|
|
@ -136,6 +138,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(6400000),
|
||||
|
|
@ -162,6 +165,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(935000),
|
||||
|
|
@ -188,6 +192,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3000000),
|
||||
|
|
@ -214,6 +219,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3300000),
|
||||
|
|
@ -240,6 +246,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1800000),
|
||||
|
|
@ -266,6 +273,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2400000),
|
||||
|
|
@ -292,6 +300,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3000000),
|
||||
|
|
@ -318,6 +327,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1900000),
|
||||
|
|
@ -344,6 +354,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3100000),
|
||||
|
|
@ -370,6 +381,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2800000),
|
||||
|
|
@ -396,6 +408,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2400000),
|
||||
|
|
@ -422,6 +435,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(6700000),
|
||||
|
|
@ -448,6 +462,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2900000),
|
||||
|
|
@ -474,6 +489,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(4700000),
|
||||
|
|
@ -500,6 +516,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1500000),
|
||||
|
|
@ -526,6 +543,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3700000),
|
||||
|
|
@ -552,6 +570,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1600000),
|
||||
|
|
@ -578,6 +597,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(982000),
|
||||
|
|
@ -604,6 +624,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1700000),
|
||||
|
|
@ -630,6 +651,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1400000),
|
||||
|
|
@ -656,6 +678,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2200000),
|
||||
|
|
@ -682,6 +705,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1500000),
|
||||
|
|
@ -708,6 +732,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2500000),
|
||||
|
|
@ -734,6 +759,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1700000),
|
||||
|
|
@ -760,6 +786,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3600000),
|
||||
|
|
@ -786,6 +813,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1500000),
|
||||
|
|
@ -812,6 +840,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(4100000),
|
||||
|
|
@ -838,6 +867,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1600000),
|
||||
|
|
@ -864,6 +894,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(980000),
|
||||
|
|
@ -890,6 +921,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1600000),
|
||||
|
|
@ -916,6 +948,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2600000),
|
||||
|
|
@ -942,6 +975,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(9300000),
|
||||
|
|
@ -968,6 +1002,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(529000),
|
||||
|
|
@ -994,6 +1029,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1200000),
|
||||
|
|
@ -1020,6 +1056,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1500000),
|
||||
|
|
@ -1046,6 +1083,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(5700000),
|
||||
|
|
@ -1072,6 +1110,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2100000),
|
||||
|
|
@ -1098,6 +1137,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3200000),
|
||||
|
|
@ -1124,6 +1164,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(4400000),
|
||||
|
|
@ -1150,6 +1191,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1200000),
|
||||
|
|
@ -1176,6 +1218,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2700000),
|
||||
|
|
@ -1202,6 +1245,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1200000),
|
||||
|
|
@ -1228,6 +1272,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(6600000),
|
||||
|
|
@ -1254,6 +1299,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2700000),
|
||||
|
|
@ -1280,6 +1326,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1800000),
|
||||
|
|
@ -1306,6 +1353,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3360000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1600000),
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(835000),
|
||||
|
|
@ -110,6 +111,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(932000),
|
||||
|
|
@ -136,6 +138,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1200000),
|
||||
|
|
@ -162,6 +165,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(906000),
|
||||
|
|
@ -188,6 +192,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1300000),
|
||||
|
|
@ -214,6 +219,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(409000),
|
||||
|
|
@ -240,6 +246,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1000000),
|
||||
|
|
@ -266,6 +273,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(895000),
|
||||
|
|
@ -292,6 +300,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(696000),
|
||||
|
|
@ -318,6 +327,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1200000),
|
||||
|
|
@ -344,6 +354,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2500000),
|
||||
|
|
@ -370,6 +381,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1400000),
|
||||
|
|
@ -396,6 +408,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1200000),
|
||||
|
|
@ -422,6 +435,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1800000),
|
||||
|
|
@ -448,6 +462,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(5400000),
|
||||
|
|
@ -474,6 +489,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1700000),
|
||||
|
|
@ -500,6 +516,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(780000),
|
||||
|
|
@ -526,6 +543,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(961000),
|
||||
|
|
@ -552,6 +570,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1000000),
|
||||
|
|
@ -578,6 +597,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(835000),
|
||||
|
|
@ -604,6 +624,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3900000),
|
||||
|
|
@ -630,6 +651,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2100000),
|
||||
|
|
@ -656,6 +678,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3100000),
|
||||
|
|
@ -682,6 +705,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1300000),
|
||||
|
|
@ -708,6 +732,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2300000),
|
||||
|
|
@ -734,6 +759,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3700000),
|
||||
|
|
@ -760,6 +786,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2900000),
|
||||
|
|
@ -786,6 +813,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(5500000),
|
||||
|
|
@ -812,6 +840,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(16000000),
|
||||
|
|
@ -838,6 +867,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1500000),
|
||||
|
|
@ -864,6 +894,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(4100000),
|
||||
|
|
@ -890,6 +921,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(7100000),
|
||||
|
|
@ -916,6 +948,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2700000),
|
||||
|
|
@ -942,6 +975,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3200000),
|
||||
|
|
@ -968,6 +1002,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3600000),
|
||||
|
|
@ -994,6 +1029,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2500000),
|
||||
|
|
@ -1020,6 +1056,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(4300000),
|
||||
|
|
@ -1046,6 +1083,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(4200000),
|
||||
|
|
@ -1072,6 +1110,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3500000),
|
||||
|
|
@ -1098,6 +1137,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(11000000),
|
||||
|
|
@ -1124,6 +1164,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(3400000),
|
||||
|
|
@ -1150,6 +1191,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(5300000),
|
||||
|
|
@ -1176,6 +1218,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1800000),
|
||||
|
|
@ -1202,6 +1245,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(4800000),
|
||||
|
|
@ -1228,6 +1272,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1900000),
|
||||
|
|
@ -1254,6 +1299,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1100000),
|
||||
|
|
@ -1280,6 +1326,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1900000),
|
||||
|
|
@ -1306,6 +1353,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(3740000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(1600000),
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -99,6 +99,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 hours ago"),
|
||||
view_count: Some(142423),
|
||||
|
|
@ -140,6 +141,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 days ago"),
|
||||
view_count: Some(989763),
|
||||
|
|
@ -181,6 +183,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(355470),
|
||||
|
|
@ -222,6 +225,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(697188),
|
||||
|
|
@ -263,6 +267,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 weeks ago"),
|
||||
view_count: Some(529586),
|
||||
|
|
@ -304,6 +309,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(1066729),
|
||||
|
|
@ -345,6 +351,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(525663),
|
||||
|
|
@ -386,6 +393,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(717806),
|
||||
|
|
@ -427,6 +435,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(624673),
|
||||
|
|
@ -468,6 +477,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(924135),
|
||||
|
|
@ -509,6 +519,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(1053353),
|
||||
|
|
@ -550,6 +561,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(697242),
|
||||
|
|
@ -591,6 +603,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(1086097),
|
||||
|
|
@ -632,6 +645,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(528979),
|
||||
|
|
@ -673,6 +687,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(1036890),
|
||||
|
|
@ -714,6 +729,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(832542),
|
||||
|
|
@ -755,6 +771,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(1342882),
|
||||
|
|
@ -796,6 +813,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(1076848),
|
||||
|
|
@ -837,6 +855,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(562349),
|
||||
|
|
@ -878,6 +897,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(531938),
|
||||
|
|
@ -919,6 +939,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(426469),
|
||||
|
|
@ -960,6 +981,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(448915),
|
||||
|
|
@ -1001,6 +1023,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(675443),
|
||||
|
|
@ -1042,6 +1065,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(426465),
|
||||
|
|
@ -1083,6 +1107,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(1137831),
|
||||
|
|
@ -1124,6 +1149,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(612275),
|
||||
|
|
@ -1165,6 +1191,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(396397),
|
||||
|
|
@ -1206,6 +1233,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(599030),
|
||||
|
|
@ -1247,6 +1275,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(530192),
|
||||
|
|
@ -1288,6 +1317,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2930000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 months ago"),
|
||||
view_count: Some(567604),
|
||||
|
|
|
|||
|
|
@ -128,6 +128,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 day ago"),
|
||||
view_count: Some(8813),
|
||||
|
|
@ -169,6 +170,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 days ago"),
|
||||
view_count: Some(48599),
|
||||
|
|
@ -210,6 +212,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 days ago"),
|
||||
view_count: Some(74126),
|
||||
|
|
@ -251,6 +254,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 days ago"),
|
||||
view_count: Some(36129),
|
||||
|
|
@ -292,6 +296,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(87357),
|
||||
|
|
@ -333,6 +338,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(48259),
|
||||
|
|
@ -374,6 +380,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(27509),
|
||||
|
|
@ -415,6 +422,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(57925),
|
||||
|
|
@ -456,6 +464,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(77907),
|
||||
|
|
@ -497,6 +506,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(63421),
|
||||
|
|
@ -538,6 +548,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(73052),
|
||||
|
|
@ -579,6 +590,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(93529),
|
||||
|
|
@ -620,6 +632,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(41569),
|
||||
|
|
@ -661,6 +674,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(22842),
|
||||
|
|
@ -702,6 +716,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(41621),
|
||||
|
|
@ -743,6 +758,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(77542),
|
||||
|
|
@ -784,6 +800,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(34947),
|
||||
|
|
@ -825,6 +842,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(45618),
|
||||
|
|
@ -866,6 +884,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(34868),
|
||||
|
|
@ -907,6 +926,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(64336),
|
||||
|
|
@ -948,6 +968,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(150958),
|
||||
|
|
@ -989,6 +1010,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(30903),
|
||||
|
|
@ -1030,6 +1052,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(48669),
|
||||
|
|
@ -1071,6 +1094,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(83505),
|
||||
|
|
@ -1112,6 +1136,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(42843),
|
||||
|
|
@ -1153,6 +1178,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(26036),
|
||||
|
|
@ -1194,6 +1220,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(63729),
|
||||
|
|
@ -1235,6 +1262,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(22920),
|
||||
|
|
@ -1276,6 +1304,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(66042),
|
||||
|
|
@ -1317,6 +1346,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(883000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(52065),
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 hours ago"),
|
||||
view_count: Some(18243),
|
||||
|
|
@ -114,6 +115,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 hours ago"),
|
||||
view_count: Some(22085),
|
||||
|
|
@ -155,6 +157,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 hours ago"),
|
||||
view_count: Some(12816),
|
||||
|
|
@ -196,6 +199,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 hours ago"),
|
||||
view_count: Some(5648),
|
||||
|
|
@ -237,6 +241,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 hours ago"),
|
||||
view_count: Some(21741),
|
||||
|
|
@ -278,6 +283,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 hours ago"),
|
||||
view_count: Some(8090),
|
||||
|
|
@ -319,6 +325,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 hours ago"),
|
||||
view_count: Some(19118),
|
||||
|
|
@ -360,6 +367,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 hours ago"),
|
||||
view_count: Some(13697),
|
||||
|
|
@ -401,6 +409,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 hours ago"),
|
||||
view_count: Some(293675),
|
||||
|
|
@ -442,6 +451,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 hours ago"),
|
||||
view_count: Some(230150),
|
||||
|
|
@ -483,6 +493,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 days ago"),
|
||||
view_count: Some(19046),
|
||||
|
|
@ -524,6 +535,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 days ago"),
|
||||
view_count: Some(487186),
|
||||
|
|
@ -565,6 +577,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 weeks ago"),
|
||||
view_count: Some(8763),
|
||||
|
|
@ -606,6 +619,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(712644),
|
||||
|
|
@ -647,6 +661,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(6701),
|
||||
|
|
@ -688,6 +703,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(7898),
|
||||
|
|
@ -729,6 +745,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(8503),
|
||||
|
|
@ -770,6 +787,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(2155),
|
||||
|
|
@ -811,6 +829,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(3050),
|
||||
|
|
@ -852,6 +871,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(16468),
|
||||
|
|
@ -893,6 +913,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(91744),
|
||||
|
|
@ -934,6 +955,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(3921),
|
||||
|
|
@ -975,6 +997,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(2924),
|
||||
|
|
@ -1016,6 +1039,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(36043),
|
||||
|
|
@ -1057,6 +1081,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(966),
|
||||
|
|
@ -1098,6 +1123,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(6601),
|
||||
|
|
@ -1139,6 +1165,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(39401),
|
||||
|
|
@ -1180,6 +1207,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(2111),
|
||||
|
|
@ -1221,6 +1249,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(6124),
|
||||
|
|
@ -1262,6 +1291,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2710000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(2944),
|
||||
|
|
|
|||
|
|
@ -128,6 +128,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 days ago"),
|
||||
view_count: Some(27799),
|
||||
|
|
@ -169,6 +170,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(34723),
|
||||
|
|
@ -210,6 +212,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(60589),
|
||||
|
|
@ -251,6 +254,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(48158),
|
||||
|
|
@ -292,6 +296,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 weeks ago"),
|
||||
view_count: Some(23312),
|
||||
|
|
@ -333,6 +338,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(70912),
|
||||
|
|
@ -374,6 +380,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(45396),
|
||||
|
|
@ -415,6 +422,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(54864),
|
||||
|
|
@ -456,6 +464,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(145453),
|
||||
|
|
@ -497,6 +506,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(37347),
|
||||
|
|
@ -538,6 +548,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(145315),
|
||||
|
|
@ -579,6 +590,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(73277),
|
||||
|
|
@ -620,6 +632,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(24722),
|
||||
|
|
@ -661,6 +674,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(51408),
|
||||
|
|
@ -702,6 +716,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(48969),
|
||||
|
|
@ -743,6 +758,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(49405),
|
||||
|
|
@ -784,6 +800,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(24160),
|
||||
|
|
@ -825,6 +842,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(56586),
|
||||
|
|
@ -866,6 +884,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(21250),
|
||||
|
|
@ -907,6 +926,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(23126),
|
||||
|
|
@ -948,6 +968,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(42940),
|
||||
|
|
@ -989,6 +1010,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(48996),
|
||||
|
|
@ -1030,6 +1052,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(49899),
|
||||
|
|
@ -1071,6 +1094,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(24076),
|
||||
|
|
@ -1112,6 +1136,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(149964),
|
||||
|
|
@ -1153,6 +1178,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(52290),
|
||||
|
|
@ -1194,6 +1220,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(29462),
|
||||
|
|
@ -1235,6 +1262,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(116169),
|
||||
|
|
@ -1276,6 +1304,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(40487),
|
||||
|
|
@ -1317,6 +1346,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(933000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(17237),
|
||||
|
|
|
|||
|
|
@ -128,6 +128,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("20 hours ago"),
|
||||
view_count: Some(19739),
|
||||
|
|
@ -169,6 +170,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 days ago"),
|
||||
view_count: Some(24194),
|
||||
|
|
@ -210,6 +212,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 days ago"),
|
||||
view_count: Some(51443),
|
||||
|
|
@ -251,6 +254,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 days ago"),
|
||||
view_count: Some(72324),
|
||||
|
|
@ -292,6 +296,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(57348),
|
||||
|
|
@ -333,6 +338,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(68645),
|
||||
|
|
@ -374,6 +380,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(91388),
|
||||
|
|
@ -415,6 +422,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(39993),
|
||||
|
|
@ -456,6 +464,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 weeks ago"),
|
||||
view_count: Some(22512),
|
||||
|
|
@ -497,6 +506,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(40137),
|
||||
|
|
@ -538,6 +548,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(74510),
|
||||
|
|
@ -579,6 +590,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(34487),
|
||||
|
|
@ -620,6 +632,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(44928),
|
||||
|
|
@ -661,6 +674,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(34324),
|
||||
|
|
@ -702,6 +716,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(63763),
|
||||
|
|
@ -743,6 +758,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(149186),
|
||||
|
|
@ -784,6 +800,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(30130),
|
||||
|
|
@ -825,6 +842,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(48037),
|
||||
|
|
@ -866,6 +884,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(81958),
|
||||
|
|
@ -907,6 +926,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(42635),
|
||||
|
|
@ -948,6 +968,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(25860),
|
||||
|
|
@ -989,6 +1010,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(63035),
|
||||
|
|
@ -1030,6 +1052,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(22731),
|
||||
|
|
@ -1071,6 +1094,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(65765),
|
||||
|
|
@ -1112,6 +1136,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(51555),
|
||||
|
|
@ -1153,6 +1178,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(46638),
|
||||
|
|
@ -1194,6 +1220,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(62921),
|
||||
|
|
@ -1235,6 +1262,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(66895),
|
||||
|
|
@ -1276,6 +1304,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(25894),
|
||||
|
|
@ -1317,6 +1346,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(880000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(80173),
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(94),
|
||||
|
|
@ -153,6 +154,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(381),
|
||||
|
|
@ -194,6 +196,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(241528),
|
||||
|
|
@ -235,6 +238,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(118351),
|
||||
|
|
@ -276,6 +280,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(157971),
|
||||
|
|
@ -317,6 +322,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(82309),
|
||||
|
|
@ -358,6 +364,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(2043),
|
||||
|
|
@ -399,6 +406,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(186475),
|
||||
|
|
@ -440,6 +448,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(66425),
|
||||
|
|
@ -481,6 +490,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(1520020),
|
||||
|
|
@ -522,6 +532,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(37549),
|
||||
|
|
@ -563,6 +574,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(33002),
|
||||
|
|
@ -604,6 +616,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(42036),
|
||||
|
|
@ -645,6 +658,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(322935),
|
||||
|
|
@ -686,6 +700,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(91980),
|
||||
|
|
@ -727,6 +742,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(4030),
|
||||
|
|
@ -768,6 +784,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(288098),
|
||||
|
|
@ -809,6 +826,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(50818),
|
||||
|
|
@ -850,6 +868,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(98431),
|
||||
|
|
@ -891,6 +910,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 years ago"),
|
||||
view_count: Some(572456),
|
||||
|
|
@ -932,6 +952,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(760000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 years ago"),
|
||||
view_count: Some(3114909),
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 day ago"),
|
||||
view_count: Some(443549),
|
||||
|
|
@ -110,6 +111,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 days ago"),
|
||||
view_count: Some(1154962),
|
||||
|
|
@ -151,6 +153,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 days ago"),
|
||||
view_count: Some(477460),
|
||||
|
|
@ -177,6 +180,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 days ago"),
|
||||
view_count: Some(1388173),
|
||||
|
|
@ -203,6 +207,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 days ago"),
|
||||
view_count: Some(1738301),
|
||||
|
|
@ -229,6 +234,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 days ago"),
|
||||
view_count: Some(1316594),
|
||||
|
|
@ -270,6 +276,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 days ago"),
|
||||
view_count: Some(478703),
|
||||
|
|
@ -296,6 +303,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 days ago"),
|
||||
view_count: Some(1412213),
|
||||
|
|
@ -322,6 +330,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 days ago"),
|
||||
view_count: Some(1513305),
|
||||
|
|
@ -348,6 +357,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(8936223),
|
||||
|
|
@ -389,6 +399,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(987083),
|
||||
|
|
@ -415,6 +426,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(2769717),
|
||||
|
|
@ -456,6 +468,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(497660),
|
||||
|
|
@ -482,6 +495,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(572107),
|
||||
|
|
@ -508,6 +522,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(1707132),
|
||||
|
|
@ -534,6 +549,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(933094),
|
||||
|
|
@ -560,6 +576,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(5985184),
|
||||
|
|
@ -586,6 +603,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(14741387),
|
||||
|
|
@ -612,6 +630,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(2511322),
|
||||
|
|
@ -638,6 +657,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(2364408),
|
||||
|
|
@ -679,6 +699,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(706059),
|
||||
|
|
@ -705,6 +726,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(1947627),
|
||||
|
|
@ -731,6 +753,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(4763839),
|
||||
|
|
@ -757,6 +780,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(1915695),
|
||||
|
|
@ -783,6 +807,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(7268944),
|
||||
|
|
@ -809,6 +834,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(2539103),
|
||||
|
|
@ -835,6 +861,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(5545680),
|
||||
|
|
@ -861,6 +888,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(2202314),
|
||||
|
|
@ -902,6 +930,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(613416),
|
||||
|
|
@ -928,6 +957,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(2840000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(6443699),
|
||||
|
|
|
|||
|
|
@ -116,6 +116,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: Some("2022-09-27T16:00:00Z"),
|
||||
publish_date_txt: None,
|
||||
view_count: Some(237),
|
||||
|
|
@ -157,6 +158,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 days ago"),
|
||||
view_count: Some(742284),
|
||||
|
|
@ -198,6 +200,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(420368),
|
||||
|
|
@ -239,6 +242,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(528718),
|
||||
|
|
@ -280,6 +284,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(897237),
|
||||
|
|
@ -321,6 +326,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(526638),
|
||||
|
|
@ -362,6 +368,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(368801),
|
||||
|
|
@ -403,6 +410,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(286737),
|
||||
|
|
@ -444,6 +452,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(664499),
|
||||
|
|
@ -485,6 +494,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(592227),
|
||||
|
|
@ -526,6 +536,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(396946),
|
||||
|
|
@ -567,6 +578,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(778430),
|
||||
|
|
@ -608,6 +620,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(2118499),
|
||||
|
|
@ -649,6 +662,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(525824),
|
||||
|
|
@ -690,6 +704,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(1097056),
|
||||
|
|
@ -731,6 +746,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(1532114),
|
||||
|
|
@ -772,6 +788,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(511601),
|
||||
|
|
@ -813,6 +830,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(662099),
|
||||
|
|
@ -854,6 +872,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(549826),
|
||||
|
|
@ -895,6 +914,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(538197),
|
||||
|
|
@ -936,6 +956,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(536648),
|
||||
|
|
@ -977,6 +998,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(724630),
|
||||
|
|
@ -1018,6 +1040,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(426960),
|
||||
|
|
@ -1059,6 +1082,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(735941),
|
||||
|
|
@ -1100,6 +1124,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(502205),
|
||||
|
|
@ -1141,6 +1166,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(718668),
|
||||
|
|
@ -1182,6 +1208,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(775830),
|
||||
|
|
@ -1223,6 +1250,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(480357),
|
||||
|
|
@ -1264,6 +1292,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(460878),
|
||||
|
|
@ -1305,6 +1334,7 @@ Channel(
|
|||
verification: verified,
|
||||
subscriber_count: Some(947000),
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(228151),
|
||||
|
|
|
|||
|
|
@ -32,7 +32,25 @@ MusicArtist(
|
|||
height: 1200,
|
||||
),
|
||||
],
|
||||
description: Some("Edward Christopher Sheeran MBE is an English singer-songwriter. Born in Halifax, West Yorkshire, and raised in Framlingham, Suffolk, he began writing songs around the age of eleven. In early 2011, Sheeran independently released the extended play No. 5 Collaborations Project. He signed with Asylum Records the same year.\nSheeran\'s debut album, +, was released in September 2011 and topped the UK Albums Chart. It contained his first hit single \"The A Team\". In 2012, Sheeran won the Brit Awards for Best British Male Solo Artist and British Breakthrough Act. Sheeran\'s second studio album, ×, topped charts around the world upon its release in June 2014. It was named the second-best-selling album worldwide of 2015. In the same year, × won Album of the Year at the 2015 Brit Awards, and he received the Ivor Novello Award for Songwriter of the Year from the British Academy of Songwriters, Composers and Authors. A single from ×, \"Thinking Out Loud\", earned him the 2016 Grammy Awards for Song of the Year and Best Pop Solo Performance.\nSheeran\'s third album, ÷, was released in March 2017, and was the best-selling album worldwide of 2017.\n\nFrom Wikipedia (https://en.wikipedia.org/wiki/Ed_Sheeran) under Creative Commons Attribution CC-BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/legalcode)"),
|
||||
description: Some(RichText([
|
||||
Text(
|
||||
text: "Edward Christopher Sheeran is an English singer-songwriter and musician. Born in Halifax, West Yorkshire, and raised in Framlingham, Suffolk, he began writing songs around the age of eleven. In early 2011, Sheeran independently released the extended play No. 5 Collaborations Project. He signed with Asylum Records the same year.\nSheeran\'s debut album, +, was released on 9 September 2011 and topped the UK Albums Chart. It contained his first hit single, \"The A Team\". In 2012, Sheeran won the Brit Awards for Best British Male Solo Artist and British Breakthrough Act. Sheeran\'s second studio album, ×, topped charts around the world upon its release in June 2014. It was named the second-best-selling album worldwide of 2015. In the same year, × won Album of the Year at the 2015 Brit Awards, and he received the Ivor Novello Award for Songwriter of the Year from the British Academy of Songwriters, Composers and Authors. A single from ×, \"Thinking Out Loud\", earned him the 2016 Grammy Awards for Song of the Year and Best Pop Solo Performance.\nSheeran\'s third album, ÷, was released in March 2017 and was the best-selling album worldwide of 2017.\n\nFrom Wikipedia (",
|
||||
),
|
||||
Web(
|
||||
text: "https://en.wikipedia.org/wiki/Ed_Sheeran",
|
||||
url: "https://en.wikipedia.org/wiki/Ed_Sheeran",
|
||||
),
|
||||
Text(
|
||||
text: ") under Creative Commons Attribution CC-BY-SA 3.0 (",
|
||||
),
|
||||
Web(
|
||||
text: "http://creativecommons.org/licenses/b...",
|
||||
url: "http://creativecommons.org/licenses/by-sa/3.0/legalcode",
|
||||
),
|
||||
Text(
|
||||
text: ")",
|
||||
),
|
||||
])),
|
||||
wikipedia_url: Some("https://en.wikipedia.org/wiki/Ed_Sheeran"),
|
||||
subscriber_count: Some(55300000),
|
||||
tracks: [
|
||||
|
|
|
|||
|
|
@ -32,7 +32,25 @@ MusicArtist(
|
|||
height: 1200,
|
||||
),
|
||||
],
|
||||
description: Some("Edward Christopher Sheeran MBE is an English singer-songwriter. Born in Halifax, West Yorkshire, and raised in Framlingham, Suffolk, he began writing songs around the age of eleven. In early 2011, Sheeran independently released the extended play No. 5 Collaborations Project. He signed with Asylum Records the same year.\nSheeran\'s debut album, +, was released in September 2011 and topped the UK Albums Chart. It contained his first hit single \"The A Team\". In 2012, Sheeran won the Brit Awards for Best British Male Solo Artist and British Breakthrough Act. Sheeran\'s second studio album, ×, topped charts around the world upon its release in June 2014. It was named the second-best-selling album worldwide of 2015. In the same year, × won Album of the Year at the 2015 Brit Awards, and he received the Ivor Novello Award for Songwriter of the Year from the British Academy of Songwriters, Composers and Authors. A single from ×, \"Thinking Out Loud\", earned him the 2016 Grammy Awards for Song of the Year and Best Pop Solo Performance.\nSheeran\'s third album, ÷, was released in March 2017, and was the best-selling album worldwide of 2017.\n\nFrom Wikipedia (https://en.wikipedia.org/wiki/Ed_Sheeran) under Creative Commons Attribution CC-BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/legalcode)"),
|
||||
description: Some(RichText([
|
||||
Text(
|
||||
text: "Edward Christopher Sheeran is an English singer-songwriter and musician. Born in Halifax, West Yorkshire, and raised in Framlingham, Suffolk, he began writing songs around the age of eleven. In early 2011, Sheeran independently released the extended play No. 5 Collaborations Project. He signed with Asylum Records the same year.\nSheeran\'s debut album, +, was released on 9 September 2011 and topped the UK Albums Chart. It contained his first hit single, \"The A Team\". In 2012, Sheeran won the Brit Awards for Best British Male Solo Artist and British Breakthrough Act. Sheeran\'s second studio album, ×, topped charts around the world upon its release in June 2014. It was named the second-best-selling album worldwide of 2015. In the same year, × won Album of the Year at the 2015 Brit Awards, and he received the Ivor Novello Award for Songwriter of the Year from the British Academy of Songwriters, Composers and Authors. A single from ×, \"Thinking Out Loud\", earned him the 2016 Grammy Awards for Song of the Year and Best Pop Solo Performance.\nSheeran\'s third album, ÷, was released in March 2017 and was the best-selling album worldwide of 2017.\n\nFrom Wikipedia (",
|
||||
),
|
||||
Web(
|
||||
text: "https://en.wikipedia.org/wiki/Ed_Sheeran",
|
||||
url: "https://en.wikipedia.org/wiki/Ed_Sheeran",
|
||||
),
|
||||
Text(
|
||||
text: ") under Creative Commons Attribution CC-BY-SA 3.0 (",
|
||||
),
|
||||
Web(
|
||||
text: "http://creativecommons.org/licenses/b...",
|
||||
url: "http://creativecommons.org/licenses/by-sa/3.0/legalcode",
|
||||
),
|
||||
Text(
|
||||
text: ")",
|
||||
),
|
||||
])),
|
||||
wikipedia_url: Some("https://en.wikipedia.org/wiki/Ed_Sheeran"),
|
||||
subscriber_count: Some(55300000),
|
||||
tracks: [
|
||||
|
|
|
|||
|
|
@ -32,7 +32,12 @@ MusicArtist(
|
|||
height: 1200,
|
||||
),
|
||||
],
|
||||
description: Some("ImagineDragons.lnk.to/Mercury"),
|
||||
description: Some(RichText([
|
||||
Web(
|
||||
text: "https://imaginedragons.lnk.to/EyesClosed",
|
||||
url: "https://imaginedragons.lnk.to/EyesClosed",
|
||||
),
|
||||
])),
|
||||
wikipedia_url: None,
|
||||
subscriber_count: Some(30400000),
|
||||
tracks: [
|
||||
|
|
|
|||
|
|
@ -32,7 +32,25 @@ MusicArtist(
|
|||
height: 1200,
|
||||
),
|
||||
],
|
||||
description: Some("Choi Jin-ri, better known by her stage name Sulli, was a South Korean actress and singer. She first made her debut as a child actress, appearing as a supporting cast member on the SBS historical drama Ballad of Seodong. Following this, she earned a number of guest roles, appearing in the television series Love Needs a Miracle and Drama City, and the film Vacation. She then subsequently appeared in the independent films Punch Lady and BA:BO, the former being her first time cast in a substantial dramatic role.\nAfter signing a record deal with SM Entertainment, Sulli rose to prominence as a member of the girl group f(x) formed in 2009. The group achieved both critical and commercial success, with four Korean number-one singles and international recognition after becoming the first K-pop act to perform at SXSW. Concurrently with her music career, Sulli returned to acting by starring in the SBS romantic comedy series, To the Beautiful You, a Korean adaptation of the shōjo manga Hana-Kimi where her performance was positively received and earned her two SBS Drama Awards and a nomination at the 49th Paeksang Arts Awards.\n\nFrom Wikipedia (https://en.wikipedia.org/wiki/Sulli) under Creative Commons Attribution CC-BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/legalcode)"),
|
||||
description: Some(RichText([
|
||||
Text(
|
||||
text: "Choi Jin-ri, known professionally as Sulli, was a South Korean singer and actress. She first made her debut as a child actress, appearing as a supporting cast member on the SBS historical drama Ballad of Seodong. Following this, she earned a number of guest roles, appearing in the television series Love Needs a Miracle and Drama City, and the film Vacation. She then subsequently appeared in the independent films Punch Lady and BA:BO, the former being her first time cast in a substantial dramatic role.\nAfter signing a record deal with SM Entertainment, Sulli rose to prominence as a member of the girl group f(x) formed in 2009. The group achieved both critical and commercial success, with four Korean number-one singles and international recognition after becoming the first K-pop act to perform at SXSW. Concurrently with her music career, Sulli returned to acting by starring in the SBS romantic comedy series, To the Beautiful You, a Korean adaptation of the shōjo manga Hana-Kimi where her performance was positively received and earned her two SBS Drama Awards and a nomination at the 49th Paeksang Arts Awards.\n\nFrom Wikipedia (",
|
||||
),
|
||||
Web(
|
||||
text: "https://en.wikipedia.org/wiki/Sulli",
|
||||
url: "https://en.wikipedia.org/wiki/Sulli",
|
||||
),
|
||||
Text(
|
||||
text: ") under Creative Commons Attribution CC-BY-SA 3.0 (",
|
||||
),
|
||||
Web(
|
||||
text: "http://creativecommons.org/licenses/b...",
|
||||
url: "http://creativecommons.org/licenses/by-sa/3.0/legalcode",
|
||||
),
|
||||
Text(
|
||||
text: ")",
|
||||
),
|
||||
])),
|
||||
wikipedia_url: Some("https://en.wikipedia.org/wiki/Sulli"),
|
||||
subscriber_count: Some(80800),
|
||||
tracks: [
|
||||
|
|
|
|||
|
|
@ -0,0 +1,43 @@
|
|||
---
|
||||
source: src/client/music_details.rs
|
||||
expression: map_res.c
|
||||
---
|
||||
TrackDetails(
|
||||
track: TrackItem(
|
||||
id: "ZeerrnuLi5E",
|
||||
name: "Black Mamba",
|
||||
duration: Some(230),
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/ZeerrnuLi5E/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3maNxpYzTFmXZBd8s1w1iE6rTBDaw",
|
||||
width: 400,
|
||||
height: 225,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/ZeerrnuLi5E/hq720.jpg?sqp=-oaymwEXCKAGEMIDIAQqCwjVARCqCBh4INgESFo&rs=AMzJL3k5q17nduJ8-t3h9_obEVMVi8Cz3A",
|
||||
width: 800,
|
||||
height: 450,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/ZeerrnuLi5E/hq720.jpg?sqp=-oaymwEXCNUGEOADIAQqCwjVARCqCBh4INgESFo&rs=AMzJL3k7CsaxHObhW1JXPtGyKE1fgSGZ3Q",
|
||||
width: 853,
|
||||
height: 480,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCEdZAdnnKqbaHOlv8nM6OtA"),
|
||||
name: "aespa",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCEdZAdnnKqbaHOlv8nM6OtA"),
|
||||
album: None,
|
||||
view_count: Some(290000000),
|
||||
track_type: video,
|
||||
track_nr: None,
|
||||
by_va: false,
|
||||
unavailable: false,
|
||||
),
|
||||
lyrics_id: Some("MPLYt_wrKjTn9hmry"),
|
||||
related_id: Some("MPTRt_wrKjTn9hmry"),
|
||||
)
|
||||
|
|
@ -0,0 +1,815 @@
|
|||
---
|
||||
source: src/client/music_search.rs
|
||||
expression: map_res.c
|
||||
---
|
||||
MusicSearchResult(
|
||||
items: Paginator(
|
||||
count: Some(30),
|
||||
items: [
|
||||
Artist(ArtistItem(
|
||||
id: "UCPC0L1d253x-KuMNwa05TpA",
|
||||
name: "Taylor Swift",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/RCpTA6EXJQyjVFDosWOKa2SMmqkua_lA9mHPDWWciLwgqpZLz-k8rXWRF_367trrQ7up9BUwCbk6kRk=w60-h60-p-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/RCpTA6EXJQyjVFDosWOKa2SMmqkua_lA9mHPDWWciLwgqpZLz-k8rXWRF_367trrQ7up9BUwCbk6kRk=w120-h120-p-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
subscriber_count: Some(375000000),
|
||||
)),
|
||||
Track(TrackItem(
|
||||
id: "7nVctvQVz0U",
|
||||
name: "The Fate of Ophelia",
|
||||
duration: Some(227),
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/ZpWD37EEQE_LVuQ_O03cRmz5mZA7jG0gKGLt-49uHNDX6DycysijGGSOX9woU-OfQR5jyahz3aEdmBmm3A=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/ZpWD37EEQE_LVuQ_O03cRmz5mZA7jG0gKGLt-49uHNDX6DycysijGGSOX9woU-OfQR5jyahz3aEdmBmm3A=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: None,
|
||||
name: "Song",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
album: None,
|
||||
view_count: Some(650000000),
|
||||
track_type: track,
|
||||
track_nr: None,
|
||||
by_va: false,
|
||||
unavailable: false,
|
||||
)),
|
||||
Track(TrackItem(
|
||||
id: "Qc0sEMYv620",
|
||||
name: "Out Of The Woods (Taylor\'s Version)",
|
||||
duration: Some(236),
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/gj8tAERbPzlAoLI6knG2Yv1JiB9kv_pFwckfFHWUS6RcnQonszeMyxTdDEdOxCRNFmMezvwEBeRPwNSy3Q=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/gj8tAERbPzlAoLI6knG2Yv1JiB9kv_pFwckfFHWUS6RcnQonszeMyxTdDEdOxCRNFmMezvwEBeRPwNSy3Q=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: None,
|
||||
name: "Song",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
album: None,
|
||||
view_count: Some(30000000),
|
||||
track_type: track,
|
||||
track_nr: None,
|
||||
by_va: false,
|
||||
unavailable: false,
|
||||
)),
|
||||
Track(TrackItem(
|
||||
id: "DDIcJUf3Al4",
|
||||
name: "Starlight",
|
||||
duration: Some(221),
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/4DDgDnCVMgPB8TBvd26Yt4gEvBN8zymEdEBnfRzjleANB6PdEe8ZcNWn_-sXMyAJ5_2egN8wYXOHf4F-=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/4DDgDnCVMgPB8TBvd26Yt4gEvBN8zymEdEBnfRzjleANB6PdEe8ZcNWn_-sXMyAJ5_2egN8wYXOHf4F-=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: None,
|
||||
name: "Song",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
album: None,
|
||||
view_count: Some(10000000),
|
||||
track_type: track,
|
||||
track_nr: None,
|
||||
by_va: false,
|
||||
unavailable: false,
|
||||
)),
|
||||
Album(AlbumItem(
|
||||
id: "MPREb_p6BGcsuOpGt",
|
||||
name: "The Life of a Showgirl",
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/ZpWD37EEQE_LVuQ_O03cRmz5mZA7jG0gKGLt-49uHNDX6DycysijGGSOX9woU-OfQR5jyahz3aEdmBmm3A=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/ZpWD37EEQE_LVuQ_O03cRmz5mZA7jG0gKGLt-49uHNDX6DycysijGGSOX9woU-OfQR5jyahz3aEdmBmm3A=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/ZpWD37EEQE_LVuQ_O03cRmz5mZA7jG0gKGLt-49uHNDX6DycysijGGSOX9woU-OfQR5jyahz3aEdmBmm3A=w226-h226-l90-rj",
|
||||
width: 226,
|
||||
height: 226,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/ZpWD37EEQE_LVuQ_O03cRmz5mZA7jG0gKGLt-49uHNDX6DycysijGGSOX9woU-OfQR5jyahz3aEdmBmm3A=w544-h544-l90-rj",
|
||||
width: 544,
|
||||
height: 544,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
name: "Taylor Swift",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
album_type: album,
|
||||
year: Some(2025),
|
||||
by_va: false,
|
||||
)),
|
||||
Playlist(MusicPlaylistItem(
|
||||
id: "RDCLAK5uy_mzXJjbWkgn116YtozMdS4kAgaPhjIWqBg",
|
||||
name: "Taylor Swift Eras Setlist",
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/A59BQG7X0v_lyJqDjqhq0G83r_Lck-7puOITTfhKc-khapWkrtOBNLwvp_fLy34e960OLIRyJ5zPEfw=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/A59BQG7X0v_lyJqDjqhq0G83r_Lck-7puOITTfhKc-khapWkrtOBNLwvp_fLy34e960OLIRyJ5zPEfw=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/A59BQG7X0v_lyJqDjqhq0G83r_Lck-7puOITTfhKc-khapWkrtOBNLwvp_fLy34e960OLIRyJ5zPEfw=w226-h226-l90-rj",
|
||||
width: 226,
|
||||
height: 226,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/A59BQG7X0v_lyJqDjqhq0G83r_Lck-7puOITTfhKc-khapWkrtOBNLwvp_fLy34e960OLIRyJ5zPEfw=w544-h544-l90-rj",
|
||||
width: 544,
|
||||
height: 544,
|
||||
),
|
||||
],
|
||||
channel: None,
|
||||
track_count: Some(44),
|
||||
from_ytm: true,
|
||||
is_podcast: false,
|
||||
)),
|
||||
Playlist(MusicPlaylistItem(
|
||||
id: "RDCLAK5uy_k1272v-yXtLJm7gmMiAxjOl-vh5aEC11A",
|
||||
name: "Presenting Taylor Swift",
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/jvshZlSlG9Kc5RRuzl-dT4RWigZeKhyg1pA1wE-zNOy5Wm2Du-ILxI-dbH-Fu-zA-fwqk-FtK5a_09w=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/jvshZlSlG9Kc5RRuzl-dT4RWigZeKhyg1pA1wE-zNOy5Wm2Du-ILxI-dbH-Fu-zA-fwqk-FtK5a_09w=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/jvshZlSlG9Kc5RRuzl-dT4RWigZeKhyg1pA1wE-zNOy5Wm2Du-ILxI-dbH-Fu-zA-fwqk-FtK5a_09w=w226-h226-l90-rj",
|
||||
width: 226,
|
||||
height: 226,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/jvshZlSlG9Kc5RRuzl-dT4RWigZeKhyg1pA1wE-zNOy5Wm2Du-ILxI-dbH-Fu-zA-fwqk-FtK5a_09w=w544-h544-l90-rj",
|
||||
width: 544,
|
||||
height: 544,
|
||||
),
|
||||
],
|
||||
channel: None,
|
||||
track_count: Some(121),
|
||||
from_ytm: true,
|
||||
is_podcast: false,
|
||||
)),
|
||||
Album(AlbumItem(
|
||||
id: "MPREb_BdDqjcHkOwb",
|
||||
name: "reputation",
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/RuKPkn6LLmXNOUcyRqh0zQbMWTpZDhHnkxHEZHrv6J8AbxLwemm9F0xaPpHX51WB_Xlj00My9vpZ_zRh=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/RuKPkn6LLmXNOUcyRqh0zQbMWTpZDhHnkxHEZHrv6J8AbxLwemm9F0xaPpHX51WB_Xlj00My9vpZ_zRh=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/RuKPkn6LLmXNOUcyRqh0zQbMWTpZDhHnkxHEZHrv6J8AbxLwemm9F0xaPpHX51WB_Xlj00My9vpZ_zRh=w226-h226-l90-rj",
|
||||
width: 226,
|
||||
height: 226,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/RuKPkn6LLmXNOUcyRqh0zQbMWTpZDhHnkxHEZHrv6J8AbxLwemm9F0xaPpHX51WB_Xlj00My9vpZ_zRh=w544-h544-l90-rj",
|
||||
width: 544,
|
||||
height: 544,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
name: "Taylor Swift",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
album_type: album,
|
||||
year: Some(2017),
|
||||
by_va: false,
|
||||
)),
|
||||
Album(AlbumItem(
|
||||
id: "MPREb_7u82vYqpamW",
|
||||
name: "Speak Now (Taylor\'s Version)",
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/PzdFvhZwBo2kxfifFF82vShEUh8xEQfvoUTRIUBvZjs3ibCmTqMQZ6ZL03tPz1iwjP4UH6xB0CAGPwqj=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/PzdFvhZwBo2kxfifFF82vShEUh8xEQfvoUTRIUBvZjs3ibCmTqMQZ6ZL03tPz1iwjP4UH6xB0CAGPwqj=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/PzdFvhZwBo2kxfifFF82vShEUh8xEQfvoUTRIUBvZjs3ibCmTqMQZ6ZL03tPz1iwjP4UH6xB0CAGPwqj=w226-h226-l90-rj",
|
||||
width: 226,
|
||||
height: 226,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/PzdFvhZwBo2kxfifFF82vShEUh8xEQfvoUTRIUBvZjs3ibCmTqMQZ6ZL03tPz1iwjP4UH6xB0CAGPwqj=w544-h544-l90-rj",
|
||||
width: 544,
|
||||
height: 544,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
name: "Taylor Swift",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
album_type: album,
|
||||
year: Some(2023),
|
||||
by_va: false,
|
||||
)),
|
||||
Track(TrackItem(
|
||||
id: "e7yg0A-PCTI",
|
||||
name: "Love Story (Taylor’s Version)",
|
||||
duration: None,
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/huIYugJjpimikk-tSDJyDU09Jr8vDVJuLOh5uGG6T45c5MEtYvFW_9NlqkHHSaLl231kLBgAS8rtDfQ=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/huIYugJjpimikk-tSDJyDU09Jr8vDVJuLOh5uGG6T45c5MEtYvFW_9NlqkHHSaLl231kLBgAS8rtDfQ=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
name: "Taylor Swift",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
album: None,
|
||||
view_count: Some(259000000),
|
||||
track_type: track,
|
||||
track_nr: None,
|
||||
by_va: false,
|
||||
unavailable: false,
|
||||
)),
|
||||
Track(TrackItem(
|
||||
id: "LYyUr75fs_o",
|
||||
name: "You Belong With Me",
|
||||
duration: None,
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/YEcmx-25aRBMaKNTvCx17QboP0KCJq2jqKdjpjLImqA60wWE2AZV_ZdQa417ZEmAkK7ipsEt1m0DEI-Z9A=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/YEcmx-25aRBMaKNTvCx17QboP0KCJq2jqKdjpjLImqA60wWE2AZV_ZdQa417ZEmAkK7ipsEt1m0DEI-Z9A=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
name: "Taylor Swift",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
album: None,
|
||||
view_count: Some(2100000000),
|
||||
track_type: track,
|
||||
track_nr: None,
|
||||
by_va: false,
|
||||
unavailable: false,
|
||||
)),
|
||||
Track(TrackItem(
|
||||
id: "gGwN25z7FrE",
|
||||
name: "Anti-Hero",
|
||||
duration: None,
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/omCs21jqwK4Ss_VZxPFKwQP5z0UY0vi_8gXu4XNxHKDgE-GHYHWkIw80XR1uzFgdyhM3PvVUZeZ8iAfF=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/omCs21jqwK4Ss_VZxPFKwQP5z0UY0vi_8gXu4XNxHKDgE-GHYHWkIw80XR1uzFgdyhM3PvVUZeZ8iAfF=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
name: "Taylor Swift",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
album: None,
|
||||
view_count: Some(541000000),
|
||||
track_type: track,
|
||||
track_nr: None,
|
||||
by_va: false,
|
||||
unavailable: false,
|
||||
)),
|
||||
Track(TrackItem(
|
||||
id: "sEPXrepgujY",
|
||||
name: "Style",
|
||||
duration: None,
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/GcrDhHXqrPm4BjS-4L1c0OHC9iz0ZxmFeRur2A6Aqo9Vm7OfFCBOSVbRzp1M1D1s_3rsvKaC7w6kku0=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/GcrDhHXqrPm4BjS-4L1c0OHC9iz0ZxmFeRur2A6Aqo9Vm7OfFCBOSVbRzp1M1D1s_3rsvKaC7w6kku0=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
name: "Taylor Swift",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
album: None,
|
||||
view_count: Some(1300000000),
|
||||
track_type: track,
|
||||
track_nr: None,
|
||||
by_va: false,
|
||||
unavailable: false,
|
||||
)),
|
||||
Track(TrackItem(
|
||||
id: "oOEhHDx6xOQ",
|
||||
name: "Back To December (Taylor\'s Version)",
|
||||
duration: None,
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/PzdFvhZwBo2kxfifFF82vShEUh8xEQfvoUTRIUBvZjs3ibCmTqMQZ6ZL03tPz1iwjP4UH6xB0CAGPwqj=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/PzdFvhZwBo2kxfifFF82vShEUh8xEQfvoUTRIUBvZjs3ibCmTqMQZ6ZL03tPz1iwjP4UH6xB0CAGPwqj=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
name: "Taylor Swift",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
album: None,
|
||||
view_count: Some(101000000),
|
||||
track_type: track,
|
||||
track_nr: None,
|
||||
by_va: false,
|
||||
unavailable: false,
|
||||
)),
|
||||
Playlist(MusicPlaylistItem(
|
||||
id: "PLh7pLzn8qaqXxc4S-sYw_P2jAqgJl_UNu",
|
||||
name: "Taylor Swift Study Playlist",
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/W8K9kHzTWhnBBVUwFp8ybP4WpUNaZL26P1-jH4T4AdDrQq-zV-x5qOsGLlhbaCBUQO3LMEkIbL4=s192",
|
||||
width: 192,
|
||||
height: 192,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/W8K9kHzTWhnBBVUwFp8ybP4WpUNaZL26P1-jH4T4AdDrQq-zV-x5qOsGLlhbaCBUQO3LMEkIbL4=s576",
|
||||
width: 576,
|
||||
height: 576,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/W8K9kHzTWhnBBVUwFp8ybP4WpUNaZL26P1-jH4T4AdDrQq-zV-x5qOsGLlhbaCBUQO3LMEkIbL4=s1200",
|
||||
width: 1200,
|
||||
height: 1200,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelId(
|
||||
id: "UC4Nx_ksbcnfAexy0YOeXWDA",
|
||||
name: "Jorgelina Ramirez",
|
||||
)),
|
||||
track_count: None,
|
||||
from_ytm: false,
|
||||
is_podcast: false,
|
||||
)),
|
||||
Artist(ArtistItem(
|
||||
id: "UCYmegxA27i3GYivu-FN-lYg",
|
||||
name: "Piano Tribute Players",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/6c7xT8CeESUklHTzG0iEkbf14-6jM46dZep_6eCeiliAxMwi1We4XXe_XhXiaTarSz5Mj338DUhPnOEDXQ=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/6c7xT8CeESUklHTzG0iEkbf14-6jM46dZep_6eCeiliAxMwi1We4XXe_XhXiaTarSz5Mj338DUhPnOEDXQ=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
subscriber_count: Some(1),
|
||||
)),
|
||||
Artist(ArtistItem(
|
||||
id: "UCcFRMtkYJsQO2biUzogKp-g",
|
||||
name: "Sweet Baby Mae",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/rTzDOTEMth0I63JRgkHG-iXivVWgqN9Z-r0ziTKB40qT2XwYL9y80zwv8R6gTsGW9724jPzehcjaj52ufg=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/rTzDOTEMth0I63JRgkHG-iXivVWgqN9Z-r0ziTKB40qT2XwYL9y80zwv8R6gTsGW9724jPzehcjaj52ufg=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
subscriber_count: Some(185),
|
||||
)),
|
||||
Artist(ArtistItem(
|
||||
id: "UCw-0GSqznYHfyfDBBe6a46A",
|
||||
name: "Gracie Abrams",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://lh3.googleusercontent.com/ZK5OsaCicvq8y9dbDlfZIYW9IEVbfou_NWdTmeoQ-EYFu5EgE-mBKZmjaShYinYveVNvw0Dvs04w5eo=w60-h60-p-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://lh3.googleusercontent.com/ZK5OsaCicvq8y9dbDlfZIYW9IEVbfou_NWdTmeoQ-EYFu5EgE-mBKZmjaShYinYveVNvw0Dvs04w5eo=w120-h120-p-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
subscriber_count: Some(103000000),
|
||||
)),
|
||||
Playlist(MusicPlaylistItem(
|
||||
id: "PLXmaWI4hITKsFZ9QnKIatkCBUtJ3q7deG",
|
||||
name: "Taylor Swift • folklore (the long pond studio sessions)",
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/mVfzb7S_KwI/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3k8tcigyW7D4rFLA0VK6NHEF9NNlg",
|
||||
width: 400,
|
||||
height: 225,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/mVfzb7S_KwI/sddefault.jpg?sqp=-oaymwEWCKoDEPABIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3l1twBfvFOTd-Lk0sl-8rtbggLMZA",
|
||||
width: 426,
|
||||
height: 240,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelId(
|
||||
id: "UC35imtjkWi43Wpvbv_2gkZw",
|
||||
name: "imusic",
|
||||
)),
|
||||
track_count: None,
|
||||
from_ytm: false,
|
||||
is_podcast: false,
|
||||
)),
|
||||
Track(TrackItem(
|
||||
id: "uo_CXTq6gmU",
|
||||
name: "TAYLOR SWIFT THE ERAS TOUR Concert ~ Best Summer Songs Full Album || Penguin",
|
||||
duration: None,
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/uo_CXTq6gmU/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3l396KNdVXRKRjyFKwiwcDfNP7jeg",
|
||||
width: 400,
|
||||
height: 225,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCRwekCSL5jAT-vLLcaf8k2g"),
|
||||
name: "Penguin Lyrics",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCRwekCSL5jAT-vLLcaf8k2g"),
|
||||
album: None,
|
||||
view_count: Some(8100000),
|
||||
track_type: video,
|
||||
track_nr: None,
|
||||
by_va: false,
|
||||
unavailable: false,
|
||||
)),
|
||||
Playlist(MusicPlaylistItem(
|
||||
id: "RDCLAK5uy_lL718gGQZgQf4jkKYjVbOXHABQCFAYuj0",
|
||||
name: "Presenting Ed Sheeran",
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/jPfSesF1ouKETA3Bd_mfIQvyhQdLFv4vbwbaQLTIfCHaftzSzqrh6adTh3d9_RKUJEj9l2kA_At3Ej5T=w60-h60-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/jPfSesF1ouKETA3Bd_mfIQvyhQdLFv4vbwbaQLTIfCHaftzSzqrh6adTh3d9_RKUJEj9l2kA_At3Ej5T=w120-h120-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/jPfSesF1ouKETA3Bd_mfIQvyhQdLFv4vbwbaQLTIfCHaftzSzqrh6adTh3d9_RKUJEj9l2kA_At3Ej5T=w226-h226-l90-rj",
|
||||
width: 226,
|
||||
height: 226,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/jPfSesF1ouKETA3Bd_mfIQvyhQdLFv4vbwbaQLTIfCHaftzSzqrh6adTh3d9_RKUJEj9l2kA_At3Ej5T=w544-h544-l90-rj",
|
||||
width: 544,
|
||||
height: 544,
|
||||
),
|
||||
],
|
||||
channel: None,
|
||||
track_count: Some(45),
|
||||
from_ytm: true,
|
||||
is_podcast: false,
|
||||
)),
|
||||
Playlist(MusicPlaylistItem(
|
||||
id: "PLxdXxDPCmiu1gk8Mhvvb8b8Up3IYq48VN",
|
||||
name: "Taylor Swift random playlist",
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/aRnpZpC-UvD2b50ziNEEB5kIoSnLeH_QKEG1DkoVQd_yyqS_xTAFqGov0B96L-ZdlzrXHFKwCWs=s192",
|
||||
width: 192,
|
||||
height: 192,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/aRnpZpC-UvD2b50ziNEEB5kIoSnLeH_QKEG1DkoVQd_yyqS_xTAFqGov0B96L-ZdlzrXHFKwCWs=s576",
|
||||
width: 576,
|
||||
height: 576,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/aRnpZpC-UvD2b50ziNEEB5kIoSnLeH_QKEG1DkoVQd_yyqS_xTAFqGov0B96L-ZdlzrXHFKwCWs=s1200",
|
||||
width: 1200,
|
||||
height: 1200,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelId(
|
||||
id: "UCaW05RDAz0Ry5RSwBl2J2Fg",
|
||||
name: "Dayne Jumawid",
|
||||
)),
|
||||
track_count: None,
|
||||
from_ytm: false,
|
||||
is_podcast: false,
|
||||
)),
|
||||
Track(TrackItem(
|
||||
id: "ko70cExuzZM",
|
||||
name: "The Fate of Ophelia",
|
||||
duration: None,
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/ko70cExuzZM/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3mEOKu47w7ANm72Cvx-cwKcqskR_w",
|
||||
width: 400,
|
||||
height: 225,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
name: "Taylor Swift",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCPC0L1d253x-KuMNwa05TpA"),
|
||||
album: None,
|
||||
view_count: Some(415000000),
|
||||
track_type: video,
|
||||
track_nr: None,
|
||||
by_va: false,
|
||||
unavailable: false,
|
||||
)),
|
||||
Track(TrackItem(
|
||||
id: "2glHZo0gx_w",
|
||||
name: "Taylor Swift, Shakira, Bruno Mars, Justin Bieber 🏖\u{fe0f}🎧 Top Hits 2026 🔥 Spotify Trending – Summer Vibes",
|
||||
duration: None,
|
||||
cover: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/2glHZo0gx_w/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3lk1zghRbX4ijRMoZrDOONkQx-SAw",
|
||||
width: 400,
|
||||
height: 225,
|
||||
),
|
||||
],
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCsUUmUhP6u_gqzGGFtFPpOA"),
|
||||
name: "Moonlight Chill Vibes",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCsUUmUhP6u_gqzGGFtFPpOA"),
|
||||
album: None,
|
||||
view_count: Some(7900),
|
||||
track_type: video,
|
||||
track_nr: None,
|
||||
by_va: false,
|
||||
unavailable: false,
|
||||
)),
|
||||
Playlist(MusicPlaylistItem(
|
||||
id: "PL1Nc9dcQuS8z1oj6avXVkM0GqGZg9_6Mk",
|
||||
name: "Die Taylor Swift Story",
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/pl_c/PL1Nc9dcQuS8z1oj6avXVkM0GqGZg9_6Mk/studio_square_thumbnail.jpg?sqp=COKkgNEG-oaymwEICDwQPCAASFqi85f_AwYI98WAswY&rs=AMzJL3nVC62cMZapgD9W46alyXxOXmhcpg",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/pl_c/PL1Nc9dcQuS8z1oj6avXVkM0GqGZg9_6Mk/studio_square_thumbnail.jpg?sqp=COKkgNEG-oaymwEICHgQeCAASFqi85f_AwYI98WAswY&rs=AMzJL3l46lAvy96qFssa6Xh3ipVgBjKwAA",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/pl_c/PL1Nc9dcQuS8z1oj6avXVkM0GqGZg9_6Mk/studio_square_thumbnail.jpg?sqp=COKkgNEG-oaymwEKCOIBEOIBIABIWqLzl_8DBgj3xYCzBg&rs=AMzJL3nWJKQykUL6rbg4AswYexiBIji5Yw",
|
||||
width: 226,
|
||||
height: 226,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/pl_c/PL1Nc9dcQuS8z1oj6avXVkM0GqGZg9_6Mk/studio_square_thumbnail.jpg?sqp=COKkgNEG-oaymwEKCKAEEKAEIABIWqLzl_8DBgj3xYCzBg&rs=AMzJL3lJ1a1qj2NY_FBVMPcRc6lX_JrxeQ",
|
||||
width: 544,
|
||||
height: 544,
|
||||
),
|
||||
],
|
||||
channel: None,
|
||||
track_count: None,
|
||||
from_ytm: false,
|
||||
is_podcast: true,
|
||||
)),
|
||||
Playlist(MusicPlaylistItem(
|
||||
id: "PLkM40s4AfBz9KtVJIHlExeqvETajdLwWW",
|
||||
name: "Mend with Mere x Taylor Swift Reaction Videos!",
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/pl_c/PLkM40s4AfBz9KtVJIHlExeqvETajdLwWW/studio_square_thumbnail.jpg?sqp=COKkgNEG-oaymwEICDwQPCAASFqi85f_AwYI5onxpQY&rs=AMzJL3lVxLHz9SmZXaVBKVL_yJH_ukf9Sg",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/pl_c/PLkM40s4AfBz9KtVJIHlExeqvETajdLwWW/studio_square_thumbnail.jpg?sqp=COKkgNEG-oaymwEICHgQeCAASFqi85f_AwYI5onxpQY&rs=AMzJL3khQTkIKo0HgBJ9lXGLeuWqGOuSvQ",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/pl_c/PLkM40s4AfBz9KtVJIHlExeqvETajdLwWW/studio_square_thumbnail.jpg?sqp=COKkgNEG-oaymwEKCOIBEOIBIABIWqLzl_8DBgjmifGlBg&rs=AMzJL3kjtHIKz8ReNzURFLVhGdTeeht4ig",
|
||||
width: 226,
|
||||
height: 226,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/pl_c/PLkM40s4AfBz9KtVJIHlExeqvETajdLwWW/studio_square_thumbnail.jpg?sqp=COKkgNEG-oaymwEKCKAEEKAEIABIWqLzl_8DBgjmifGlBg&rs=AMzJL3nHKxJGRrPac8LyyX_nyogrsxWyeQ",
|
||||
width: 544,
|
||||
height: 544,
|
||||
),
|
||||
],
|
||||
channel: None,
|
||||
track_count: None,
|
||||
from_ytm: false,
|
||||
is_podcast: true,
|
||||
)),
|
||||
Playlist(MusicPlaylistItem(
|
||||
id: "PLKXeAFgIkqY_dNNWZVsdlXyVxbeErJROg",
|
||||
name: "13: A Taylor Swift Fan Podcast",
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/podcasts_artwork/PLKXeAFgIkqY_dNNWZVsdlXyVxbeErJROg/rss_feed_ingested.jpg?sqp=COKkgNEG-oaymwEICDwQPCAASFo&rs=AMzJL3kc8M2AJIUFAHKl0HJxIge3-OTP8A",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/podcasts_artwork/PLKXeAFgIkqY_dNNWZVsdlXyVxbeErJROg/rss_feed_ingested.jpg?sqp=COKkgNEG-oaymwEICHgQeCAASFo&rs=AMzJL3m-4F49HfVIhBVj_rX4o9HqmdaCzw",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/podcasts_artwork/PLKXeAFgIkqY_dNNWZVsdlXyVxbeErJROg/rss_feed_ingested.jpg?sqp=COKkgNEG-oaymwEKCOIBEOIBIABIWg&rs=AMzJL3nRT636cpspamEYXtKmvZh_lGqbmw",
|
||||
width: 226,
|
||||
height: 226,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/podcasts_artwork/PLKXeAFgIkqY_dNNWZVsdlXyVxbeErJROg/rss_feed_ingested.jpg?sqp=COKkgNEG-oaymwEKCKAEEKAEIABIWg&rs=AMzJL3n6BSBouho3uZwzayb1V8UafYd_MA",
|
||||
width: 544,
|
||||
height: 544,
|
||||
),
|
||||
],
|
||||
channel: None,
|
||||
track_count: None,
|
||||
from_ytm: false,
|
||||
is_podcast: true,
|
||||
)),
|
||||
User(UserItem(
|
||||
id: "UC84Q02DHvuBzaB1a1TCF9OQ",
|
||||
name: "Official Album Instrumentals",
|
||||
handle: Some("@officialalbuminstrumentals9760"),
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/LAQXnLOzsXC7-hJtbREHUM53A8pcgIe0go592Ikw9mmh6AQNiGoxN1TXH1YV-sA0ySFEiyjzS6Q=w60-c-h60-k-c0x00ffffff-no-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/LAQXnLOzsXC7-hJtbREHUM53A8pcgIe0go592Ikw9mmh6AQNiGoxN1TXH1YV-sA0ySFEiyjzS6Q=w120-c-h120-k-c0x00ffffff-no-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
)),
|
||||
User(UserItem(
|
||||
id: "UCz6aKkENqq23rL3RyCH_QOw",
|
||||
name: "Timeless_Swiftie",
|
||||
handle: Some("@Timeless_Swiftie1989"),
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/D_VDSnN7WfsH08g1LwpzpXlXBoO6PpX-DLVP8Joob0NfHNyr0fBJYLFbV8u3IdhXdFJUr0BOAAM=w60-c-h60-k-c0x00ffffff-no-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/D_VDSnN7WfsH08g1LwpzpXlXBoO6PpX-DLVP8Joob0NfHNyr0fBJYLFbV8u3IdhXdFJUr0BOAAM=w120-c-h120-k-c0x00ffffff-no-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
)),
|
||||
User(UserItem(
|
||||
id: "UCvJwHWeD6SJ8zXXVsXIbVEw",
|
||||
name: "Taylor swift fan ",
|
||||
handle: Some("@realTaylorswift13fan"),
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/SHeka46S_UVKpsE6iXN0zt_7nRltUEq-NLf9gTw24cqcn4ngyOa0yzrFmj59tiZiY79y_bPV=w60-c-h60-k-c0x00ffffff-no-l90-rj",
|
||||
width: 60,
|
||||
height: 60,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://yt3.googleusercontent.com/SHeka46S_UVKpsE6iXN0zt_7nRltUEq-NLf9gTw24cqcn4ngyOa0yzrFmj59tiZiY79y_bPV=w120-c-h120-k-c0x00ffffff-no-l90-rj",
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
],
|
||||
)),
|
||||
],
|
||||
ctoken: None,
|
||||
endpoint: music_search,
|
||||
),
|
||||
corrected_query: None,
|
||||
)
|
||||
|
|
@ -32,6 +32,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(80296),
|
||||
|
|
@ -67,6 +68,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(36294),
|
||||
|
|
@ -102,6 +104,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(34736),
|
||||
|
|
@ -137,6 +140,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(73544),
|
||||
|
|
@ -172,6 +176,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(67231),
|
||||
|
|
@ -207,6 +212,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(44946),
|
||||
|
|
@ -242,6 +248,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(43264),
|
||||
|
|
@ -277,6 +284,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(98175),
|
||||
|
|
@ -312,6 +320,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(59376),
|
||||
|
|
@ -347,6 +356,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(25496),
|
||||
|
|
@ -382,6 +392,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(22982),
|
||||
|
|
@ -417,6 +428,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(38804),
|
||||
|
|
@ -452,6 +464,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(25505),
|
||||
|
|
@ -487,6 +500,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(98432),
|
||||
|
|
@ -522,6 +536,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(53410),
|
||||
|
|
@ -557,6 +572,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(54771),
|
||||
|
|
@ -592,6 +608,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(39823),
|
||||
|
|
@ -627,6 +644,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(51596),
|
||||
|
|
@ -662,6 +680,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(125391),
|
||||
|
|
@ -697,6 +716,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(120457),
|
||||
|
|
@ -732,6 +752,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(49062),
|
||||
|
|
@ -767,6 +788,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(49032),
|
||||
|
|
@ -802,6 +824,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(64108),
|
||||
|
|
@ -837,6 +860,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(76831),
|
||||
|
|
@ -872,6 +896,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(49961),
|
||||
|
|
@ -907,6 +932,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(17393),
|
||||
|
|
@ -942,6 +968,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(38281),
|
||||
|
|
@ -977,6 +1004,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(70004),
|
||||
|
|
@ -1012,6 +1040,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(93700),
|
||||
|
|
@ -1047,6 +1076,7 @@ Paginator(
|
|||
),
|
||||
],
|
||||
channel: None,
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(37515),
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(85000000),
|
||||
|
|
@ -79,6 +80,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(59000000),
|
||||
|
|
@ -120,6 +122,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(15000000),
|
||||
|
|
@ -161,6 +164,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(19000000),
|
||||
|
|
@ -202,6 +206,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(14000000),
|
||||
|
|
@ -243,6 +248,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(21000000),
|
||||
|
|
@ -284,6 +290,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(20000000),
|
||||
|
|
@ -325,6 +332,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(16000000),
|
||||
|
|
@ -366,6 +374,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(4100000),
|
||||
|
|
@ -407,6 +416,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(10000000),
|
||||
|
|
@ -448,6 +458,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(33000000),
|
||||
|
|
@ -489,6 +500,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(3600000),
|
||||
|
|
@ -530,6 +542,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(14000000),
|
||||
|
|
@ -571,6 +584,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(7200000),
|
||||
|
|
@ -612,6 +626,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(11000000),
|
||||
|
|
@ -653,6 +668,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(31000000),
|
||||
|
|
@ -694,6 +710,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(25000000),
|
||||
|
|
@ -735,6 +752,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(2200000),
|
||||
|
|
@ -776,6 +794,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(69000000),
|
||||
|
|
@ -817,6 +836,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(7700000),
|
||||
|
|
@ -858,6 +878,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(3400000),
|
||||
|
|
@ -899,6 +920,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(3000000),
|
||||
|
|
@ -940,6 +962,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(35000000),
|
||||
|
|
@ -981,6 +1004,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(134000000),
|
||||
|
|
@ -1022,6 +1046,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(19000000),
|
||||
|
|
@ -1063,6 +1088,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(17000000),
|
||||
|
|
@ -1104,6 +1130,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(60000000),
|
||||
|
|
@ -1145,6 +1172,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(63000000),
|
||||
|
|
@ -1186,6 +1214,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(36000000),
|
||||
|
|
@ -1227,6 +1256,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(8100000),
|
||||
|
|
@ -1268,6 +1298,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(8300000),
|
||||
|
|
@ -1309,6 +1340,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(31000000),
|
||||
|
|
@ -1350,6 +1382,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(41000000),
|
||||
|
|
@ -1391,6 +1424,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(4600000),
|
||||
|
|
@ -1432,6 +1466,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(9200000),
|
||||
|
|
@ -1473,6 +1508,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(50000000),
|
||||
|
|
@ -1514,6 +1550,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(61000000),
|
||||
|
|
@ -1555,6 +1592,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(8000000),
|
||||
|
|
@ -1596,6 +1634,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(38000000),
|
||||
|
|
@ -1637,6 +1676,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(49000000),
|
||||
|
|
@ -1678,6 +1718,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(28000000),
|
||||
|
|
@ -1719,6 +1760,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(75000000),
|
||||
|
|
@ -1760,6 +1802,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(23000000),
|
||||
|
|
@ -1801,6 +1844,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(1800000),
|
||||
|
|
@ -1842,6 +1886,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(2000000),
|
||||
|
|
@ -1883,6 +1928,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(21000000),
|
||||
|
|
@ -1924,6 +1970,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(51000000),
|
||||
|
|
@ -1965,6 +2012,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(15000000),
|
||||
|
|
@ -2006,6 +2054,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(47000000),
|
||||
|
|
@ -2047,6 +2096,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(8300000),
|
||||
|
|
@ -2088,6 +2138,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(49000000),
|
||||
|
|
@ -2129,6 +2180,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(20000000),
|
||||
|
|
@ -2170,6 +2222,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(25000000),
|
||||
|
|
@ -2211,6 +2264,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(55000000),
|
||||
|
|
@ -2252,6 +2306,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(47000000),
|
||||
|
|
@ -2293,6 +2348,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(509000000),
|
||||
|
|
@ -2334,6 +2390,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(89000000),
|
||||
|
|
@ -2375,6 +2432,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(88000000),
|
||||
|
|
@ -2416,6 +2474,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(88000000),
|
||||
|
|
@ -2457,6 +2516,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 years ago"),
|
||||
view_count: Some(49000000),
|
||||
|
|
@ -2498,6 +2558,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(62000000),
|
||||
|
|
@ -2539,6 +2600,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(63000000),
|
||||
|
|
@ -2580,6 +2642,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(42000000),
|
||||
|
|
@ -2621,6 +2684,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(46000000),
|
||||
|
|
@ -2662,6 +2726,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(32000000),
|
||||
|
|
@ -2703,6 +2768,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(34000000),
|
||||
|
|
@ -2744,6 +2810,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(47000000),
|
||||
|
|
@ -2785,6 +2852,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(37000000),
|
||||
|
|
@ -2826,6 +2894,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(31000000),
|
||||
|
|
@ -2867,6 +2936,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(45000000),
|
||||
|
|
@ -2908,6 +2978,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(38000000),
|
||||
|
|
@ -2949,6 +3020,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(30000000),
|
||||
|
|
@ -2990,6 +3062,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(36000000),
|
||||
|
|
@ -3031,6 +3104,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(34000000),
|
||||
|
|
@ -3072,6 +3146,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(27000000),
|
||||
|
|
@ -3113,6 +3188,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(25000000),
|
||||
|
|
@ -3154,6 +3230,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(22000000),
|
||||
|
|
@ -3195,6 +3272,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(31000000),
|
||||
|
|
@ -3236,6 +3314,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(18000000),
|
||||
|
|
@ -3277,6 +3356,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(25000000),
|
||||
|
|
@ -3318,6 +3398,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(24000000),
|
||||
|
|
@ -3359,6 +3440,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(29000000),
|
||||
|
|
@ -3400,6 +3482,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(23000000),
|
||||
|
|
@ -3441,6 +3524,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(27000000),
|
||||
|
|
@ -3482,6 +3566,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(19000000),
|
||||
|
|
@ -3523,6 +3608,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(31000000),
|
||||
|
|
@ -3564,6 +3650,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(19000000),
|
||||
|
|
@ -3605,6 +3692,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(18000000),
|
||||
|
|
@ -3646,6 +3734,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(22000000),
|
||||
|
|
@ -3687,6 +3776,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(16000000),
|
||||
|
|
@ -3728,6 +3818,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(16000000),
|
||||
|
|
@ -3769,6 +3860,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(21000000),
|
||||
|
|
@ -3810,6 +3902,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(40000000),
|
||||
|
|
@ -3851,6 +3944,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(15000000),
|
||||
|
|
@ -3892,6 +3986,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(19000000),
|
||||
|
|
@ -3933,6 +4028,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(15000000),
|
||||
|
|
@ -3974,6 +4070,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(25000000),
|
||||
|
|
@ -4015,6 +4112,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(16000000),
|
||||
|
|
@ -4056,6 +4154,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(23000000),
|
||||
|
|
@ -4097,6 +4196,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 years ago"),
|
||||
view_count: Some(15000000),
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(216222873),
|
||||
|
|
@ -71,6 +72,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(155106313),
|
||||
|
|
@ -108,6 +110,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(265238677),
|
||||
|
|
@ -145,6 +148,7 @@ Paginator(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(9989591),
|
||||
|
|
@ -182,6 +186,7 @@ Paginator(
|
|||
verification: artist,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(34588526),
|
||||
|
|
@ -219,6 +224,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(242737870),
|
||||
|
|
@ -256,6 +262,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(126677200),
|
||||
|
|
@ -293,6 +300,7 @@ Paginator(
|
|||
verification: artist,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(335903776),
|
||||
|
|
@ -330,6 +338,7 @@ Paginator(
|
|||
verification: artist,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(86125645),
|
||||
|
|
@ -367,6 +376,7 @@ Paginator(
|
|||
verification: artist,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(170016610),
|
||||
|
|
@ -404,6 +414,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(123861096),
|
||||
|
|
@ -441,6 +452,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(101968219),
|
||||
|
|
@ -478,6 +490,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(322510403),
|
||||
|
|
@ -515,6 +528,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(345491789),
|
||||
|
|
@ -552,6 +566,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(314744776),
|
||||
|
|
@ -589,6 +604,7 @@ Paginator(
|
|||
verification: artist,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(18830758),
|
||||
|
|
@ -626,6 +642,7 @@ Paginator(
|
|||
verification: artist,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(282957370),
|
||||
|
|
@ -663,6 +680,7 @@ Paginator(
|
|||
verification: artist,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(355203298),
|
||||
|
|
@ -700,6 +718,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(157400947),
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 day ago"),
|
||||
view_count: Some(859366),
|
||||
|
|
@ -61,6 +62,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 days ago"),
|
||||
view_count: Some(1000402),
|
||||
|
|
@ -98,6 +100,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(528795),
|
||||
|
|
@ -130,6 +133,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 days ago"),
|
||||
view_count: Some(1096055),
|
||||
|
|
@ -167,6 +171,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 months ago"),
|
||||
view_count: Some(928968),
|
||||
|
|
@ -204,6 +209,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(1137138),
|
||||
|
|
@ -241,6 +247,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 months ago"),
|
||||
view_count: Some(462437),
|
||||
|
|
@ -273,6 +280,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(11285067),
|
||||
|
|
@ -305,6 +313,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 weeks ago"),
|
||||
view_count: Some(2415040),
|
||||
|
|
@ -337,6 +346,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(5100787),
|
||||
|
|
@ -369,6 +379,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 months ago"),
|
||||
view_count: Some(55308394),
|
||||
|
|
@ -406,6 +417,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 months ago"),
|
||||
view_count: Some(774061),
|
||||
|
|
@ -438,6 +450,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 months ago"),
|
||||
view_count: Some(12314192),
|
||||
|
|
@ -470,6 +483,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(4266748),
|
||||
|
|
@ -507,6 +521,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 months ago"),
|
||||
view_count: Some(439888),
|
||||
|
|
@ -539,6 +554,7 @@ Paginator(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(9312774),
|
||||
|
|
|
|||
|
|
@ -61,11 +61,12 @@ VideoPlayer(
|
|||
),
|
||||
video_streams: [
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=1619781&dur=163.143&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=17&lmt=1580005480199246&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2F3gpp&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAJ2s7Pm4w42X3u3PWYViDeqIaE2tE9J6oIGpd0KB9gFsAiAH84QaJ4oUNivdRDUBi1ZYI7JSxESsPQ53mLInajKzcQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&txp=2211222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=1619781&dur=163.143&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=17&lmt=1580005480199246&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2F3gpp&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAJ2s7Pm4w42X3u3PWYViDeqIaE2tE9J6oIGpd0KB9gFsAiAH84QaJ4oUNivdRDUBi1ZYI7JSxESsPQ53mLInajKzcQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&txp=2211222&vprv=1"),
|
||||
itag: 17,
|
||||
bitrate: 79452,
|
||||
average_bitrate: 79428,
|
||||
size: Some(1619781),
|
||||
last_modified: Some(1580005480199246),
|
||||
index_range: None,
|
||||
init_range: None,
|
||||
duration_ms: Some(163143),
|
||||
|
|
@ -77,15 +78,17 @@ VideoPlayer(
|
|||
mime: "video/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"",
|
||||
format: r#3gp,
|
||||
codec: mp4v,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=11439331&dur=163.096&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=18&lmt=1580005476071743&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&pl=37&ratebypass=yes&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAJAH-tWof01vrs8phEoz51XkWwdMzQ77k1UTrdY5XiuTAiA38z-qANX0jtfCiAl4EVMZaKo1ncrzJFRrCffZ6LagrA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&txp=2211222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=11439331&dur=163.096&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=18&lmt=1580005476071743&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&pl=37&ratebypass=yes&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAJAH-tWof01vrs8phEoz51XkWwdMzQ77k1UTrdY5XiuTAiA38z-qANX0jtfCiAl4EVMZaKo1ncrzJFRrCffZ6LagrA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&txp=2211222&vprv=1"),
|
||||
itag: 18,
|
||||
bitrate: 561339,
|
||||
average_bitrate: 561109,
|
||||
size: Some(11439331),
|
||||
last_modified: Some(1580005476071743),
|
||||
index_range: None,
|
||||
init_range: None,
|
||||
duration_ms: Some(163096),
|
||||
|
|
@ -97,15 +100,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.42001E, mp4a.40.2\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&dur=163.096&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=22&lmt=1580005750956837&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&pl=37&ratebypass=yes&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgFlQZgR63Yz9UgY9gVqiyGDVkZmSmACRP3-MmKN7CRzQCIAMHAwZbHmWL1qNH4Nu3A0pXZwErXMVPzMIt-PyxeZqa&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cratebypass%2Cdur%2Clmt&txp=2211222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&dur=163.096&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=22&lmt=1580005750956837&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&pl=37&ratebypass=yes&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgFlQZgR63Yz9UgY9gVqiyGDVkZmSmACRP3-MmKN7CRzQCIAMHAwZbHmWL1qNH4Nu3A0pXZwErXMVPzMIt-PyxeZqa&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cratebypass%2Cdur%2Clmt&txp=2211222&vprv=1"),
|
||||
itag: 22,
|
||||
bitrate: 1574434,
|
||||
average_bitrate: 1574434,
|
||||
size: None,
|
||||
last_modified: Some(1580005750956837),
|
||||
index_range: None,
|
||||
init_range: None,
|
||||
duration_ms: Some(163096),
|
||||
|
|
@ -117,17 +122,19 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.64001F, mp4a.40.2\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
],
|
||||
video_only_streams: [
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=1224002&dur=163.029&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=394&keepalive=yes&lmt=1608045375671513&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgYCPleG9F86UoDRvzFL2xSUUI-HLZGw_P7qBOixlcmKsCIQChdmrJ1NvKo5Ra4QJ9ivR5V8fEcQs0f_3aUiqMhGB5DQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=1224002&dur=163.029&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=394&keepalive=yes&lmt=1608045375671513&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgYCPleG9F86UoDRvzFL2xSUUI-HLZGw_P7qBOixlcmKsCIQChdmrJ1NvKo5Ra4QJ9ivR5V8fEcQs0f_3aUiqMhGB5DQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1"),
|
||||
itag: 394,
|
||||
bitrate: 67637,
|
||||
average_bitrate: 60063,
|
||||
size: Some(1224002),
|
||||
last_modified: Some(1608045375671513),
|
||||
index_range: Some(Range(
|
||||
start: 700,
|
||||
end: 1115,
|
||||
|
|
@ -145,15 +152,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"av01.0.00M.08\"",
|
||||
format: mp4,
|
||||
codec: av01,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=2238952&dur=163.029&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=395&keepalive=yes&lmt=1608045728968690&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAKCXHOCh_P3VlNWebTeWw0WdSln-zYe3BjZeEm2QiltCAiAQNcJBI4G-8dK5z1IUoqBZctk6ddjkl_QYKRFAKXyOcw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=2238952&dur=163.029&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=395&keepalive=yes&lmt=1608045728968690&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAKCXHOCh_P3VlNWebTeWw0WdSln-zYe3BjZeEm2QiltCAiAQNcJBI4G-8dK5z1IUoqBZctk6ddjkl_QYKRFAKXyOcw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1"),
|
||||
itag: 395,
|
||||
bitrate: 135747,
|
||||
average_bitrate: 109867,
|
||||
size: Some(2238952),
|
||||
last_modified: Some(1608045728968690),
|
||||
index_range: Some(Range(
|
||||
start: 700,
|
||||
end: 1115,
|
||||
|
|
@ -171,15 +180,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"av01.0.00M.08\"",
|
||||
format: mp4,
|
||||
codec: av01,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=7808990&dur=163.029&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=134&keepalive=yes&lmt=1580005649163759&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAIjjrMvCEzSLlbvbrjItT4V9JdpggnO5IHye9i4PxTyzAiAmbaFCB2hH7evf9JX3JUx-tU9S6zv2IzSKz8ObGSVRjw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=2211222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=7808990&dur=163.029&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=134&keepalive=yes&lmt=1580005649163759&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAIjjrMvCEzSLlbvbrjItT4V9JdpggnO5IHye9i4PxTyzAiAmbaFCB2hH7evf9JX3JUx-tU9S6zv2IzSKz8ObGSVRjw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=2211222&vprv=1"),
|
||||
itag: 134,
|
||||
bitrate: 538143,
|
||||
average_bitrate: 383195,
|
||||
size: Some(7808990),
|
||||
last_modified: Some(1580005649163759),
|
||||
index_range: Some(Range(
|
||||
start: 740,
|
||||
end: 1155,
|
||||
|
|
@ -197,15 +208,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.4d401e\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=4130385&dur=163.029&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=396&keepalive=yes&lmt=1608045761576250&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgBrQhbygTP6RGjUk0lGbxBI5e3NdeR6C_SW8R_ckZ2PkCIQDaBg5cJxYVWfwRrrELQFgRMOJ4xS3oOOROayoQMjxaCA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=4130385&dur=163.029&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=396&keepalive=yes&lmt=1608045761576250&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgBrQhbygTP6RGjUk0lGbxBI5e3NdeR6C_SW8R_ckZ2PkCIQDaBg5cJxYVWfwRrrELQFgRMOJ4xS3oOOROayoQMjxaCA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1"),
|
||||
itag: 396,
|
||||
bitrate: 258097,
|
||||
average_bitrate: 202682,
|
||||
size: Some(4130385),
|
||||
last_modified: Some(1608045761576250),
|
||||
index_range: Some(Range(
|
||||
start: 700,
|
||||
end: 1115,
|
||||
|
|
@ -223,15 +236,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"av01.0.01M.08\"",
|
||||
format: mp4,
|
||||
codec: av01,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=6873325&dur=163.029&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=397&keepalive=yes&lmt=1608045990917419&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAMqBb1hKVVzWl3Awrh1T8GQG9IrSWF84zW_ZfjgbAN5QAiAaP3jYyI4ox2aclcOCzYFzqWgByWCxj_FgTN-SfsARXw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=6873325&dur=163.029&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=397&keepalive=yes&lmt=1608045990917419&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAMqBb1hKVVzWl3Awrh1T8GQG9IrSWF84zW_ZfjgbAN5QAiAaP3jYyI4ox2aclcOCzYFzqWgByWCxj_FgTN-SfsARXw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1"),
|
||||
itag: 397,
|
||||
bitrate: 436843,
|
||||
average_bitrate: 337281,
|
||||
size: Some(6873325),
|
||||
last_modified: Some(1608045990917419),
|
||||
index_range: Some(Range(
|
||||
start: 700,
|
||||
end: 1115,
|
||||
|
|
@ -249,15 +264,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"av01.0.04M.08\"",
|
||||
format: mp4,
|
||||
codec: av01,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=22365208&dur=163.046&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=398&keepalive=yes&lmt=1608048380553749&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgR6KqCOoig_FMl2tWKa7qHSmCjIZa9S7ABzEI16qdO2sCIFXccwql4bqV9CHlqXY4tgxyMFUsp7vW4XUjxs3AyG6H&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=22365208&dur=163.046&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=398&keepalive=yes&lmt=1608048380553749&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgR6KqCOoig_FMl2tWKa7qHSmCjIZa9S7ABzEI16qdO2sCIFXccwql4bqV9CHlqXY4tgxyMFUsp7vW4XUjxs3AyG6H&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1"),
|
||||
itag: 398,
|
||||
bitrate: 1348419,
|
||||
average_bitrate: 1097369,
|
||||
size: Some(22365208),
|
||||
last_modified: Some(1608048380553749),
|
||||
index_range: Some(Range(
|
||||
start: 700,
|
||||
end: 1115,
|
||||
|
|
@ -275,15 +292,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"av01.0.08M.08\"",
|
||||
format: mp4,
|
||||
codec: av01,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=65400181&dur=163.046&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=299&keepalive=yes&lmt=1580005649161486&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAPjxbuzkozPDc1Nd_0q5X8x8H2SiDvAUFuqqMadtz3SNAiEA_3kXCeePb2kci-WB2779tzI56E6E0iKwoHnUSkKCzwU%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=2211222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=65400181&dur=163.046&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=299&keepalive=yes&lmt=1580005649161486&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAPjxbuzkozPDc1Nd_0q5X8x8H2SiDvAUFuqqMadtz3SNAiEA_3kXCeePb2kci-WB2779tzI56E6E0iKwoHnUSkKCzwU%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=2211222&vprv=1"),
|
||||
itag: 299,
|
||||
bitrate: 4190323,
|
||||
average_bitrate: 3208919,
|
||||
size: Some(65400181),
|
||||
last_modified: Some(1580005649161486),
|
||||
index_range: Some(Range(
|
||||
start: 740,
|
||||
end: 1155,
|
||||
|
|
@ -301,15 +320,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.64002a\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=42567727&dur=163.046&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=399&keepalive=yes&lmt=1608052932785283&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgFguw-cmBNOQegpyRRzcCScp2WaSnq_o7FB1-AiBgFpICIAGlMj9-kzNCWb3nhpg98Mc239ls6YYyoL8z1QpM8VmL&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=42567727&dur=163.046&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=399&keepalive=yes&lmt=1608052932785283&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgFguw-cmBNOQegpyRRzcCScp2WaSnq_o7FB1-AiBgFpICIAGlMj9-kzNCWb3nhpg98Mc239ls6YYyoL8z1QpM8VmL&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1"),
|
||||
itag: 399,
|
||||
bitrate: 2572342,
|
||||
average_bitrate: 2088624,
|
||||
size: Some(42567727),
|
||||
last_modified: Some(1608052932785283),
|
||||
index_range: Some(Range(
|
||||
start: 700,
|
||||
end: 1115,
|
||||
|
|
@ -327,17 +348,19 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"av01.0.09M.08\"",
|
||||
format: mp4,
|
||||
codec: av01,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
],
|
||||
audio_streams: [
|
||||
AudioStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=995840&dur=163.189&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=139&keepalive=yes&lmt=1580005582214385&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhALhtrbIL9_CQBeXsEwxFqyPY1XqBCOceQc7y00h7XBS9AiAH9VkMnkuFCU1ACkYU__uApTwcYeDoYNU74VYmKED3Gw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=2211222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=995840&dur=163.189&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=139&keepalive=yes&lmt=1580005582214385&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhALhtrbIL9_CQBeXsEwxFqyPY1XqBCOceQc7y00h7XBS9AiAH9VkMnkuFCU1ACkYU__uApTwcYeDoYNU74VYmKED3Gw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=2211222&vprv=1"),
|
||||
itag: 139,
|
||||
bitrate: 49724,
|
||||
average_bitrate: 48818,
|
||||
size: 995840,
|
||||
last_modified: Some(1580005582214385),
|
||||
index_range: Some(Range(
|
||||
start: 641,
|
||||
end: 876,
|
||||
|
|
@ -352,16 +375,19 @@ VideoPlayer(
|
|||
codec: mp4a,
|
||||
channels: Some(2),
|
||||
loudness_db: None,
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=934449&dur=163.061&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=249&keepalive=yes&lmt=1608509101590706&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgPmadKd9As393GMRmu1Ow4RfQkDQhY6SbPRnkLMYyZOoCIE9AIgMMJ7n5HD2gKv3c8-HrnkMeakq_uWUOivnWquJX&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=934449&dur=163.061&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=249&keepalive=yes&lmt=1608509101590706&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgPmadKd9As393GMRmu1Ow4RfQkDQhY6SbPRnkLMYyZOoCIE9AIgMMJ7n5HD2gKv3c8-HrnkMeakq_uWUOivnWquJX&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1"),
|
||||
itag: 249,
|
||||
bitrate: 53039,
|
||||
average_bitrate: 45845,
|
||||
size: 934449,
|
||||
last_modified: Some(1608509101590706),
|
||||
index_range: Some(Range(
|
||||
start: 266,
|
||||
end: 551,
|
||||
|
|
@ -376,16 +402,19 @@ VideoPlayer(
|
|||
codec: opus,
|
||||
channels: Some(2),
|
||||
loudness_db: None,
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=1245866&dur=163.061&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=250&keepalive=yes&lmt=1608509101111096&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIge8uetzhejNg3DegY9EQkpvVam1gp8Jm-q6oqtb6Rn9wCIQD_VeQle7Z2H1uXB6qsYMGDU4OWA4h6YTTwMDmw5DDvuA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=1245866&dur=163.061&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=250&keepalive=yes&lmt=1608509101111096&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIge8uetzhejNg3DegY9EQkpvVam1gp8Jm-q6oqtb6Rn9wCIQD_VeQle7Z2H1uXB6qsYMGDU4OWA4h6YTTwMDmw5DDvuA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1"),
|
||||
itag: 250,
|
||||
bitrate: 71268,
|
||||
average_bitrate: 61123,
|
||||
size: 1245866,
|
||||
last_modified: Some(1608509101111096),
|
||||
index_range: Some(Range(
|
||||
start: 266,
|
||||
end: 551,
|
||||
|
|
@ -400,16 +429,19 @@ VideoPlayer(
|
|||
codec: opus,
|
||||
channels: Some(2),
|
||||
loudness_db: None,
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=2640283&dur=163.096&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=140&keepalive=yes&lmt=1580005579712232&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAI8YylDImOPxxRo251u_RX6ir_j0p-gP_yQPcI6SxareAiArCxOcgrF9pxYS5bNYEnLGEQxRiEFJ0sT2Ydpa1G7x5A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=2211222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=2640283&dur=163.096&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=140&keepalive=yes&lmt=1580005579712232&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAI8YylDImOPxxRo251u_RX6ir_j0p-gP_yQPcI6SxareAiArCxOcgrF9pxYS5bNYEnLGEQxRiEFJ0sT2Ydpa1G7x5A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=2211222&vprv=1"),
|
||||
itag: 140,
|
||||
bitrate: 130268,
|
||||
average_bitrate: 129508,
|
||||
size: 2640283,
|
||||
last_modified: Some(1580005579712232),
|
||||
index_range: Some(Range(
|
||||
start: 632,
|
||||
end: 867,
|
||||
|
|
@ -424,16 +456,19 @@ VideoPlayer(
|
|||
codec: mp4a,
|
||||
channels: Some(2),
|
||||
loudness_db: None,
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=2476314&dur=163.061&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=251&keepalive=yes&lmt=1608509101894140&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgErpt4HOgIybMGrMD2qg9JB4O53n0jsCxkiI9JBxbz8ECIQDixyFJ54m4NsxhyFtIYPscMVp_G6RyvwrfKzdoya-62Q%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=ANDROID&clen=2476314&dur=163.061&ei=q1jpYtOPEYSBgQeHmqbwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AEDMTCojVtwpIKOdhBaxEHE5s322qnAJHGqa2r1F46BM&initcwndbps=1527500&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=251&keepalive=yes&lmt=1608509101894140&lsig=AG3C_xAwRgIhAOiL-qJ04sA8FSOkEJfOYl3gFe4SzwYu_rAf3DMLHYigAiEA0Upi1HqqIu7NH_LTDL0jT1R5TTozQypL5FiSP9RoqtU%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659459429&mv=m&mvi=5&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgErpt4HOgIybMGrMD2qg9JB4O53n0jsCxkiI9JBxbz8ECIQDixyFJ54m4NsxhyFtIYPscMVp_G6RyvwrfKzdoya-62Q%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&txp=1311222&vprv=1"),
|
||||
itag: 251,
|
||||
bitrate: 140633,
|
||||
average_bitrate: 121491,
|
||||
size: 2476314,
|
||||
last_modified: Some(1608509101894140),
|
||||
index_range: Some(Range(
|
||||
start: 266,
|
||||
end: 551,
|
||||
|
|
@ -448,7 +483,9 @@ VideoPlayer(
|
|||
codec: opus,
|
||||
channels: Some(2),
|
||||
loudness_db: None,
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
|
|
@ -465,6 +502,9 @@ VideoPlayer(
|
|||
valid_until: "[date]",
|
||||
hls_manifest_url: None,
|
||||
dash_manifest_url: Some("https://manifest.googlevideo.com/api/manifest/dash/expire/1659481355/ei/q1jpYtOPEYSBgQeHmqbwAQ/ip/2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e/id/a4fbddf14c6649b4/source/youtube/requiressl/yes/playback_host/rr5---sn-h0jeenek.googlevideo.com/mh/mQ/mm/31%2C29/mn/sn-h0jeenek%2Csn-h0jelnez/ms/au%2Crdu/mv/m/mvi/5/pl/37/hfr/1/as/fmp4_audio_clear%2Cfmp4_sd_hd_clear/initcwndbps/1527500/vprv/1/mt/1659459429/fvip/4/itag_bl/376%2C377%2C384%2C385%2C612%2C613%2C617%2C619%2C623%2C628%2C655%2C656%2C660%2C662%2C666%2C671/keepalive/yes/fexp/24001373%2C24007246/itag/0/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cas%2Cvprv%2Citag/sig/AOq0QJ8wRAIgMm4a_MIHA3YUszKeruSy3exs5JwNjJAyLAwxL0yPdNMCIANb9GDMSTp_NT-PPhbvYMwRULJ5a9BO6MYD9FuWprC1/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AG3C_xAwRQIgETSOwhwWVMy7gmrFXZlJu655ToLzSwOEsT16oRyrWhACIQDkvOEw1fImz5omu4iVIRNFe-z-JC9v8WUyx281dW2NOw%3D%3D"),
|
||||
abr_streaming_url: None,
|
||||
abr_ustreamer_config: Some("Cs0CCAAlMZkqPi0AAIA_NT0Klz9YAXjoAoABAaABAbUB9ijcP-ABAegBA_ABAfkBAAAAAAAA0D-BAgAAAAAAABhAmALwAaAC6AK4AgDaAlUQsOoBGKhGIKCcASjYNjCYdXCIJ4AB9AO4AQHgAQGYAgyoAgGwAgG4AgHAAgHIAgHQAgLgAgHoAgLwAgGAAwaIA4gnmAMBqAMIsAMBuAMBwAMB2AMB-gIrCAwQGBgyIDItAABwQjUAAIxCQAFIAWUAAIBAaMBwzQEAAIA_8AEB6ALgA4IDAJADAaADAbADA-ADkE6wBAG4BAHKBFgKFQiA4gkQmHUYrAIlAAAAACgAMABAARDg1AMY0A8qNgoKdGJfY29zdF81MCAIKQAAAAAAAAAASAFQAV2amZk-ZQAAAD9tAAAAP3UAAAA_eMCpB5IBADAB6AQB8AQB-AQBkAUBGAEgATIMCKsCEI662NuboOcCMgwIjwMQg-na_r_Q7QIyDAiqAhCOutjbm6DnAjIMCI4DEJXUhISv0O0CMgwIhwEQjrrY25ug5wIyDAiNAxCr6siQptDtAjIMCIYBEO_L2NuboOcCMgwIjAMQuvqao6XQ7QIyDAiFARCOutjbm6DnAjIMCIsDEPLf1JOl0O0CMgwIoAEQjrrY25ug5wIyDAiKAxDZmZnro9DtAjIMCIsBEPGp4ruboOcCMgwIjAEQ6M3Jupug5wIyDAj5ARCykfms493tAjIMCPoBELju26zj3e0CMgwI-wEQ_NOLrePd7QI6AA=="),
|
||||
po_token: None,
|
||||
preview_frames: [
|
||||
Frameset(
|
||||
url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L0/default.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLAXobPyrylgm8IEvjlZzqYTiPe1Ow",
|
||||
|
|
|
|||
|
|
@ -66,11 +66,12 @@ VideoPlayer(
|
|||
),
|
||||
video_streams: [
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=11439331&dur=163.096&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=18&lmt=1580005476071743&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=ig_QojS86GYHYg&ns=cOm8mnsR9HFwfq55dDyGyqYH&pl=37&ratebypass=yes&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgNqstD2C4HG7Vn5En5Z4aUyH2mk7gAB9cyfOAWGCaWeoCIQDbxxJZuOnz_3RJNviFYADvgTO7u8YBYKtpFtp9Ujmk2w%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=2211222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=11439331&dur=163.096&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=18&lmt=1580005476071743&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=ig_QojS86GYHYg&ns=cOm8mnsR9HFwfq55dDyGyqYH&pl=37&ratebypass=yes&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgNqstD2C4HG7Vn5En5Z4aUyH2mk7gAB9cyfOAWGCaWeoCIQDbxxJZuOnz_3RJNviFYADvgTO7u8YBYKtpFtp9Ujmk2w%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=2211222&vprv=1"),
|
||||
itag: 18,
|
||||
bitrate: 561339,
|
||||
average_bitrate: 561109,
|
||||
size: Some(11439331),
|
||||
last_modified: Some(1580005476071743),
|
||||
index_range: None,
|
||||
init_range: None,
|
||||
duration_ms: Some(163096),
|
||||
|
|
@ -82,17 +83,19 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.42001E, mp4a.40.2\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
],
|
||||
video_only_streams: [
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=1484736&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=278&keepalive=yes&lmt=1608509388295661&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgDYs7xrSqi-Co90zypk9zutEJ-aaEpNAHWnE57zVIfxgCIQDE0exs9SN8JH5OEJ8728Ke6bfa0CsUucFETHLk3IFF7w%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=1484736&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=278&keepalive=yes&lmt=1608509388295661&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgDYs7xrSqi-Co90zypk9zutEJ-aaEpNAHWnE57zVIfxgCIQDE0exs9SN8JH5OEJ8728Ke6bfa0CsUucFETHLk3IFF7w%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 278,
|
||||
bitrate: 87458,
|
||||
average_bitrate: 72857,
|
||||
size: Some(1484736),
|
||||
last_modified: Some(1608509388295661),
|
||||
index_range: Some(Range(
|
||||
start: 218,
|
||||
end: 751,
|
||||
|
|
@ -110,15 +113,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=1224002&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=394&keepalive=yes&lmt=1608045375671513&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAI-uoNLUkMHpH35niVh1tBvwwFLtmSbeHyknmyCvccFVAiB2XriyJd0u2q-tGIRTx5qtKt6bJCs5ndXtMsdSxOheuA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=1224002&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=394&keepalive=yes&lmt=1608045375671513&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAI-uoNLUkMHpH35niVh1tBvwwFLtmSbeHyknmyCvccFVAiB2XriyJd0u2q-tGIRTx5qtKt6bJCs5ndXtMsdSxOheuA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 394,
|
||||
bitrate: 67637,
|
||||
average_bitrate: 60063,
|
||||
size: Some(1224002),
|
||||
last_modified: Some(1608045375671513),
|
||||
index_range: Some(Range(
|
||||
start: 700,
|
||||
end: 1115,
|
||||
|
|
@ -136,15 +141,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"av01.0.00M.08\"",
|
||||
format: mp4,
|
||||
codec: av01,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=2973283&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=242&keepalive=yes&lmt=1608509388282028&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgEleuqkeo7x7BsHur5aGPfHaT6KjKEG4c1d_xXwqlrsYCIQD85X_m050XwWyYlfLiWtZz-TX--H8H0UvfZCWKpY7m4Q%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=2973283&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=242&keepalive=yes&lmt=1608509388282028&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgEleuqkeo7x7BsHur5aGPfHaT6KjKEG4c1d_xXwqlrsYCIQD85X_m050XwWyYlfLiWtZz-TX--H8H0UvfZCWKpY7m4Q%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 242,
|
||||
bitrate: 184064,
|
||||
average_bitrate: 145902,
|
||||
size: Some(2973283),
|
||||
last_modified: Some(1608509388282028),
|
||||
index_range: Some(Range(
|
||||
start: 219,
|
||||
end: 753,
|
||||
|
|
@ -162,15 +169,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=2238952&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=395&keepalive=yes&lmt=1608045728968690&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAIBttTR02kTdGb4vdxQ9Gro88JOAY7u5z69nJbdmVS1sAiBr61rqkUtra4PHLdnp2w-s8ZSaN_4qZ3OEeeuIr5C13w%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=2238952&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=395&keepalive=yes&lmt=1608045728968690&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAIBttTR02kTdGb4vdxQ9Gro88JOAY7u5z69nJbdmVS1sAiBr61rqkUtra4PHLdnp2w-s8ZSaN_4qZ3OEeeuIr5C13w%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 395,
|
||||
bitrate: 135747,
|
||||
average_bitrate: 109867,
|
||||
size: Some(2238952),
|
||||
last_modified: Some(1608045728968690),
|
||||
index_range: Some(Range(
|
||||
start: 700,
|
||||
end: 1115,
|
||||
|
|
@ -188,15 +197,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"av01.0.00M.08\"",
|
||||
format: mp4,
|
||||
codec: av01,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=7808990&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=134&keepalive=yes&lmt=1580005649163759&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAMBRhMAZ5GXFSZHN6D-XhXRdG_EWSNwnN2eLPlwVNQ6PAiEA75eH0iJLgwRkujaABZnaJxG2ni-4irYHEGD42x6uaQg%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=2211222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=7808990&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=134&keepalive=yes&lmt=1580005649163759&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAMBRhMAZ5GXFSZHN6D-XhXRdG_EWSNwnN2eLPlwVNQ6PAiEA75eH0iJLgwRkujaABZnaJxG2ni-4irYHEGD42x6uaQg%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=2211222&vprv=1"),
|
||||
itag: 134,
|
||||
bitrate: 538143,
|
||||
average_bitrate: 383195,
|
||||
size: Some(7808990),
|
||||
last_modified: Some(1580005649163759),
|
||||
index_range: Some(Range(
|
||||
start: 740,
|
||||
end: 1155,
|
||||
|
|
@ -214,15 +225,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.4d401e\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=5169510&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=243&keepalive=yes&lmt=1608509388282405&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgNi0fwQbep6oKsEeEGfms2Ay4x2OL2G0hUX5GFhycgKkCIANiC-j-Gz3-noxsNeSKKPxy--T9mFBu_8V7Vi5-zDYS&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=5169510&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=243&keepalive=yes&lmt=1608509388282405&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgNi0fwQbep6oKsEeEGfms2Ay4x2OL2G0hUX5GFhycgKkCIANiC-j-Gz3-noxsNeSKKPxy--T9mFBu_8V7Vi5-zDYS&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 243,
|
||||
bitrate: 319085,
|
||||
average_bitrate: 253673,
|
||||
size: Some(5169510),
|
||||
last_modified: Some(1608509388282405),
|
||||
index_range: Some(Range(
|
||||
start: 220,
|
||||
end: 754,
|
||||
|
|
@ -240,15 +253,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=4130385&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=396&keepalive=yes&lmt=1608045761576250&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgFuBoOIkqwq0D1_OmnNJx3C0jmhHUyskpzPrTMoaWRYECIFZ1Y4QbQ41GsWS8yRHox8l_nGVosfXhXfKu3v18AyeT&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=4130385&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=396&keepalive=yes&lmt=1608045761576250&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgFuBoOIkqwq0D1_OmnNJx3C0jmhHUyskpzPrTMoaWRYECIFZ1Y4QbQ41GsWS8yRHox8l_nGVosfXhXfKu3v18AyeT&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 396,
|
||||
bitrate: 258097,
|
||||
average_bitrate: 202682,
|
||||
size: Some(4130385),
|
||||
last_modified: Some(1608045761576250),
|
||||
index_range: Some(Range(
|
||||
start: 700,
|
||||
end: 1115,
|
||||
|
|
@ -266,15 +281,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"av01.0.01M.08\"",
|
||||
format: mp4,
|
||||
codec: av01,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=8890590&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=244&keepalive=yes&lmt=1608509388284632&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgMYF0KQQNgYI8oOhgdCwyRY6E_hvFnJiaAadyMf89MRoCIHnDnROTvUoy0iIBM3MzFAxJh_bLA-2vFl9KFDrHOf1B&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=8890590&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=244&keepalive=yes&lmt=1608509388284632&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgMYF0KQQNgYI8oOhgdCwyRY6E_hvFnJiaAadyMf89MRoCIHnDnROTvUoy0iIBM3MzFAxJh_bLA-2vFl9KFDrHOf1B&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 244,
|
||||
bitrate: 539056,
|
||||
average_bitrate: 436270,
|
||||
size: Some(8890590),
|
||||
last_modified: Some(1608509388284632),
|
||||
index_range: Some(Range(
|
||||
start: 220,
|
||||
end: 754,
|
||||
|
|
@ -292,15 +309,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=6873325&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=397&keepalive=yes&lmt=1608045990917419&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAOtLGFoFtLHIXzNRoSrR7ULbIz91OYmaVQkcSatqNKAiAiEA23ZF7h2BZZCAGc0Zdd2p3PWRotmwLDyH6yYCuQpE8xw%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=6873325&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=397&keepalive=yes&lmt=1608045990917419&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAOtLGFoFtLHIXzNRoSrR7ULbIz91OYmaVQkcSatqNKAiAiEA23ZF7h2BZZCAGc0Zdd2p3PWRotmwLDyH6yYCuQpE8xw%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 397,
|
||||
bitrate: 436843,
|
||||
average_bitrate: 337281,
|
||||
size: Some(6873325),
|
||||
last_modified: Some(1608045990917419),
|
||||
index_range: Some(Range(
|
||||
start: 700,
|
||||
end: 1115,
|
||||
|
|
@ -318,15 +337,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"av01.0.04M.08\"",
|
||||
format: mp4,
|
||||
codec: av01,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=16547577&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=247&keepalive=yes&lmt=1608509388326822&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgfYKbT_196P-2EtjuqcTKdataiM480y65Ko0a73dv7WECIQC6nqWienQvu7swC1OW9HlwFWRH7VwTwj6H4yjY6FYvzg%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=16547577&dur=163.029&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=247&keepalive=yes&lmt=1608509388326822&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgfYKbT_196P-2EtjuqcTKdataiM480y65Ko0a73dv7WECIQC6nqWienQvu7swC1OW9HlwFWRH7VwTwj6H4yjY6FYvzg%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 247,
|
||||
bitrate: 982813,
|
||||
average_bitrate: 812006,
|
||||
size: Some(16547577),
|
||||
last_modified: Some(1608509388326822),
|
||||
index_range: Some(Range(
|
||||
start: 220,
|
||||
end: 754,
|
||||
|
|
@ -344,15 +365,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=35955780&dur=163.046&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=302&keepalive=yes&lmt=1608509234088626&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgQG8GPj3w_5_Lr2apagmte66IFBY3bYcZ2KnhwnUpshYCIFgvHYIZsz8WdYGSk9adpfMNKX0pzSP_l8cW47Gq2RTi&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=35955780&dur=163.046&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=302&keepalive=yes&lmt=1608509234088626&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgQG8GPj3w_5_Lr2apagmte66IFBY3bYcZ2KnhwnUpshYCIFgvHYIZsz8WdYGSk9adpfMNKX0pzSP_l8cW47Gq2RTi&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 302,
|
||||
bitrate: 2354009,
|
||||
average_bitrate: 1764202,
|
||||
size: Some(35955780),
|
||||
last_modified: Some(1608509234088626),
|
||||
index_range: Some(Range(
|
||||
start: 219,
|
||||
end: 771,
|
||||
|
|
@ -370,15 +393,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=22365208&dur=163.046&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=398&keepalive=yes&lmt=1608048380553749&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAI-VhcBU6o8LGmeuVYC2_zbxeGvC6XWf7yIOQ1RvjURhAiEA0YcZlVOI2ZUtKl-31__Hzax2SOUPeekCRjqjfw4m15s%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=22365208&dur=163.046&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=398&keepalive=yes&lmt=1608048380553749&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAI-VhcBU6o8LGmeuVYC2_zbxeGvC6XWf7yIOQ1RvjURhAiEA0YcZlVOI2ZUtKl-31__Hzax2SOUPeekCRjqjfw4m15s%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 398,
|
||||
bitrate: 1348419,
|
||||
average_bitrate: 1097369,
|
||||
size: Some(22365208),
|
||||
last_modified: Some(1608048380553749),
|
||||
index_range: Some(Range(
|
||||
start: 700,
|
||||
end: 1115,
|
||||
|
|
@ -396,15 +421,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"av01.0.08M.08\"",
|
||||
format: mp4,
|
||||
codec: av01,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=65400181&dur=163.046&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=299&keepalive=yes&lmt=1580005649161486&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAIdbG-deTvLhp7mD2b-QZYQamPFv75l1bNBEEOMihrxPAiEA1NYvRlFphbRRvFIBCP-Ij9-5q8OTwUskgsL6LyIrD7c%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=2211222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=65400181&dur=163.046&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=299&keepalive=yes&lmt=1580005649161486&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAIdbG-deTvLhp7mD2b-QZYQamPFv75l1bNBEEOMihrxPAiEA1NYvRlFphbRRvFIBCP-Ij9-5q8OTwUskgsL6LyIrD7c%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=2211222&vprv=1"),
|
||||
itag: 299,
|
||||
bitrate: 4190323,
|
||||
average_bitrate: 3208919,
|
||||
size: Some(65400181),
|
||||
last_modified: Some(1580005649161486),
|
||||
index_range: Some(Range(
|
||||
start: 740,
|
||||
end: 1155,
|
||||
|
|
@ -422,15 +449,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.64002a\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=62993617&dur=163.046&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=303&keepalive=yes&lmt=1608509371758331&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAJ8n34LQhg6iEg1Ux9rDkk48e8l3vBR4WwuHeIpKnorlAiBopK4z-nq-pJTPTmrdbbKPW1Lfufdz2f9sGUKY-dzk5A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=62993617&dur=163.046&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=303&keepalive=yes&lmt=1608509371758331&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAJ8n34LQhg6iEg1Ux9rDkk48e8l3vBR4WwuHeIpKnorlAiBopK4z-nq-pJTPTmrdbbKPW1Lfufdz2f9sGUKY-dzk5A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 303,
|
||||
bitrate: 3832648,
|
||||
average_bitrate: 3090839,
|
||||
size: Some(62993617),
|
||||
last_modified: Some(1608509371758331),
|
||||
index_range: Some(Range(
|
||||
start: 219,
|
||||
end: 776,
|
||||
|
|
@ -448,15 +477,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=42567727&dur=163.046&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=399&keepalive=yes&lmt=1608052932785283&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAMewAT3SgJRGn7wqDaDzNWcsAfrjFRu6k0wm7O_5YJeQAiANVhGmILp_gmNXnmixDesxsZ44_72YBT2SqjLLSZV32w%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=42567727&dur=163.046&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=399&keepalive=yes&lmt=1608052932785283&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAMewAT3SgJRGn7wqDaDzNWcsAfrjFRu6k0wm7O_5YJeQAiANVhGmILp_gmNXnmixDesxsZ44_72YBT2SqjLLSZV32w%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 399,
|
||||
bitrate: 2572342,
|
||||
average_bitrate: 2088624,
|
||||
size: Some(42567727),
|
||||
last_modified: Some(1608052932785283),
|
||||
index_range: Some(Range(
|
||||
start: 700,
|
||||
end: 1115,
|
||||
|
|
@ -474,17 +505,19 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"av01.0.09M.08\"",
|
||||
format: mp4,
|
||||
codec: av01,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
],
|
||||
audio_streams: [
|
||||
AudioStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=934449&dur=163.061&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=249&keepalive=yes&lmt=1608509101590706&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAOdVu1woKNveQspV4WPm1PHrOBuzlrnPu2ZLvyiYZCSbAiAYODN_y5t1oU334SHUqqgyc4Wnt-9If-W98Fd966fy2A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=934449&dur=163.061&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=249&keepalive=yes&lmt=1608509101590706&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAOdVu1woKNveQspV4WPm1PHrOBuzlrnPu2ZLvyiYZCSbAiAYODN_y5t1oU334SHUqqgyc4Wnt-9If-W98Fd966fy2A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 249,
|
||||
bitrate: 53039,
|
||||
average_bitrate: 45845,
|
||||
size: 934449,
|
||||
last_modified: Some(1608509101590706),
|
||||
index_range: Some(Range(
|
||||
start: 266,
|
||||
end: 551,
|
||||
|
|
@ -499,16 +532,19 @@ VideoPlayer(
|
|||
codec: opus,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(5.2200003),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=1245866&dur=163.061&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=250&keepalive=yes&lmt=1608509101111096&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAMJJ-uGQureE70LIxHjHP9hFxqcWwsSlxXX6EjGKmFfEAiAvQ98YKkqUrweNnBZOI7pXJk1kuU_1hSsQ0KeNU4CbyQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=1245866&dur=163.061&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=250&keepalive=yes&lmt=1608509101111096&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAMJJ-uGQureE70LIxHjHP9hFxqcWwsSlxXX6EjGKmFfEAiAvQ98YKkqUrweNnBZOI7pXJk1kuU_1hSsQ0KeNU4CbyQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 250,
|
||||
bitrate: 71268,
|
||||
average_bitrate: 61123,
|
||||
size: 1245866,
|
||||
last_modified: Some(1608509101111096),
|
||||
index_range: Some(Range(
|
||||
start: 266,
|
||||
end: 551,
|
||||
|
|
@ -523,16 +559,19 @@ VideoPlayer(
|
|||
codec: opus,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(5.2200003),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=2640283&dur=163.096&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=140&keepalive=yes&lmt=1580005579712232&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhANXIw4pIwIPvMGWnJSrA_bnmBX6KPBPqak18aPtKsI8jAiBvisRnEtFax7OTrwKbOiktCihoMraLkCi7Rnnu6JGmeQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=2211222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=2640283&dur=163.096&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=140&keepalive=yes&lmt=1580005579712232&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhANXIw4pIwIPvMGWnJSrA_bnmBX6KPBPqak18aPtKsI8jAiBvisRnEtFax7OTrwKbOiktCihoMraLkCi7Rnnu6JGmeQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=2211222&vprv=1"),
|
||||
itag: 140,
|
||||
bitrate: 130268,
|
||||
average_bitrate: 129508,
|
||||
size: 2640283,
|
||||
last_modified: Some(1580005579712232),
|
||||
index_range: Some(Range(
|
||||
start: 632,
|
||||
end: 867,
|
||||
|
|
@ -547,16 +586,19 @@ VideoPlayer(
|
|||
codec: mp4a,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(5.2159004),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=2476314&dur=163.061&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=251&keepalive=yes&lmt=1608509101894140&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAKP_KjT_SSnz5WGXaveO56pJAEw166qT3cpBdAZI1zwCAiBWZKVQZxfOPWnqSp5FnRDyQBQ-6a2nZopyA1eHicgHtw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=2476314&dur=163.061&ei=q1jpYtq3BJCX1gKVyJGQDg&expire=1659481355&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AGfBIFoT5D_NZAwXN7lVCS2VYLDMMegfaJQqvSJp-Hhy&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=251&keepalive=yes&lmt=1608509101894140&lsig=AG3C_xAwRgIhANxHzq0WC6OvdTpPJp52z3eGAm-jzUX7fcKiWlJ0T9kEAiEA02Bjesi_an2-pUh0kHdKQe0s_7micbcv3JKiBlxsYGs%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5edn6k&ms=au%2Conr&mt=1659459429&mv=m&mvi=4&n=T16m7p0RvV7UhQ&ns=tWuNfisHu8yiCA6Avm7nUlwH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAKP_KjT_SSnz5WGXaveO56pJAEw166qT3cpBdAZI1zwCAiBWZKVQZxfOPWnqSp5FnRDyQBQ-6a2nZopyA1eHicgHtw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-KhrZGE2opztWyVdAtyUNlb8dXPDs&txp=1311222&vprv=1"),
|
||||
itag: 251,
|
||||
bitrate: 140633,
|
||||
average_bitrate: 121491,
|
||||
size: 2476314,
|
||||
last_modified: Some(1608509101894140),
|
||||
index_range: Some(Range(
|
||||
start: 266,
|
||||
end: 551,
|
||||
|
|
@ -571,7 +613,9 @@ VideoPlayer(
|
|||
codec: opus,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(5.2200003),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
|
|
@ -588,6 +632,9 @@ VideoPlayer(
|
|||
valid_until: "[date]",
|
||||
hls_manifest_url: None,
|
||||
dash_manifest_url: Some("https://manifest.googlevideo.com/api/manifest/dash/expire/1659481355/ei/q1jpYtq3BJCX1gKVyJGQDg/ip/2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e/id/a4fbddf14c6649b4/source/youtube/requiressl/yes/playback_host/rr4---sn-h0jelnez.googlevideo.com/mh/mQ/mm/31%2C26/mn/sn-h0jelnez%2Csn-4g5edn6k/ms/au%2Conr/mv/m/mvi/4/pl/37/hfr/all/as/fmp4_audio_clear%2Cwebm_audio_clear%2Cwebm2_audio_clear%2Cfmp4_sd_hd_clear%2Cwebm2_sd_hd_clear/initcwndbps/1513750/spc/lT-KhrZGE2opztWyVdAtyUNlb8dXPDs/vprv/1/mt/1659459429/fvip/4/keepalive/yes/fexp/24001373%2C24007246/itag/0/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cas%2Cspc%2Cvprv%2Citag/sig/AOq0QJ8wRgIhAPEjHK19PKVHqQeia6WF4qubuMYk74LGi8F8lk5ZMPkFAiEAsaB2pKQWBvuPnNUnbdQXHc-izgsHJUP793woC2xNJlg%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AG3C_xAwRQIgOY4xu4H9wqPVZ7vF2i0hFcOnqrur1XGoA43a7ZEuuSUCIQCyPxBKXUQrKFmknNEGpX5GSWySKgMw_xHBikWpKpKwvg%3D%3D"),
|
||||
abr_streaming_url: None,
|
||||
abr_ustreamer_config: None,
|
||||
po_token: None,
|
||||
preview_frames: [
|
||||
Frameset(
|
||||
url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L0/default.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLAXobPyrylgm8IEvjlZzqYTiPe1Ow",
|
||||
|
|
|
|||
|
|
@ -34,11 +34,12 @@ VideoPlayer(
|
|||
),
|
||||
video_streams: [
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=11439331&dur=163.096&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=18&lmt=1580005476071743&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=mAEwZepBJSQPkQ&ns=orl5qWACo00YlHHyQZ7a6awH&pl=37&ratebypass=yes&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhANfXubbDcXpc25m3F5xQ97ygJRjrTvm8ruVxgnxgFAUBAiAEnj_3KacDNTTLUk-6ZEbL-52zxmBLU1iuTEDx0NvJzA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=2211222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=11439331&dur=163.096&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=18&lmt=1580005476071743&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=mAEwZepBJSQPkQ&ns=orl5qWACo00YlHHyQZ7a6awH&pl=37&ratebypass=yes&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhANfXubbDcXpc25m3F5xQ97ygJRjrTvm8ruVxgnxgFAUBAiAEnj_3KacDNTTLUk-6ZEbL-52zxmBLU1iuTEDx0NvJzA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=2211222&vprv=1"),
|
||||
itag: 18,
|
||||
bitrate: 561339,
|
||||
average_bitrate: 561109,
|
||||
size: Some(11439331),
|
||||
last_modified: Some(1580005476071743),
|
||||
index_range: None,
|
||||
init_range: None,
|
||||
duration_ms: Some(163096),
|
||||
|
|
@ -50,17 +51,19 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.42001E, mp4a.40.2\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
],
|
||||
video_only_streams: [
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=1484736&dur=163.029&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=278&keepalive=yes&lmt=1608509388295661&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgEQ0-VVvo41T4l2X26p5zP8Wo8sXOPmBWvCf2OW33ilgCIH2bIFOYgpmsml7FvRQj_SoLzPh7yBvmLZ61Kgsj4FUe&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=1484736&dur=163.029&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=278&keepalive=yes&lmt=1608509388295661&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgEQ0-VVvo41T4l2X26p5zP8Wo8sXOPmBWvCf2OW33ilgCIH2bIFOYgpmsml7FvRQj_SoLzPh7yBvmLZ61Kgsj4FUe&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1"),
|
||||
itag: 278,
|
||||
bitrate: 87458,
|
||||
average_bitrate: 72857,
|
||||
size: Some(1484736),
|
||||
last_modified: Some(1608509388295661),
|
||||
index_range: Some(Range(
|
||||
start: 218,
|
||||
end: 751,
|
||||
|
|
@ -78,15 +81,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=2973283&dur=163.029&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=242&keepalive=yes&lmt=1608509388282028&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAO7DI5E91yHpLhgiWg9C99NsMoJBVOWsNTNF3os9kREQAiAr2oC8vFtXIHwkJJt45q0sdmjiJdkTO2i8VAjUodk6Xw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=2973283&dur=163.029&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=242&keepalive=yes&lmt=1608509388282028&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAO7DI5E91yHpLhgiWg9C99NsMoJBVOWsNTNF3os9kREQAiAr2oC8vFtXIHwkJJt45q0sdmjiJdkTO2i8VAjUodk6Xw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1"),
|
||||
itag: 242,
|
||||
bitrate: 184064,
|
||||
average_bitrate: 145902,
|
||||
size: Some(2973283),
|
||||
last_modified: Some(1608509388282028),
|
||||
index_range: Some(Range(
|
||||
start: 219,
|
||||
end: 753,
|
||||
|
|
@ -104,15 +109,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=7808990&dur=163.029&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=134&keepalive=yes&lmt=1580005649163759&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgTkOjFd0nExEtpr8sBIaNu9HhkxWNdjhSKufHMhLR8-8CIHJAmOuCD7VBv_krH6rn5zqXFqAfsq9rQPXlC3CcQrjM&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=2211222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=7808990&dur=163.029&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=134&keepalive=yes&lmt=1580005649163759&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgTkOjFd0nExEtpr8sBIaNu9HhkxWNdjhSKufHMhLR8-8CIHJAmOuCD7VBv_krH6rn5zqXFqAfsq9rQPXlC3CcQrjM&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=2211222&vprv=1"),
|
||||
itag: 134,
|
||||
bitrate: 538143,
|
||||
average_bitrate: 383195,
|
||||
size: Some(7808990),
|
||||
last_modified: Some(1580005649163759),
|
||||
index_range: Some(Range(
|
||||
start: 740,
|
||||
end: 1155,
|
||||
|
|
@ -130,15 +137,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.4d401e\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=5169510&dur=163.029&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=243&keepalive=yes&lmt=1608509388282405&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAPqQfxwIANgIC3DrQ6avaWOhCvIMLdzMPQtFOx2gwEXNAiAwJp2mgN9-zl4vPOB2uoQXOfmGsYDB470q1zg7wRW4Sw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=5169510&dur=163.029&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=243&keepalive=yes&lmt=1608509388282405&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAPqQfxwIANgIC3DrQ6avaWOhCvIMLdzMPQtFOx2gwEXNAiAwJp2mgN9-zl4vPOB2uoQXOfmGsYDB470q1zg7wRW4Sw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1"),
|
||||
itag: 243,
|
||||
bitrate: 319085,
|
||||
average_bitrate: 253673,
|
||||
size: Some(5169510),
|
||||
last_modified: Some(1608509388282405),
|
||||
index_range: Some(Range(
|
||||
start: 220,
|
||||
end: 754,
|
||||
|
|
@ -156,15 +165,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=8890590&dur=163.029&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=244&keepalive=yes&lmt=1608509388284632&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAIjdvhcThMxoo_v2bzEjaR_w0ryWFQDs0f0INaI5WPcVAiApQZUYTqcQJdfxZlNSsp7cl3FK8XPfDZ-qbVvj9GuauQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=8890590&dur=163.029&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=244&keepalive=yes&lmt=1608509388284632&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAIjdvhcThMxoo_v2bzEjaR_w0ryWFQDs0f0INaI5WPcVAiApQZUYTqcQJdfxZlNSsp7cl3FK8XPfDZ-qbVvj9GuauQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1"),
|
||||
itag: 244,
|
||||
bitrate: 539056,
|
||||
average_bitrate: 436270,
|
||||
size: Some(8890590),
|
||||
last_modified: Some(1608509388284632),
|
||||
index_range: Some(Range(
|
||||
start: 220,
|
||||
end: 754,
|
||||
|
|
@ -182,15 +193,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=16547577&dur=163.029&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=247&keepalive=yes&lmt=1608509388326822&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgBV4Oa1IQ0YNDvRrKO5ec3Pfbg65MxzmIxCcm0gOuwT0CIFysQdow6DQXzz1W9KZVuqACTdjXQ3-yiBj9GcmNw3HE&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=16547577&dur=163.029&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=247&keepalive=yes&lmt=1608509388326822&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgBV4Oa1IQ0YNDvRrKO5ec3Pfbg65MxzmIxCcm0gOuwT0CIFysQdow6DQXzz1W9KZVuqACTdjXQ3-yiBj9GcmNw3HE&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1"),
|
||||
itag: 247,
|
||||
bitrate: 982813,
|
||||
average_bitrate: 812006,
|
||||
size: Some(16547577),
|
||||
last_modified: Some(1608509388326822),
|
||||
index_range: Some(Range(
|
||||
start: 220,
|
||||
end: 754,
|
||||
|
|
@ -208,15 +221,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=35955780&dur=163.046&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=302&keepalive=yes&lmt=1608509234088626&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAOiqSNfGfOprZ9InWVMc7gY0KrTf8weLibcpK0W2Hfa6AiAFHW213qsByzlar5ivCAYttjo1rPciQnLEnh-izJ3ZhA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=35955780&dur=163.046&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=302&keepalive=yes&lmt=1608509234088626&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAOiqSNfGfOprZ9InWVMc7gY0KrTf8weLibcpK0W2Hfa6AiAFHW213qsByzlar5ivCAYttjo1rPciQnLEnh-izJ3ZhA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1"),
|
||||
itag: 302,
|
||||
bitrate: 2354009,
|
||||
average_bitrate: 1764202,
|
||||
size: Some(35955780),
|
||||
last_modified: Some(1608509234088626),
|
||||
index_range: Some(Range(
|
||||
start: 219,
|
||||
end: 771,
|
||||
|
|
@ -234,15 +249,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=65400181&dur=163.046&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=299&keepalive=yes&lmt=1580005649161486&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgdkJv6w9_Azf0m6poA-ULyX0eH_GKBtSJRwUY1lNBAZgCIDCrC0lnu__ycTaIhg0pUcsRUqay60S3QMo5084EWifd&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=2211222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=65400181&dur=163.046&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=299&keepalive=yes&lmt=1580005649161486&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgdkJv6w9_Azf0m6poA-ULyX0eH_GKBtSJRwUY1lNBAZgCIDCrC0lnu__ycTaIhg0pUcsRUqay60S3QMo5084EWifd&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=2211222&vprv=1"),
|
||||
itag: 299,
|
||||
bitrate: 4190323,
|
||||
average_bitrate: 3208919,
|
||||
size: Some(65400181),
|
||||
last_modified: Some(1580005649161486),
|
||||
index_range: Some(Range(
|
||||
start: 740,
|
||||
end: 1155,
|
||||
|
|
@ -260,15 +277,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.64002a\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=62993617&dur=163.046&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=303&keepalive=yes&lmt=1608509371758331&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgZi9dDSMWh10NID8-QNn3azIH1zw5UooZrRTPZjVn7hYCIAm9bFc6NBwJ_DzY4V2R_zGmJSpOwQl8LEsfCb7hf6i7&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=62993617&dur=163.046&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=303&keepalive=yes&lmt=1608509371758331&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgZi9dDSMWh10NID8-QNn3azIH1zw5UooZrRTPZjVn7hYCIAm9bFc6NBwJ_DzY4V2R_zGmJSpOwQl8LEsfCb7hf6i7&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1"),
|
||||
itag: 303,
|
||||
bitrate: 3832648,
|
||||
average_bitrate: 3090839,
|
||||
size: Some(62993617),
|
||||
last_modified: Some(1608509371758331),
|
||||
index_range: Some(Range(
|
||||
start: 219,
|
||||
end: 776,
|
||||
|
|
@ -286,17 +305,19 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
],
|
||||
audio_streams: [
|
||||
AudioStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=934449&dur=163.061&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=249&keepalive=yes&lmt=1608509101590706&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAMUfr2X-eQJt1abn-IK1H4d5DtvKZuBaETo4opNi6mqCAiEAvBmrmuaoFjB1CJ2Kug87w-Uv6OCdxyrJ_3HIaHX9KBI%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=934449&dur=163.061&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=249&keepalive=yes&lmt=1608509101590706&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAMUfr2X-eQJt1abn-IK1H4d5DtvKZuBaETo4opNi6mqCAiEAvBmrmuaoFjB1CJ2Kug87w-Uv6OCdxyrJ_3HIaHX9KBI%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1"),
|
||||
itag: 249,
|
||||
bitrate: 53039,
|
||||
average_bitrate: 45845,
|
||||
size: 934449,
|
||||
last_modified: Some(1608509101590706),
|
||||
index_range: Some(Range(
|
||||
start: 266,
|
||||
end: 551,
|
||||
|
|
@ -311,16 +332,19 @@ VideoPlayer(
|
|||
codec: opus,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(0.0006532669),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=1245866&dur=163.061&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=250&keepalive=yes&lmt=1608509101111096&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAIflUU4t4Ukf4CXW3ttB5c8SnP4z4z3ef-7EFVMFv4U8AiAlcKmmofCTzzr2NRRsRVosQdpDBphUqWyVzS7noGrixw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=1245866&dur=163.061&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=250&keepalive=yes&lmt=1608509101111096&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAIflUU4t4Ukf4CXW3ttB5c8SnP4z4z3ef-7EFVMFv4U8AiAlcKmmofCTzzr2NRRsRVosQdpDBphUqWyVzS7noGrixw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1"),
|
||||
itag: 250,
|
||||
bitrate: 71268,
|
||||
average_bitrate: 61123,
|
||||
size: 1245866,
|
||||
last_modified: Some(1608509101111096),
|
||||
index_range: Some(Range(
|
||||
start: 266,
|
||||
end: 551,
|
||||
|
|
@ -335,16 +359,19 @@ VideoPlayer(
|
|||
codec: opus,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(0.0006532669),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=2640283&dur=163.096&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=140&keepalive=yes&lmt=1580005579712232&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhALBveArAZ7DP9r1BIpNz6ZXst5MtzvUM72jhtYMrildCAiEArvwqaqcowZwR_UrRM-O7jq2CMxgBtbnmul27AEcBqEI%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=2211222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=2640283&dur=163.096&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=140&keepalive=yes&lmt=1580005579712232&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhALBveArAZ7DP9r1BIpNz6ZXst5MtzvUM72jhtYMrildCAiEArvwqaqcowZwR_UrRM-O7jq2CMxgBtbnmul27AEcBqEI%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=2211222&vprv=1"),
|
||||
itag: 140,
|
||||
bitrate: 130268,
|
||||
average_bitrate: 129508,
|
||||
size: 2640283,
|
||||
last_modified: Some(1580005579712232),
|
||||
index_range: Some(Range(
|
||||
start: 632,
|
||||
end: 867,
|
||||
|
|
@ -359,16 +386,19 @@ VideoPlayer(
|
|||
codec: mp4a,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(-0.003446579),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=2476314&dur=163.061&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=251&keepalive=yes&lmt=1608509101894140&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgARPqD-6172OshMHeV8DpONV7tnPvdsxcg8QlaIGxcuMCICSe8LWvhRTEO2bdAQ43OzOoc5XfJcj3veyhScVXVz8O&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=WEB_REMIX&clen=2476314&dur=163.061&ei=knDpYub6BojEgAf6jbLgDw&expire=1659487474&fexp=24001373%2C24007246&fvip=4&gir=yes&id=o-AM-wcJVO-yYYbVFnuifnzM4eRnD-AG1bS1AhLoDqi_is&initcwndbps=1418750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=251&keepalive=yes&lmt=1608509101894140&lsig=AG3C_xAwRgIhAMwYJqxve8BSujC-oaSFBbq67p-rFi7saU5V8Yb3qrjLAiEAlrMKR_sadHrkFpy7o7lGzKOCmU1OQazCNBbXjDT2a-o%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1659465669&mv=m&mvi=5&n=1taQMNHGExb_Vg&ns=UTT8RXHZNhPYTw6NgkzWMWEH&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgARPqD-6172OshMHeV8DpONV7tnPvdsxcg8QlaIGxcuMCICSe8LWvhRTEO2bdAQ43OzOoc5XfJcj3veyhScVXVz8O&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&spc=lT-Khox4YuJQ2wmH79zYALRvsWTPCUc&txp=1311222&vprv=1"),
|
||||
itag: 251,
|
||||
bitrate: 140633,
|
||||
average_bitrate: 121491,
|
||||
size: 2476314,
|
||||
last_modified: Some(1608509101894140),
|
||||
index_range: Some(Range(
|
||||
start: 266,
|
||||
end: 551,
|
||||
|
|
@ -383,7 +413,9 @@ VideoPlayer(
|
|||
codec: opus,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(0.0006532669),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
|
|
@ -400,6 +432,9 @@ VideoPlayer(
|
|||
valid_until: "[date]",
|
||||
hls_manifest_url: None,
|
||||
dash_manifest_url: Some("https://manifest.googlevideo.com/api/manifest/dash/expire/1659487474/ei/knDpYub6BojEgAf6jbLgDw/ip/2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e/id/a4fbddf14c6649b4/source/youtube/requiressl/yes/playback_host/rr5---sn-h0jeenek.googlevideo.com/mh/mQ/mm/31%2C29/mn/sn-h0jeenek%2Csn-h0jelnez/ms/au%2Crdu/mv/m/mvi/5/pl/37/hfr/all/as/fmp4_audio_clear%2Cwebm_audio_clear%2Cwebm2_audio_clear%2Cfmp4_sd_hd_clear%2Cwebm2_sd_hd_clear/initcwndbps/1418750/spc/lT-Khox4YuJQ2wmH79zYALRvsWTPCUc/vprv/1/mt/1659465669/fvip/4/keepalive/yes/fexp/24001373%2C24007246/itag/0/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cas%2Cspc%2Cvprv%2Citag/sig/AOq0QJ8wRAIgErABhAEaoKHUDu9dDbpxE_8gR4b8WWAi61fnu8UKnuICIEYrEKcHvqHdO4V3R7cvSGwi_HGH34IlQsKbziOfMBov/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AG3C_xAwRQIgJxHmH0Sxo3cY_pW_ZzQ3hW9-7oz6K_pZWcUdrDDQ2sQCIQDJYNINQwLgKelgbO3CZYx7sMxdUAFpWdokmRBQ77vwvw%3D%3D"),
|
||||
abr_streaming_url: None,
|
||||
abr_ustreamer_config: None,
|
||||
po_token: None,
|
||||
preview_frames: [
|
||||
Frameset(
|
||||
url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L0/default.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLAXobPyrylgm8IEvjlZzqYTiPe1Ow",
|
||||
|
|
|
|||
|
|
@ -57,11 +57,12 @@ VideoPlayer(
|
|||
video_streams: [],
|
||||
video_only_streams: [
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=IOS&clen=7808990&dur=163.029&ei=q1jpYq-xHs7NgQev0bfwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=5&gir=yes&id=o-ANNg3iPHI56jhLSlPQk4pi4mdub5iAby0hmJBVrtiJgY&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=134&keepalive=yes&lmt=1580005649163759&lsig=AG3C_xAwRQIgWKVoDpyI6QmVnkdGzdirFtjMAXhmLex64VTO7UUJd-4CIQDoJKkT2-Kpa7j0merJJoZDs4IkkXSjdNm3bvdCL8t2Pg%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jelnez%2Csn-h0jeenek&ms=au%2Crdu&mt=1659459429&mv=m&mvi=4&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAMFQo_RyC3Ud44QVGtKckMcuq5UQ3J7CgYsYl0bXaWMUAiEAhMi1h0ru4zoIGX0jBZT23dozvtrhf_m61p4qbAfEhZo%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&svpuc=1&txp=2211222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=IOS&clen=7808990&dur=163.029&ei=q1jpYq-xHs7NgQev0bfwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=5&gir=yes&id=o-ANNg3iPHI56jhLSlPQk4pi4mdub5iAby0hmJBVrtiJgY&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=134&keepalive=yes&lmt=1580005649163759&lsig=AG3C_xAwRQIgWKVoDpyI6QmVnkdGzdirFtjMAXhmLex64VTO7UUJd-4CIQDoJKkT2-Kpa7j0merJJoZDs4IkkXSjdNm3bvdCL8t2Pg%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jelnez%2Csn-h0jeenek&ms=au%2Crdu&mt=1659459429&mv=m&mvi=4&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAMFQo_RyC3Ud44QVGtKckMcuq5UQ3J7CgYsYl0bXaWMUAiEAhMi1h0ru4zoIGX0jBZT23dozvtrhf_m61p4qbAfEhZo%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&svpuc=1&txp=2211222&vprv=1"),
|
||||
itag: 134,
|
||||
bitrate: 538143,
|
||||
average_bitrate: 383195,
|
||||
size: Some(7808990),
|
||||
last_modified: Some(1580005649163759),
|
||||
index_range: Some(Range(
|
||||
start: 740,
|
||||
end: 1155,
|
||||
|
|
@ -79,15 +80,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.4D401E\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=IOS&clen=65400181&dur=163.046&ei=q1jpYq-xHs7NgQev0bfwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=5&gir=yes&id=o-ANNg3iPHI56jhLSlPQk4pi4mdub5iAby0hmJBVrtiJgY&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=299&keepalive=yes&lmt=1580005649161486&lsig=AG3C_xAwRQIgWKVoDpyI6QmVnkdGzdirFtjMAXhmLex64VTO7UUJd-4CIQDoJKkT2-Kpa7j0merJJoZDs4IkkXSjdNm3bvdCL8t2Pg%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jelnez%2Csn-h0jeenek&ms=au%2Crdu&mt=1659459429&mv=m&mvi=4&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAP6zxXXA18ToZWUfalauhhsgOsDHTu-R0QrqNrJR7D5kAiEAi8HBa9OkYwmA0bcRxhgvXfN9JsFlXwCWJ-x4ty6TjoY%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&svpuc=1&txp=2211222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=IOS&clen=65400181&dur=163.046&ei=q1jpYq-xHs7NgQev0bfwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=5&gir=yes&id=o-ANNg3iPHI56jhLSlPQk4pi4mdub5iAby0hmJBVrtiJgY&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=299&keepalive=yes&lmt=1580005649161486&lsig=AG3C_xAwRQIgWKVoDpyI6QmVnkdGzdirFtjMAXhmLex64VTO7UUJd-4CIQDoJKkT2-Kpa7j0merJJoZDs4IkkXSjdNm3bvdCL8t2Pg%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jelnez%2Csn-h0jeenek&ms=au%2Crdu&mt=1659459429&mv=m&mvi=4&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAP6zxXXA18ToZWUfalauhhsgOsDHTu-R0QrqNrJR7D5kAiEAi8HBa9OkYwmA0bcRxhgvXfN9JsFlXwCWJ-x4ty6TjoY%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&svpuc=1&txp=2211222&vprv=1"),
|
||||
itag: 299,
|
||||
bitrate: 4190323,
|
||||
average_bitrate: 3208919,
|
||||
size: Some(65400181),
|
||||
last_modified: Some(1580005649161486),
|
||||
index_range: Some(Range(
|
||||
start: 740,
|
||||
end: 1155,
|
||||
|
|
@ -105,17 +108,19 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.64002A\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
],
|
||||
audio_streams: [
|
||||
AudioStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=IOS&clen=995840&dur=163.189&ei=q1jpYq-xHs7NgQev0bfwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=5&gir=yes&id=o-ANNg3iPHI56jhLSlPQk4pi4mdub5iAby0hmJBVrtiJgY&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=139&keepalive=yes&lmt=1580005582214385&lsig=AG3C_xAwRQIgWKVoDpyI6QmVnkdGzdirFtjMAXhmLex64VTO7UUJd-4CIQDoJKkT2-Kpa7j0merJJoZDs4IkkXSjdNm3bvdCL8t2Pg%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jelnez%2Csn-h0jeenek&ms=au%2Crdu&mt=1659459429&mv=m&mvi=4&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAMXDvZZznm1LafIKh_pdGf-TjY5Kz-F9N67o6gXenKouAiEA5qji45i5ABmAytPDOORjw0OaBmwX88S7bgUWcmF-_LU%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&svpuc=1&txp=2211222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=IOS&clen=995840&dur=163.189&ei=q1jpYq-xHs7NgQev0bfwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=5&gir=yes&id=o-ANNg3iPHI56jhLSlPQk4pi4mdub5iAby0hmJBVrtiJgY&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=139&keepalive=yes&lmt=1580005582214385&lsig=AG3C_xAwRQIgWKVoDpyI6QmVnkdGzdirFtjMAXhmLex64VTO7UUJd-4CIQDoJKkT2-Kpa7j0merJJoZDs4IkkXSjdNm3bvdCL8t2Pg%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jelnez%2Csn-h0jeenek&ms=au%2Crdu&mt=1659459429&mv=m&mvi=4&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAMXDvZZznm1LafIKh_pdGf-TjY5Kz-F9N67o6gXenKouAiEA5qji45i5ABmAytPDOORjw0OaBmwX88S7bgUWcmF-_LU%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&svpuc=1&txp=2211222&vprv=1"),
|
||||
itag: 139,
|
||||
bitrate: 49724,
|
||||
average_bitrate: 48818,
|
||||
size: 995840,
|
||||
last_modified: Some(1580005582214385),
|
||||
index_range: Some(Range(
|
||||
start: 641,
|
||||
end: 876,
|
||||
|
|
@ -130,16 +135,19 @@ VideoPlayer(
|
|||
codec: mp4a,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(5.2159004),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=IOS&clen=2640283&dur=163.096&ei=q1jpYq-xHs7NgQev0bfwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=5&gir=yes&id=o-ANNg3iPHI56jhLSlPQk4pi4mdub5iAby0hmJBVrtiJgY&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=140&keepalive=yes&lmt=1580005579712232&lsig=AG3C_xAwRQIgWKVoDpyI6QmVnkdGzdirFtjMAXhmLex64VTO7UUJd-4CIQDoJKkT2-Kpa7j0merJJoZDs4IkkXSjdNm3bvdCL8t2Pg%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jelnez%2Csn-h0jeenek&ms=au%2Crdu&mt=1659459429&mv=m&mvi=4&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgcsPm6rrUAwCi1VTGf0FMDTjzjM01__iTC13PnzDTFeQCIQCJ_EGeKVZztkmK3Cr7gVuxUP83XCSlP01YLx5FO-PPcQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&svpuc=1&txp=2211222&vprv=1",
|
||||
url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=IOS&clen=2640283&dur=163.096&ei=q1jpYq-xHs7NgQev0bfwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=5&gir=yes&id=o-ANNg3iPHI56jhLSlPQk4pi4mdub5iAby0hmJBVrtiJgY&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&itag=140&keepalive=yes&lmt=1580005579712232&lsig=AG3C_xAwRQIgWKVoDpyI6QmVnkdGzdirFtjMAXhmLex64VTO7UUJd-4CIQDoJKkT2-Kpa7j0merJJoZDs4IkkXSjdNm3bvdCL8t2Pg%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jelnez%2Csn-h0jeenek&ms=au%2Crdu&mt=1659459429&mv=m&mvi=4&otfp=1&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgcsPm6rrUAwCi1VTGf0FMDTjzjM01__iTC13PnzDTFeQCIQCJ_EGeKVZztkmK3Cr7gVuxUP83XCSlP01YLx5FO-PPcQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&svpuc=1&txp=2211222&vprv=1"),
|
||||
itag: 140,
|
||||
bitrate: 130268,
|
||||
average_bitrate: 129508,
|
||||
size: 2640283,
|
||||
last_modified: Some(1580005579712232),
|
||||
index_range: Some(Range(
|
||||
start: 632,
|
||||
end: 867,
|
||||
|
|
@ -154,7 +162,9 @@ VideoPlayer(
|
|||
codec: mp4a,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(5.2159004),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
|
|
@ -171,6 +181,9 @@ VideoPlayer(
|
|||
valid_until: "[date]",
|
||||
hls_manifest_url: Some("https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1659481355/ei/q1jpYq-xHs7NgQev0bfwAQ/ip/2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e/id/a4fbddf14c6649b4/source/youtube/requiressl/yes/playback_host/rr4---sn-h0jelnez.googlevideo.com/mh/mQ/mm/31%2C29/mn/sn-h0jelnez%2Csn-h0jeenek/ms/au%2Crdu/mv/m/mvi/4/pl/37/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1513750/vprv/1/go/1/mt/1659459429/fvip/5/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24001373%2C24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AOq0QJ8wRQIhAIYnEHvIgJtJ8hehAXNtVY3qsgsq_GdOhWf2hkJZe6lCAiBxaRY_nubYp6hBizcAg_KFkKnkG-t2XYLRQ5wGdM3AjA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AG3C_xAwRgIhAM_91Kk_0VLuSsR6nLCY7LdtWojyRAzXSScd_X9ShRROAiEA1AF4VY04F71NsAI8_j3iqjuXnWL9s6NoXHq7P8-bHx8%3D/file/index.m3u8"),
|
||||
dash_manifest_url: None,
|
||||
abr_streaming_url: Some("https://rr4---sn-h0jelnez.googlevideo.com/videoplayback?c=IOS&ei=q1jpYq-xHs7NgQev0bfwAQ&expire=1659481355&fexp=24001373%2C24007246&fvip=5&id=o-ANNg3iPHI56jhLSlPQk4pi4mdub5iAby0hmJBVrtiJgY&initcwndbps=1513750&ip=2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e&keepalive=yes&lsig=AG3C_xAwRgIhAK6T5ehnFBsc0FOurPHH1ME_vGcVysI-g5jrtEsvX64sAiEArY-iAvQCsc4R8yg8dvMdpnuHPIcPMCnRgyh8E527HF0%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mm=31%2C29&mn=sn-h0jelnez%2Csn-h0jeenek&ms=au%2Crdu&mt=1659459429&mv=m&mvi=4&pl=37&rbqsm=fr&requiressl=yes&sabr=1&sig=AOq0QJ8wRgIhAJCJpb5gE12jQc2qOUy-Y61vEHeiAP_F78weNCzj8VklAiEAwR2PK52CmwsVHfRVk75OOYOxwYKNW2g1eDBw3COBP9w%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Csvpuc%2Csabr&svpuc=1"),
|
||||
abr_ustreamer_config: Some("CpYECp0DCAAQgAUY6AIl-n6qPi0AAIA_NT0Klz9oAXI6ChJtZnMyX2NtZnNfdjNfMV8wNDMSIAoeCgxkZXZpY2VfbW9kZWwSDgoMCgppcGhvbmUxNCw1GAAgAXIWChJtZnMyX2NtZnNfdjNfMV8wNDMYAHjoAoABAagBAbUB9ijcP6AC6AK4AgDaAmEQsOoBGKhGIKCcASjYNjCYdXCIJ4AB9AO4AQHgAQP4AQGQAgGYAgygAgGoAgGwAgG4AgHAAgHIAgHQAgLgAgHoAgLwAgGAAwKIA4gnmAMBqAMIwAMByAMB2AMB-LWR5QwB-gIvCAwQGBgyIDItAABwQjUAAIxCQAFIAVAKWAplAACAQGjAcM0BAACAP_ABAegC0AWCAwCQAwGgAwGoAwGwAwPQAwHYAwHgA5BOuAQBygRWChUI4NQDEJh1GOgHJQAAAAAoADAAQAEQ4NQDGNAPKjYKCnRiX2Nvc3RfNTAgDykAAAAAAAAAAEgBUAFdZmbmPmXNzEw-bZqZGT91mpkZP3jAqQeSAQDoBAHwBAH4BAGQBQGgBQEYASABMgwIqwIQjrrY25ug5wIyDAiqAhCOutjbm6DnAjIMCIcBEI662NuboOcCMgwIhgEQ78vY25ug5wIyDAiFARCOutjbm6DnAjIMCKABEI662NuboOcCMgwIiwEQ8aniu5ug5wIyDAiMARDozcm6m6DnAjoAEkwA8tjvwTBFAiAyo6mtW-M8Y8noBO_6Y3RmNo5U2LntCwiKcI2yye_zRgIhAK27d1UbqzhtkQhminIBAajD70ONeAQNwjt7VRpJRDimGgJlaQ=="),
|
||||
po_token: None,
|
||||
preview_frames: [
|
||||
Frameset(
|
||||
url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L0/default.jpg?sqp=-oaymwGbA0g48quKqQOSA4gBAZUBAAAEQpgBMqABPKgBBLABELABDbABDLABELABFbABH7ABJrABLbABDrABDrABD7ABErABF7ABK7ABLLABKbABD7ABDrABELABFbABH7ABKrABMrABKbABD7ABEbABFLABGLABJrABPbABOLABLbABEbABFLABHrABKrABMbABS7ABR7ABNrABFbABHLABKbABLrABObABR7ABTbABP7ABJbABLrABN7ABPbABR7ABUrABUbABRbABM7ABQLABQrABQ7ABTLABRLABRrABQ7gBEbgBEbgBFbgBI7gBRLgBQ7gBQ7gBQ7gBEbgBE7gBFrgBL7gBQ7gBQ7gBQ7gBQ7gBFbgBFrgBKbgBQ7gBQ7gBQ7gBQ7gBQ7gBI7gBL7gBQ7gBQ7gBQ7gBQ7gBQ7gBQ7gBRLgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLCsCT8Lprh2S0ptmCRsWH7VtDl3YQ",
|
||||
|
|
|
|||
|
|
@ -24,11 +24,12 @@ VideoPlayer(
|
|||
),
|
||||
video_streams: [
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?bui=AXc671IT4iUCpJNJWUitTMgIi6njuKSsi3MNed1Szyf0qysTX0v1Nf6AyCvjIGbek5Fn50kuBrGtRJ5q&c=TVHTML5&clen=10262148&dur=163.096&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=18&lmt=1700885551970466&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=BMzwItzIOB1HhmG&ns=YmgbZhlLp0C-9ilsQWGAyUAQ&pl=26&ratebypass=yes&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRAIgUah4qH8RqPzmo75ExCWSiRYlUlsAk0v9gl638LitVNICICxFs5lK3CsmOAja0bsXavXkyykzpdhHZKGXOZQYT1f8&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&svpuc=1&txp=1318224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?bui=AXc671IT4iUCpJNJWUitTMgIi6njuKSsi3MNed1Szyf0qysTX0v1Nf6AyCvjIGbek5Fn50kuBrGtRJ5q&c=TVHTML5&clen=10262148&dur=163.096&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=18&lmt=1700885551970466&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=BMzwItzIOB1HhmG&ns=YmgbZhlLp0C-9ilsQWGAyUAQ&pl=26&ratebypass=yes&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRAIgUah4qH8RqPzmo75ExCWSiRYlUlsAk0v9gl638LitVNICICxFs5lK3CsmOAja0bsXavXkyykzpdhHZKGXOZQYT1f8&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&svpuc=1&txp=1318224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 18,
|
||||
bitrate: 503574,
|
||||
average_bitrate: 503367,
|
||||
size: Some(10262148),
|
||||
last_modified: Some(1700885551970466),
|
||||
index_range: None,
|
||||
init_range: None,
|
||||
duration_ms: Some(163096),
|
||||
|
|
@ -40,17 +41,19 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.42001E, mp4a.40.2\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
],
|
||||
video_only_streams: [
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=2273274&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=160&keepalive=yes&lmt=1705967288821438&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRAIgb8eXnQ6MSJ3PuvFVBdYIWTnFobH8mTC9zbZpBNxLbBYCICkPLKEm3gNbW5HIFXs7bwF5rSqUKHHnXNK91qMslQog&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=2273274&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=160&keepalive=yes&lmt=1705967288821438&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRAIgb8eXnQ6MSJ3PuvFVBdYIWTnFobH8mTC9zbZpBNxLbBYCICkPLKEm3gNbW5HIFXs7bwF5rSqUKHHnXNK91qMslQog&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 160,
|
||||
bitrate: 114816,
|
||||
average_bitrate: 111551,
|
||||
size: Some(2273274),
|
||||
last_modified: Some(1705967288821438),
|
||||
index_range: Some(Range(
|
||||
start: 738,
|
||||
end: 1165,
|
||||
|
|
@ -68,15 +71,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.4d400c\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=1151892&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=278&keepalive=yes&lmt=1705966620402771&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIhAP4IybR7cZRpx7IX1ke6UIu_hdFZN3LOuHBDywg_xv5WAiB8_XEx8VhT9OlFxmM-cY0fl6-7GT9uj3clMIPDk2w7cA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=1151892&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=278&keepalive=yes&lmt=1705966620402771&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIhAP4IybR7cZRpx7IX1ke6UIu_hdFZN3LOuHBDywg_xv5WAiB8_XEx8VhT9OlFxmM-cY0fl6-7GT9uj3clMIPDk2w7cA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 278,
|
||||
bitrate: 70630,
|
||||
average_bitrate: 56524,
|
||||
size: Some(1151892),
|
||||
last_modified: Some(1705966620402771),
|
||||
index_range: Some(Range(
|
||||
start: 218,
|
||||
end: 767,
|
||||
|
|
@ -94,15 +99,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=5026513&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=133&keepalive=yes&lmt=1705967298859029&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRAIgPF0ms4OEe15BTjOFVCkvf52UeTUf0b62_pavCfEyGjcCIH-0AoxzyT8iioWFFaX7iYjqzzaUTpo8rgAPQ0uX8DJa&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=5026513&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=133&keepalive=yes&lmt=1705967298859029&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRAIgPF0ms4OEe15BTjOFVCkvf52UeTUf0b62_pavCfEyGjcCIH-0AoxzyT8iioWFFaX7iYjqzzaUTpo8rgAPQ0uX8DJa&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 133,
|
||||
bitrate: 257417,
|
||||
average_bitrate: 246656,
|
||||
size: Some(5026513),
|
||||
last_modified: Some(1705967298859029),
|
||||
index_range: Some(Range(
|
||||
start: 739,
|
||||
end: 1166,
|
||||
|
|
@ -120,15 +127,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.4d4015\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=2541351&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=242&keepalive=yes&lmt=1705966614837727&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIgKj1JyMGwYtf16zLJsmbnizz5_v3jaZSa7-j-ls8-qzECIQDKUd50iIc52h7zOX50Hf1SkbV9h-hP4QHs-wkik1fk6Q%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=2541351&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=242&keepalive=yes&lmt=1705966614837727&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIgKj1JyMGwYtf16zLJsmbnizz5_v3jaZSa7-j-ls8-qzECIQDKUd50iIc52h7zOX50Hf1SkbV9h-hP4QHs-wkik1fk6Q%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 242,
|
||||
bitrate: 149589,
|
||||
average_bitrate: 124706,
|
||||
size: Some(2541351),
|
||||
last_modified: Some(1705966614837727),
|
||||
index_range: Some(Range(
|
||||
start: 219,
|
||||
end: 768,
|
||||
|
|
@ -146,15 +155,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=7810925&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=134&keepalive=yes&lmt=1705967286812435&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRgIhAJ92IgZgdk3_WLsfzJV_ZyrSFSbzpsoJh3DkRKDHbNxzAiEA9UbnVlXQ2S3BUimLmWC5TZQfhIkc-PlLnZ81fL0S5yA%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=7810925&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=134&keepalive=yes&lmt=1705967286812435&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRgIhAJ92IgZgdk3_WLsfzJV_ZyrSFSbzpsoJh3DkRKDHbNxzAiEA9UbnVlXQ2S3BUimLmWC5TZQfhIkc-PlLnZ81fL0S5yA%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 134,
|
||||
bitrate: 537902,
|
||||
average_bitrate: 383290,
|
||||
size: Some(7810925),
|
||||
last_modified: Some(1705967286812435),
|
||||
index_range: Some(Range(
|
||||
start: 740,
|
||||
end: 1167,
|
||||
|
|
@ -172,15 +183,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.4d401e\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=4188954&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=243&keepalive=yes&lmt=1705966624121874&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIgSCLGQvdZKNXym0zt7c3Yw_4e0J8-wNxtPagPRRn4dRoCIQCOj0IzalNG4EcowBIyK2LC6NLFDr8Zt6sNVkqPjw6lGg%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=4188954&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=243&keepalive=yes&lmt=1705966624121874&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIgSCLGQvdZKNXym0zt7c3Yw_4e0J8-wNxtPagPRRn4dRoCIQCOj0IzalNG4EcowBIyK2LC6NLFDr8Zt6sNVkqPjw6lGg%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 243,
|
||||
bitrate: 248858,
|
||||
average_bitrate: 205556,
|
||||
size: Some(4188954),
|
||||
last_modified: Some(1705966624121874),
|
||||
index_range: Some(Range(
|
||||
start: 220,
|
||||
end: 770,
|
||||
|
|
@ -198,15 +211,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=14723538&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=135&keepalive=yes&lmt=1705967282545273&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRgIhAM843wAa1e7Gc1S69gfXckm7hdgIKPXp0bUSh3hO6W5zAiEA-DDEPGsZBmF5N8VbPy75dhy3rLpE1F18KtWgmrUm2Pg%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=14723538&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=135&keepalive=yes&lmt=1705967282545273&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRgIhAM843wAa1e7Gc1S69gfXckm7hdgIKPXp0bUSh3hO6W5zAiEA-DDEPGsZBmF5N8VbPy75dhy3rLpE1F18KtWgmrUm2Pg%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 135,
|
||||
bitrate: 978945,
|
||||
average_bitrate: 722499,
|
||||
size: Some(14723538),
|
||||
last_modified: Some(1705967282545273),
|
||||
index_range: Some(Range(
|
||||
start: 740,
|
||||
end: 1167,
|
||||
|
|
@ -224,15 +239,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.4d401f\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=7788899&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=244&keepalive=yes&lmt=1705966622098793&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIhAKGyn799bfkVHYE195sPmD60dCMppqJrBM0O-sjgYTzzAiAoBjkNAtL90sXw2YP9UTW9JrMhPSvPiBI_KiCVMJAkFQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=7788899&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=244&keepalive=yes&lmt=1705966622098793&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIhAKGyn799bfkVHYE195sPmD60dCMppqJrBM0O-sjgYTzzAiAoBjkNAtL90sXw2YP9UTW9JrMhPSvPiBI_KiCVMJAkFQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 244,
|
||||
bitrate: 467884,
|
||||
average_bitrate: 382209,
|
||||
size: Some(7788899),
|
||||
last_modified: Some(1705966622098793),
|
||||
index_range: Some(Range(
|
||||
start: 220,
|
||||
end: 770,
|
||||
|
|
@ -250,15 +267,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=24616305&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=136&keepalive=yes&lmt=1705967307531372&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRgIhAM57L2Utesn4xVyT0HSwR9Khv_S-efx4uFAbCPkZFoRXAiEAtIu63-jF2_FZkOMmZAqGU3SRU9QgxoajRjBhMFwcOuk%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=24616305&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=136&keepalive=yes&lmt=1705967307531372&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRgIhAM57L2Utesn4xVyT0HSwR9Khv_S-efx4uFAbCPkZFoRXAiEAtIu63-jF2_FZkOMmZAqGU3SRU9QgxoajRjBhMFwcOuk%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 136,
|
||||
bitrate: 1560439,
|
||||
average_bitrate: 1207947,
|
||||
size: Some(24616305),
|
||||
last_modified: Some(1705967307531372),
|
||||
index_range: Some(Range(
|
||||
start: 739,
|
||||
end: 1166,
|
||||
|
|
@ -276,15 +295,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.4d401f\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=14723992&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=247&keepalive=yes&lmt=1705966613897741&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRgIhAL-upITxk7r9FQL5F4WL0A6SjPw673qyyzmXIC48eKfTAiEAlkdkx7IFYtehbhKakbffvIebpPXRtxSgBWLl7WEHCrE%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=14723992&dur=163.029&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=247&keepalive=yes&lmt=1705966613897741&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRgIhAL-upITxk7r9FQL5F4WL0A6SjPw673qyyzmXIC48eKfTAiEAlkdkx7IFYtehbhKakbffvIebpPXRtxSgBWLl7WEHCrE%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 247,
|
||||
bitrate: 929607,
|
||||
average_bitrate: 722521,
|
||||
size: Some(14723992),
|
||||
last_modified: Some(1705966613897741),
|
||||
index_range: Some(Range(
|
||||
start: 220,
|
||||
end: 770,
|
||||
|
|
@ -302,15 +323,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=34544823&dur=163.046&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=298&keepalive=yes&lmt=1705967092637061&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRgIhAIIGU41JunuODw9qIlSoYQcwkCYO6k9XOVlDn1Nxqnu7AiEAoiMOgYU8s8lp01fW0L86hHrSrtlvOLSI9XA50iyIGBc%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=34544823&dur=163.046&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=298&keepalive=yes&lmt=1705967092637061&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRgIhAIIGU41JunuODw9qIlSoYQcwkCYO6k9XOVlDn1Nxqnu7AiEAoiMOgYU8s8lp01fW0L86hHrSrtlvOLSI9XA50iyIGBc%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 298,
|
||||
bitrate: 2188961,
|
||||
average_bitrate: 1694973,
|
||||
size: Some(34544823),
|
||||
last_modified: Some(1705967092637061),
|
||||
index_range: Some(Range(
|
||||
start: 739,
|
||||
end: 1166,
|
||||
|
|
@ -328,15 +351,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.4d4020\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=30205331&dur=163.046&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=302&keepalive=yes&lmt=1705966545733919&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIhAL428Az_BKxxff4FlH4WleHSy4Igq3mR71NuTMOc9xU3AiBN4lXfH9DklGaQUMnOT8wAhiMuzR73bW3cwr744TSoNA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=30205331&dur=163.046&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=302&keepalive=yes&lmt=1705966545733919&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIhAL428Az_BKxxff4FlH4WleHSy4Igq3mR71NuTMOc9xU3AiBN4lXfH9DklGaQUMnOT8wAhiMuzR73bW3cwr744TSoNA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 302,
|
||||
bitrate: 2250391,
|
||||
average_bitrate: 1482051,
|
||||
size: Some(30205331),
|
||||
last_modified: Some(1705966545733919),
|
||||
index_range: Some(Range(
|
||||
start: 219,
|
||||
end: 786,
|
||||
|
|
@ -354,15 +379,17 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=62057888&dur=163.046&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=299&keepalive=yes&lmt=1705967093743693&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIgBEemc0Cvd3KhNooNRblgX64_fjNSP30RmWDfFwDR7qYCIQCXpQ9FO0_X93ZHcyvRZCKX5gbJuusCReaRcJbRLFsM_g%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=62057888&dur=163.046&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=299&keepalive=yes&lmt=1705967093743693&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIgBEemc0Cvd3KhNooNRblgX64_fjNSP30RmWDfFwDR7qYCIQCXpQ9FO0_X93ZHcyvRZCKX5gbJuusCReaRcJbRLFsM_g%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 299,
|
||||
bitrate: 3926810,
|
||||
average_bitrate: 3044926,
|
||||
size: Some(62057888),
|
||||
last_modified: Some(1705967093743693),
|
||||
index_range: Some(Range(
|
||||
start: 740,
|
||||
end: 1167,
|
||||
|
|
@ -380,15 +407,17 @@ VideoPlayer(
|
|||
mime: "video/mp4; codecs=\"avc1.64002a\"",
|
||||
format: mp4,
|
||||
codec: avc1,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
VideoStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=55300085&dur=163.046&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=303&keepalive=yes&lmt=1705966651743358&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIgTZlmOcsLYJ_a9SnVLehXnaoajtreQO97qawEIDPEi8sCIQDKFdtBWWMuQUb9X8H-x92B3q-y0g8TvAPanR95cfklXQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C298%2C299%2C302%2C303&bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=55300085&dur=163.046&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=303&keepalive=yes&lmt=1705966651743358&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIgTZlmOcsLYJ_a9SnVLehXnaoajtreQO97qawEIDPEi8sCIQDKFdtBWWMuQUb9X8H-x92B3q-y0g8TvAPanR95cfklXQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=130F224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 303,
|
||||
bitrate: 3473307,
|
||||
average_bitrate: 2713348,
|
||||
size: Some(55300085),
|
||||
last_modified: Some(1705966651743358),
|
||||
index_range: Some(Range(
|
||||
start: 219,
|
||||
end: 792,
|
||||
|
|
@ -406,17 +435,19 @@ VideoPlayer(
|
|||
mime: "video/webm; codecs=\"vp9\"",
|
||||
format: webm,
|
||||
codec: vp9,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
],
|
||||
audio_streams: [
|
||||
AudioStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=934750&dur=163.061&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=249&keepalive=yes&lmt=1714877357172339&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIhAItfaWkRs94vqyae7GR4M1xHoQO2lduvNRFugRSf0h-IAiA9fdLOJMwPI8vAO2C13igyv2qGSpOlKQptS4sN6p5Ffw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=934750&dur=163.061&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=249&keepalive=yes&lmt=1714877357172339&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIhAItfaWkRs94vqyae7GR4M1xHoQO2lduvNRFugRSf0h-IAiA9fdLOJMwPI8vAO2C13igyv2qGSpOlKQptS4sN6p5Ffw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 249,
|
||||
bitrate: 53073,
|
||||
average_bitrate: 45860,
|
||||
size: 934750,
|
||||
last_modified: Some(1714877357172339),
|
||||
index_range: Some(Range(
|
||||
start: 266,
|
||||
end: 551,
|
||||
|
|
@ -431,16 +462,19 @@ VideoPlayer(
|
|||
codec: opus,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(5.21),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=1245582&dur=163.061&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=250&keepalive=yes&lmt=1714877466693058&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIgdJ1SjWwaloQecEblSIMFp2qFmpG_kKYZP1vX_M55dE0CIQCDSfa_FsaiFRcNL-1LRTgCIRSO7dj5vrpKR1Ya-KbmMw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=1245582&dur=163.061&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=250&keepalive=yes&lmt=1714877466693058&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIgdJ1SjWwaloQecEblSIMFp2qFmpG_kKYZP1vX_M55dE0CIQCDSfa_FsaiFRcNL-1LRTgCIRSO7dj5vrpKR1Ya-KbmMw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 250,
|
||||
bitrate: 71197,
|
||||
average_bitrate: 61109,
|
||||
size: 1245582,
|
||||
last_modified: Some(1714877466693058),
|
||||
index_range: Some(Range(
|
||||
start: 266,
|
||||
end: 551,
|
||||
|
|
@ -455,16 +489,19 @@ VideoPlayer(
|
|||
codec: opus,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(5.21),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=2640283&dur=163.096&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=140&keepalive=yes&lmt=1705966477945761&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRAIgSxdbLrbojMVJcyRzsI2TrzOf78LN28bWcsHpbs4QXDwCIHidfXoriWMHfuiktUCdzLuUmksU7r5vITdh6u0puNmx&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=2640283&dur=163.096&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=140&keepalive=yes&lmt=1705966477945761&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRAIgSxdbLrbojMVJcyRzsI2TrzOf78LN28bWcsHpbs4QXDwCIHidfXoriWMHfuiktUCdzLuUmksU7r5vITdh6u0puNmx&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 140,
|
||||
bitrate: 130268,
|
||||
average_bitrate: 129508,
|
||||
size: 2640283,
|
||||
last_modified: Some(1705966477945761),
|
||||
index_range: Some(Range(
|
||||
start: 632,
|
||||
end: 867,
|
||||
|
|
@ -479,16 +516,19 @@ VideoPlayer(
|
|||
codec: mp4a,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(5.2200003),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
AudioStream(
|
||||
url: "https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=2480393&dur=163.061&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=251&keepalive=yes&lmt=1714877359450110&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIgO0jG-x2l6AF7tjryIX_oM3np78WgNDiseezppLfbQrgCIQCVLdpDhclKc8vQgWGzKXcqsAxgNl5S3MlLT8u1Jeok2A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D",
|
||||
url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?bui=AXc671IvQBUNCtxNiAkj0M-Bvcb-N5cUu1XFk68f4Cnj0sFLEy1sixyW5lThzLYJXioG8kVQ2xT9KNLS&c=TVHTML5&clen=2480393&dur=163.061&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&gir=yes&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&itag=251&keepalive=yes&lmt=1714877359450110&lmw=1&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=SWvqB0UTkUvifuM&ns=ZR8RwjQ3VJGDvQifdaM1IRMQ&pl=26&requiressl=yes&rqh=1&sefc=1&sig=AJfQdSswRQIgO0jG-x2l6AF7tjryIX_oM3np78WgNDiseezppLfbQrgCIQCVLdpDhclKc8vQgWGzKXcqsAxgNl5S3MlLT8u1Jeok2A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&svpuc=1&txp=1308224&vprv=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
itag: 251,
|
||||
bitrate: 140833,
|
||||
average_bitrate: 121691,
|
||||
size: 2480393,
|
||||
last_modified: Some(1714877359450110),
|
||||
index_range: Some(Range(
|
||||
start: 266,
|
||||
end: 551,
|
||||
|
|
@ -503,7 +543,9 @@ VideoPlayer(
|
|||
codec: opus,
|
||||
channels: Some(2),
|
||||
loudness_db: Some(5.21),
|
||||
is_drc: false,
|
||||
track: None,
|
||||
xtags: None,
|
||||
drm_track_type: None,
|
||||
drm_systems: [],
|
||||
),
|
||||
|
|
@ -520,6 +562,9 @@ VideoPlayer(
|
|||
valid_until: "[date]",
|
||||
hls_manifest_url: None,
|
||||
dash_manifest_url: None,
|
||||
abr_streaming_url: Some("https://rr5---sn-h0jeenek.googlevideo.com/videoplayback?c=TVHTML5&ei=viioZtTdKteHi9oPl42KsAg&expire=1722318110&fvip=4&id=o-AC7iotZ_nCvg7C6fK7ofX174GXVOdwW68lsyXLLmCs0h&initcwndbps=1957500&ip=93.235.183.158&keepalive=yes&lsig=AGtxev0wRgIhANyFV4Ji7jlkXvfkb_czMQDZCiu6AbJ3Kzyv_s9V9WyvAiEA0o8XuM9kyh98hG1yg7h44L3I5OAUXuTpQdjxUaZ1V4A%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=mQ&mm=31%2C29&mn=sn-h0jeenek%2Csn-h0jelnez&ms=au%2Crdu&mt=1722295996&mv=m&mvi=5&n=eBXmY26Y0c3VPyt&ns=Kl83P0QZk1oI9742KUD7ly8Q&pl=26&requiressl=yes&rqh=1&sabr=1&sig=AJfQdSswRAIgJRK55pIkQ3Pak9jZ4fHPDsxXv0YgkxKE-FFdIN12ph8CIFHlFEvAoUOoX4Fd1RmyCJqgLZhDkSLwD6s-xVW25kYL&smc=1&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Csvpuc%2Cns%2Csabr%2Crqh&svpuc=1&xpc=EgVo2aDSNQ%3D%3D"),
|
||||
abr_ustreamer_config: Some("CswJCpcHCAAlAACAPy1SuF4_NQAAwD9YAWABaAFyFgoSbWZzMl9jbWZzX3YzXzJfMTA5GAB4j06gAQGoAQCQAgG4AgDIAgHaAroBELDqARioRiCgnAEoiCcwmHVwiCeAAfQDuAEB4AEDkAIBmAIMoAIBwAIB0AIC4AIB6AIEgAMCiAOIJ5gDAagDA8ADAcgDAdADAfgDAYAEAYgEAZAEAZgEAaAEAagEAcgEAdAEAdgEAeAEAOgEAfgEB4AFfYgFAbAFAbgFAcAFAcgFAdAFAdgFAeAF0A_oBQH4BdAPgAYBuAYBwAYB0AYB2AYB6AYB8AYB-AYBkAcBqAcB2AcB-LWR5QwB-gKeAi0AAIJCNQAAlkJIAWUAAIBAaMBwqAHQhgOwAeADuAEBzQEAAIA_8AEB_QEAAIA_hQKamRk-jQIAAIA_lQIAAAJCmAIBtQIAAIA_wALgA9ICEbD__________wEePEZaXF1e2gIFMjA6MDDgAnjoAugC9QIK16M7_QLNzMw9gAMBkAMBnQMK1yM9oAMBuAMByAMB2AMB5QNiSkRA7QMyyvM-8AMB_QNmZoY_hQQAAIBAmAQB1QQAACBB6ATwEPAEAb0Fo0Afu8UF308tP8gFAeAFAZgGAaAGAagGAbUGvTeGNb0GMzODQJAHAcAHAcgHAdUHAICdQ-UHAIAJRKEIAAAAAAAA8L-pCAAAAAAAAPC_sAjwAbgIAdgI8AHoCAGCAwCQAwGoAwGwAwPQAwHYAwHgA5BOuAQBygQcChMIwKkHEJh1GOgHJQAAAAAoADAAEODUAxjQD9IEDQoICLAJELAJIAEgiCfaBAsKBgjwLhDwLiCIJ-gEAfgEAYAFAYgFAZAFAagFAbAFAdAFAdgFAegFAfAFAYgGAZgGAagGgIACwAYByAYB0gYUCOgHEGQaDQiIJxUAAAA_Hc3MTD-CBwoVAACAPxhkIJBOiAcBoAcBsAcBuAcBwAcB-AcBgAgBoAgBsAgBuAgB0ggGCAEQARgBmAkBqQkAAAAAAADwv7EJAAAAAAAA8L_ICQHaCSRFRzRmTDl1Sm9tL2NWdklmNjg4bnB6c2t4SVQrMXl0N09POHXgCQGwCgHYCgHwCgGICwGYCwG4CwHICwHQCwHYCwHqCwSLBowG8AsB-AsBkAwBoAwBqAyQAbAMAbgMAcAMAdAMAeAMAegMAYANAaANAdANAeANAYgOAZAOAbAOAYinocoLARgBIAEyDAirAhDNgPzUlvKDAzIMCK8CEP64moKV8oMDMgwIiAEQ7Mj0upfygwMyDAj3ARCNxJTwlPKDAzIMCKoCEIW7uNSW8oMDMgwIrgIQn5LUz5TygwMyDAiHARD5xP-ul_KDAzIMCPQBEOmKifSU8oMDMgwIhgEQk_6DsZfygwMyDAjzARCSyIT1lPKDAzIMCIUBEJWg47aX8oMDMgwI8gEQ3_PN8JTygwMyDAigARC-zf6xl_KDAzIMCJYCENPIofOU8oMDMgwIjAEQodeqr5TygwMyDAj5ARDzzNT9v_WFAzIMCPoBEMKb8bHA9YUDMgwI-wEQ_s_f_r_1hQM6AEgAUiYaAmVuKAAyGFVDYnh4RWktSW1QbGJMeDVGLWZIZXRFZzgAQABYAJDL048OARJNAKEYC4YwRgIhAIj4Ug4dw_gq15NXvgcfXpI1Fm_fhmwl-4ad-rX3Ffg_AiEAkZDsUgoAGLOXIvWZlNyuyfu8HLWt-snFl3gkTiPo2acaAmVp"),
|
||||
po_token: None,
|
||||
preview_frames: [
|
||||
Frameset(
|
||||
url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L0/default.jpg?sqp=-oaymwGbA0g48quKqQOSA4gBAZUBAAAEQpgBMqABPKgBBLABELABDbABDLABELABFbABH7ABJrABLbABDrABDrABD7ABErABF7ABK7ABLLABKbABD7ABDrABELABFbABH7ABKrABMrABKbABD7ABEbABFLABGLABJrABPbABOLABLbABEbABFLABHrABKrABMbABS7ABR7ABNrABFbABHLABKbABLrABObABR7ABTbABP7ABJbABLrABN7ABPbABR7ABUrABUbABRbABM7ABQLABQrABQ7ABTLABRLABRrABQ7gBEbgBEbgBFbgBI7gBRLgBQ7gBQ7gBQ7gBEbgBE7gBFrgBL7gBQ7gBQ7gBQ7gBQ7gBFbgBFrgBKbgBQ7gBQ7gBQ7gBQ7gBQ7gBI7gBL7gBQ7gBQ7gBQ7gBQ7gBQ7gBQ7gBRLgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLCsCT8Lprh2S0ptmCRsWH7VtDl3YQ",
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(15000000),
|
||||
|
|
@ -82,6 +83,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(1200000),
|
||||
|
|
@ -123,6 +125,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(843000),
|
||||
|
|
@ -164,6 +167,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(1300000),
|
||||
|
|
@ -205,6 +209,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(707000),
|
||||
|
|
@ -246,6 +251,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(797000),
|
||||
|
|
@ -287,6 +293,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(2500000),
|
||||
|
|
@ -328,6 +335,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(983000),
|
||||
|
|
@ -369,6 +377,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(1100000),
|
||||
|
|
@ -410,6 +419,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(1800000),
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("16 years ago"),
|
||||
view_count: Some(964000000),
|
||||
|
|
@ -82,6 +83,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(168000000),
|
||||
|
|
@ -123,6 +125,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 years ago"),
|
||||
view_count: Some(9600000),
|
||||
|
|
@ -164,6 +167,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(989000000),
|
||||
|
|
@ -205,6 +209,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(431000),
|
||||
|
|
@ -246,6 +251,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(13000000),
|
||||
|
|
@ -287,6 +293,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(769000),
|
||||
|
|
@ -328,6 +335,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 years ago"),
|
||||
view_count: Some(3600000000),
|
||||
|
|
@ -369,6 +377,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(648000000),
|
||||
|
|
@ -410,6 +419,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(266000000),
|
||||
|
|
@ -451,6 +461,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(92000000),
|
||||
|
|
@ -492,6 +503,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(45000000),
|
||||
|
|
@ -533,6 +545,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(41000000),
|
||||
|
|
@ -574,6 +587,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(1200000000),
|
||||
|
|
@ -615,6 +629,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(219000000),
|
||||
|
|
@ -656,6 +671,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(7800000),
|
||||
|
|
@ -697,6 +713,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(60000),
|
||||
|
|
@ -738,6 +755,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(652000),
|
||||
|
|
@ -779,6 +797,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(2400000),
|
||||
|
|
@ -820,6 +839,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(117000000),
|
||||
|
|
@ -861,6 +881,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(1000000000),
|
||||
|
|
@ -902,6 +923,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(290000000),
|
||||
|
|
@ -943,6 +965,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(583000000),
|
||||
|
|
@ -984,6 +1007,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(68000000),
|
||||
|
|
@ -1025,6 +1049,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(18000000),
|
||||
|
|
@ -1066,6 +1091,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(842000),
|
||||
|
|
@ -1107,6 +1133,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(2400000000),
|
||||
|
|
@ -1148,6 +1175,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(21000000),
|
||||
|
|
@ -1189,6 +1217,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(178000000),
|
||||
|
|
@ -1230,6 +1259,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(3900000),
|
||||
|
|
@ -1271,6 +1301,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(865000),
|
||||
|
|
@ -1312,6 +1343,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(292000000),
|
||||
|
|
@ -1353,6 +1385,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(150000000),
|
||||
|
|
@ -1394,6 +1427,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(1700000),
|
||||
|
|
@ -1435,6 +1469,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(5800000),
|
||||
|
|
@ -1476,6 +1511,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(140000000),
|
||||
|
|
@ -1517,6 +1553,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(16000000),
|
||||
|
|
@ -1558,6 +1595,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(305000000),
|
||||
|
|
@ -1599,6 +1637,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(219000000),
|
||||
|
|
@ -1640,6 +1679,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(51000000),
|
||||
|
|
@ -1681,6 +1721,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(24000000),
|
||||
|
|
@ -1722,6 +1763,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(104000000),
|
||||
|
|
@ -1763,6 +1805,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(159000000),
|
||||
|
|
@ -1804,6 +1847,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(823000000),
|
||||
|
|
@ -1845,6 +1889,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(271000),
|
||||
|
|
@ -1886,6 +1931,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(94000000),
|
||||
|
|
@ -1927,6 +1973,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(110000000),
|
||||
|
|
@ -1968,6 +2015,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(76000000),
|
||||
|
|
@ -2009,6 +2057,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(4100000000),
|
||||
|
|
@ -2050,6 +2099,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(169000000),
|
||||
|
|
@ -2091,6 +2141,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(28000000),
|
||||
|
|
@ -2132,6 +2183,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("16 years ago"),
|
||||
view_count: Some(239000000),
|
||||
|
|
@ -2173,6 +2225,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(285000000),
|
||||
|
|
@ -2214,6 +2267,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(428000000),
|
||||
|
|
@ -2255,6 +2309,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(556000000),
|
||||
|
|
@ -2296,6 +2351,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(1300000000),
|
||||
|
|
@ -2337,6 +2393,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(1000000000),
|
||||
|
|
@ -2378,6 +2435,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(70000),
|
||||
|
|
@ -2419,6 +2477,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(1400000000),
|
||||
|
|
@ -2460,6 +2519,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(1200000000),
|
||||
|
|
@ -2501,6 +2561,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(1000000),
|
||||
|
|
@ -2542,6 +2603,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(232000000),
|
||||
|
|
@ -2583,6 +2645,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 years ago"),
|
||||
view_count: Some(185000000),
|
||||
|
|
@ -2624,6 +2687,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("16 years ago"),
|
||||
view_count: Some(19000),
|
||||
|
|
@ -2665,6 +2729,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(6000000),
|
||||
|
|
@ -2706,6 +2771,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(2500000),
|
||||
|
|
@ -2747,6 +2813,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(62000000),
|
||||
|
|
@ -2788,6 +2855,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 years ago"),
|
||||
view_count: Some(154000000),
|
||||
|
|
@ -2829,6 +2897,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("16 years ago"),
|
||||
view_count: Some(255000000),
|
||||
|
|
@ -2870,6 +2939,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(134000000),
|
||||
|
|
@ -2911,6 +2981,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 years ago"),
|
||||
view_count: Some(671000000),
|
||||
|
|
@ -2952,6 +3023,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("16 years ago"),
|
||||
view_count: Some(3800000),
|
||||
|
|
@ -2993,6 +3065,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("16 years ago"),
|
||||
view_count: Some(39000000),
|
||||
|
|
@ -3034,6 +3107,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(14000000),
|
||||
|
|
@ -3075,6 +3149,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(437000),
|
||||
|
|
@ -3116,6 +3191,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(114000000),
|
||||
|
|
@ -3157,6 +3233,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(115000000),
|
||||
|
|
@ -3198,6 +3275,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(361000000),
|
||||
|
|
@ -3239,6 +3317,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(31000000),
|
||||
|
|
@ -3280,6 +3359,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 years ago"),
|
||||
view_count: Some(13000000),
|
||||
|
|
@ -3321,6 +3401,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(385000000),
|
||||
|
|
@ -3362,6 +3443,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(672000000),
|
||||
|
|
@ -3403,6 +3485,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(127000000),
|
||||
|
|
@ -3444,6 +3527,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(17000000),
|
||||
|
|
@ -3485,6 +3569,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(154000),
|
||||
|
|
@ -3526,6 +3611,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(328000000),
|
||||
|
|
@ -3567,6 +3653,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(931000000),
|
||||
|
|
@ -3608,6 +3695,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 years ago"),
|
||||
view_count: Some(1600000000),
|
||||
|
|
@ -3649,6 +3737,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 years ago"),
|
||||
view_count: Some(177000000),
|
||||
|
|
@ -3690,6 +3779,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(3700000000),
|
||||
|
|
@ -3731,6 +3821,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(798000000),
|
||||
|
|
@ -3772,6 +3863,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(71000000),
|
||||
|
|
@ -3813,6 +3905,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(739000000),
|
||||
|
|
@ -3854,6 +3947,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(499000000),
|
||||
|
|
@ -3895,6 +3989,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 years ago"),
|
||||
view_count: Some(291000),
|
||||
|
|
@ -3936,6 +4031,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(2600000000),
|
||||
|
|
@ -3977,6 +4073,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(36000000),
|
||||
|
|
@ -4018,6 +4115,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(8500000),
|
||||
|
|
@ -4059,6 +4157,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(27000000),
|
||||
|
|
@ -4100,6 +4199,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(101000000),
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -41,6 +41,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(8),
|
||||
|
|
@ -82,6 +83,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(4),
|
||||
|
|
@ -123,6 +125,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(66000),
|
||||
|
|
@ -164,6 +167,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 2 days ago"),
|
||||
view_count: Some(553000),
|
||||
|
|
@ -205,6 +209,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 days ago"),
|
||||
view_count: Some(729000),
|
||||
|
|
@ -246,6 +251,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 days ago"),
|
||||
view_count: Some(629000),
|
||||
|
|
@ -287,6 +293,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 1 year ago"),
|
||||
view_count: Some(1400000),
|
||||
|
|
@ -328,6 +335,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 1 year ago"),
|
||||
view_count: Some(1000000),
|
||||
|
|
@ -369,6 +377,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 1 year ago"),
|
||||
view_count: Some(780000),
|
||||
|
|
@ -410,6 +419,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 2 years ago"),
|
||||
view_count: Some(913000),
|
||||
|
|
@ -451,6 +461,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 53 years ago"),
|
||||
view_count: Some(0),
|
||||
|
|
@ -492,6 +503,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 53 years ago"),
|
||||
view_count: Some(0),
|
||||
|
|
@ -533,6 +545,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 53 years ago"),
|
||||
view_count: Some(0),
|
||||
|
|
@ -574,6 +587,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 2 years ago"),
|
||||
view_count: Some(34000),
|
||||
|
|
@ -615,6 +629,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(876000),
|
||||
|
|
@ -656,6 +671,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(533000),
|
||||
|
|
@ -697,6 +713,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(570000),
|
||||
|
|
@ -738,6 +755,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(308000),
|
||||
|
|
@ -779,6 +797,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(699000),
|
||||
|
|
@ -820,6 +839,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(474000),
|
||||
|
|
@ -861,6 +881,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(573000),
|
||||
|
|
@ -902,6 +923,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(676000),
|
||||
|
|
@ -943,6 +965,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(5600000),
|
||||
|
|
@ -984,6 +1007,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(206000),
|
||||
|
|
@ -1025,6 +1049,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(354000),
|
||||
|
|
@ -1066,6 +1091,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(2400000),
|
||||
|
|
@ -1107,6 +1133,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(2600000),
|
||||
|
|
@ -1148,6 +1175,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(2100000),
|
||||
|
|
@ -1189,6 +1217,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(2200000),
|
||||
|
|
@ -1230,6 +1259,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(2100000),
|
||||
|
|
@ -1271,6 +1301,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(1900000),
|
||||
|
|
@ -1312,6 +1343,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(369000),
|
||||
|
|
@ -1353,6 +1385,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(296000),
|
||||
|
|
@ -1394,6 +1427,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(472000),
|
||||
|
|
@ -1435,6 +1469,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 3 years ago"),
|
||||
view_count: Some(561000),
|
||||
|
|
@ -1476,6 +1511,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(259000),
|
||||
|
|
@ -1517,6 +1553,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(455000),
|
||||
|
|
@ -1558,6 +1595,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(97000),
|
||||
|
|
@ -1599,6 +1637,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(365000),
|
||||
|
|
@ -1640,6 +1679,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(123000),
|
||||
|
|
@ -1681,6 +1721,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(88000),
|
||||
|
|
@ -1722,6 +1763,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(246000),
|
||||
|
|
@ -1763,6 +1805,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(876000),
|
||||
|
|
@ -1804,6 +1847,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(149000),
|
||||
|
|
@ -1845,6 +1889,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(196000),
|
||||
|
|
@ -1886,6 +1931,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(192000),
|
||||
|
|
@ -1927,6 +1973,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(189000),
|
||||
|
|
@ -1968,6 +2015,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(110000),
|
||||
|
|
@ -2009,6 +2057,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(61000),
|
||||
|
|
@ -2050,6 +2099,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(75000),
|
||||
|
|
@ -2091,6 +2141,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(89000),
|
||||
|
|
@ -2132,6 +2183,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(73000),
|
||||
|
|
@ -2173,6 +2225,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(33000),
|
||||
|
|
@ -2214,6 +2267,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(96000),
|
||||
|
|
@ -2255,6 +2309,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(92000),
|
||||
|
|
@ -2296,6 +2351,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(82000),
|
||||
|
|
@ -2337,6 +2393,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(123000),
|
||||
|
|
@ -2378,6 +2435,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(89000),
|
||||
|
|
@ -2419,6 +2477,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(94000),
|
||||
|
|
@ -2460,6 +2519,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(148000),
|
||||
|
|
@ -2501,6 +2561,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(125000),
|
||||
|
|
@ -2542,6 +2603,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(52000),
|
||||
|
|
@ -2583,6 +2645,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(414000),
|
||||
|
|
@ -2624,6 +2687,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(150000),
|
||||
|
|
@ -2665,6 +2729,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(22000),
|
||||
|
|
@ -2706,6 +2771,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(326000),
|
||||
|
|
@ -2747,6 +2813,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(65000),
|
||||
|
|
@ -2788,6 +2855,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(58000),
|
||||
|
|
@ -2829,6 +2897,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(100000),
|
||||
|
|
@ -2870,6 +2939,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: None,
|
||||
view_count: Some(4),
|
||||
|
|
@ -2911,6 +2981,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(53000),
|
||||
|
|
@ -2952,6 +3023,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(50000),
|
||||
|
|
@ -2993,6 +3065,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(40000),
|
||||
|
|
@ -3034,6 +3107,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(40000),
|
||||
|
|
@ -3075,6 +3149,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(90000),
|
||||
|
|
@ -3116,6 +3191,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(29000),
|
||||
|
|
@ -3157,6 +3233,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(40000),
|
||||
|
|
@ -3198,6 +3275,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(328000),
|
||||
|
|
@ -3239,6 +3317,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(12000),
|
||||
|
|
@ -3280,6 +3359,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(65000),
|
||||
|
|
@ -3321,6 +3401,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(14000),
|
||||
|
|
@ -3362,6 +3443,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(38000),
|
||||
|
|
@ -3403,6 +3485,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(81000),
|
||||
|
|
@ -3444,6 +3527,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(48000),
|
||||
|
|
@ -3485,6 +3569,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(18000),
|
||||
|
|
@ -3526,6 +3611,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(68000),
|
||||
|
|
@ -3567,6 +3653,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(26000),
|
||||
|
|
@ -3608,6 +3695,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(59000),
|
||||
|
|
@ -3649,6 +3737,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(57000),
|
||||
|
|
@ -3690,6 +3779,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(208000),
|
||||
|
|
@ -3731,6 +3821,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(17000),
|
||||
|
|
@ -3772,6 +3863,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(48000),
|
||||
|
|
@ -3813,6 +3905,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(404000),
|
||||
|
|
@ -3854,6 +3947,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(16000),
|
||||
|
|
@ -3895,6 +3989,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(244000),
|
||||
|
|
@ -3936,6 +4031,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(27000),
|
||||
|
|
@ -3977,6 +4073,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(284000),
|
||||
|
|
@ -4018,6 +4115,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(26000),
|
||||
|
|
@ -4059,6 +4157,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(314000),
|
||||
|
|
@ -4100,6 +4199,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("Streamed 4 years ago"),
|
||||
view_count: Some(25000),
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(210000000),
|
||||
|
|
@ -82,6 +83,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(119000),
|
||||
|
|
@ -123,6 +125,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(168000000),
|
||||
|
|
@ -164,6 +167,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(170000000),
|
||||
|
|
@ -205,6 +209,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(161000000),
|
||||
|
|
@ -246,6 +251,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(110000000),
|
||||
|
|
@ -287,6 +293,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(151000000),
|
||||
|
|
@ -328,6 +335,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(101000000),
|
||||
|
|
@ -369,6 +377,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(83000000),
|
||||
|
|
@ -410,6 +419,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(73000000),
|
||||
|
|
@ -451,6 +461,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(68000000),
|
||||
|
|
@ -492,6 +503,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(70000000),
|
||||
|
|
@ -533,6 +545,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(78000000),
|
||||
|
|
@ -574,6 +587,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(104000000),
|
||||
|
|
@ -615,6 +629,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(70000000),
|
||||
|
|
@ -656,6 +671,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(60000000),
|
||||
|
|
@ -697,6 +713,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(76000000),
|
||||
|
|
@ -738,6 +755,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(97000000),
|
||||
|
|
@ -779,6 +797,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(80000000),
|
||||
|
|
@ -820,6 +839,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(73000000),
|
||||
|
|
@ -861,6 +881,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(66000000),
|
||||
|
|
@ -902,6 +923,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(59000000),
|
||||
|
|
@ -943,6 +965,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(58000000),
|
||||
|
|
@ -984,6 +1007,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(90000000),
|
||||
|
|
@ -1025,6 +1049,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(59000000),
|
||||
|
|
@ -1066,6 +1091,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(62000000),
|
||||
|
|
@ -1107,6 +1133,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(58000000),
|
||||
|
|
@ -1148,6 +1175,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(75000000),
|
||||
|
|
@ -1189,6 +1217,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(71000000),
|
||||
|
|
@ -1230,6 +1259,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(62000000),
|
||||
|
|
@ -1271,6 +1301,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(71000000),
|
||||
|
|
@ -1312,6 +1343,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(52000000),
|
||||
|
|
@ -1353,6 +1385,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(45000000),
|
||||
|
|
@ -1394,6 +1427,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(59000000),
|
||||
|
|
@ -1435,6 +1469,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(85000000),
|
||||
|
|
@ -1476,6 +1511,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(47000000),
|
||||
|
|
@ -1517,6 +1553,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(108000000),
|
||||
|
|
@ -1558,6 +1595,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(90000000),
|
||||
|
|
@ -1599,6 +1637,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(89000000),
|
||||
|
|
@ -1640,6 +1679,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(61000000),
|
||||
|
|
@ -1681,6 +1721,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(103000000),
|
||||
|
|
@ -1722,6 +1763,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(72000000),
|
||||
|
|
@ -1763,6 +1805,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(38000000),
|
||||
|
|
@ -1804,6 +1847,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 years ago"),
|
||||
view_count: Some(49000000),
|
||||
|
|
@ -1845,6 +1889,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(65000000),
|
||||
|
|
@ -1886,6 +1931,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(38000000),
|
||||
|
|
@ -1927,6 +1973,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(43000000),
|
||||
|
|
@ -1968,6 +2015,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(47000000),
|
||||
|
|
@ -2009,6 +2057,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(61000000),
|
||||
|
|
@ -2050,6 +2099,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(40000000),
|
||||
|
|
@ -2091,6 +2141,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(40000000),
|
||||
|
|
@ -2132,6 +2183,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(46000000),
|
||||
|
|
@ -2173,6 +2225,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(83000000),
|
||||
|
|
@ -2214,6 +2267,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(42000000),
|
||||
|
|
@ -2255,6 +2309,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(84000000),
|
||||
|
|
@ -2296,6 +2351,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 years ago"),
|
||||
view_count: Some(34000000),
|
||||
|
|
@ -2337,6 +2393,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(37000000),
|
||||
|
|
@ -2378,6 +2435,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(47000000),
|
||||
|
|
@ -2419,6 +2477,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(92000000),
|
||||
|
|
@ -2460,6 +2519,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(56000000),
|
||||
|
|
@ -2501,6 +2561,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(39000000),
|
||||
|
|
@ -2542,6 +2603,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 years ago"),
|
||||
view_count: Some(37000000),
|
||||
|
|
@ -2583,6 +2645,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(42000000),
|
||||
|
|
@ -2624,6 +2687,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(35000000),
|
||||
|
|
@ -2665,6 +2729,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(37000000),
|
||||
|
|
@ -2706,6 +2771,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(56000000),
|
||||
|
|
@ -2747,6 +2813,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(56000000),
|
||||
|
|
@ -2788,6 +2855,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(25000000),
|
||||
|
|
@ -2829,6 +2897,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(36000000),
|
||||
|
|
@ -2870,6 +2939,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(38000000),
|
||||
|
|
@ -2911,6 +2981,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(36000000),
|
||||
|
|
@ -2952,6 +3023,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(28000000),
|
||||
|
|
@ -2993,6 +3065,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(40000000),
|
||||
|
|
@ -3034,6 +3107,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(30000000),
|
||||
|
|
@ -3075,6 +3149,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(33000000),
|
||||
|
|
@ -3116,6 +3191,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(27000000),
|
||||
|
|
@ -3157,6 +3233,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(28000000),
|
||||
|
|
@ -3198,6 +3275,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(42000000),
|
||||
|
|
@ -3239,6 +3317,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(28000000),
|
||||
|
|
@ -3280,6 +3359,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(37000000),
|
||||
|
|
@ -3321,6 +3401,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(37000000),
|
||||
|
|
@ -3362,6 +3443,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(33000000),
|
||||
|
|
@ -3403,6 +3485,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(34000000),
|
||||
|
|
@ -3444,6 +3527,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(36000000),
|
||||
|
|
@ -3485,6 +3569,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(34000000),
|
||||
|
|
@ -3526,6 +3611,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(31000000),
|
||||
|
|
@ -3567,6 +3653,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(31000000),
|
||||
|
|
@ -3608,6 +3695,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(26000000),
|
||||
|
|
@ -3649,6 +3737,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(26000000),
|
||||
|
|
@ -3690,6 +3779,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(27000000),
|
||||
|
|
@ -3731,6 +3821,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(24000000),
|
||||
|
|
@ -3772,6 +3863,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("14 years ago"),
|
||||
view_count: Some(24000000),
|
||||
|
|
@ -3813,6 +3905,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(27000000),
|
||||
|
|
@ -3854,6 +3947,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(25000000),
|
||||
|
|
@ -3895,6 +3989,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(31000000),
|
||||
|
|
@ -3936,6 +4031,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(54000000),
|
||||
|
|
@ -3977,6 +4073,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(19000000),
|
||||
|
|
@ -4018,6 +4115,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(78000000),
|
||||
|
|
@ -4059,6 +4157,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(19000000),
|
||||
|
|
@ -4100,6 +4199,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 years ago"),
|
||||
view_count: Some(99000000),
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(290000),
|
||||
|
|
@ -82,6 +83,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(414000),
|
||||
|
|
@ -123,6 +125,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(177000),
|
||||
|
|
@ -164,6 +167,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(126000),
|
||||
|
|
@ -205,6 +209,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(135000),
|
||||
|
|
@ -246,6 +251,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(101000),
|
||||
|
|
@ -287,6 +293,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(93000),
|
||||
|
|
@ -328,6 +335,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(83000),
|
||||
|
|
@ -369,6 +377,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(76000),
|
||||
|
|
@ -410,6 +419,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(69000),
|
||||
|
|
@ -451,6 +461,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(66000),
|
||||
|
|
@ -492,6 +503,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(55000),
|
||||
|
|
@ -533,6 +545,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(48000),
|
||||
|
|
@ -574,6 +587,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(59000),
|
||||
|
|
@ -615,6 +629,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(63000),
|
||||
|
|
@ -656,6 +671,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(213000),
|
||||
|
|
@ -697,6 +713,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(382000),
|
||||
|
|
@ -738,6 +755,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(113000),
|
||||
|
|
@ -779,6 +797,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(73000),
|
||||
|
|
@ -820,6 +839,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(111000),
|
||||
|
|
@ -861,6 +881,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(191000),
|
||||
|
|
@ -902,6 +923,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(65000),
|
||||
|
|
@ -943,6 +965,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(59000),
|
||||
|
|
@ -984,6 +1007,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(64000),
|
||||
|
|
@ -1025,6 +1049,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(58000),
|
||||
|
|
@ -1066,6 +1091,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(66000),
|
||||
|
|
@ -1107,6 +1133,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(44000),
|
||||
|
|
@ -1148,6 +1175,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(43000),
|
||||
|
|
@ -1189,6 +1217,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(39000),
|
||||
|
|
@ -1230,6 +1259,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(147000),
|
||||
|
|
@ -1271,6 +1301,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(78000),
|
||||
|
|
@ -1312,6 +1343,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(45000),
|
||||
|
|
@ -1353,6 +1385,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(34000),
|
||||
|
|
@ -1394,6 +1427,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(45000),
|
||||
|
|
@ -1435,6 +1469,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(39000),
|
||||
|
|
@ -1476,6 +1511,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(42000),
|
||||
|
|
@ -1517,6 +1553,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(39000),
|
||||
|
|
@ -1558,6 +1595,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(46000),
|
||||
|
|
@ -1599,6 +1637,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(51000),
|
||||
|
|
@ -1640,6 +1679,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(51000),
|
||||
|
|
@ -1681,6 +1721,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(57000),
|
||||
|
|
@ -1722,6 +1763,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(47000),
|
||||
|
|
@ -1763,6 +1805,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(63000),
|
||||
|
|
@ -1804,6 +1847,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(253000),
|
||||
|
|
@ -1845,6 +1889,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(96000),
|
||||
|
|
@ -1886,6 +1931,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(248000),
|
||||
|
|
@ -1927,6 +1973,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(124000),
|
||||
|
|
@ -1968,6 +2015,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(40000),
|
||||
|
|
@ -2009,6 +2057,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(161000),
|
||||
|
|
@ -2050,6 +2099,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(49000),
|
||||
|
|
@ -2091,6 +2141,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(41000),
|
||||
|
|
@ -2132,6 +2183,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(191000),
|
||||
|
|
@ -2173,6 +2225,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(33000),
|
||||
|
|
@ -2214,6 +2267,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(43000),
|
||||
|
|
@ -2255,6 +2309,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(255000),
|
||||
|
|
@ -2296,6 +2351,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(104000),
|
||||
|
|
@ -2337,6 +2393,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(126000),
|
||||
|
|
@ -2378,6 +2435,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(265000),
|
||||
|
|
@ -2419,6 +2477,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(105000),
|
||||
|
|
@ -2460,6 +2519,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(69000),
|
||||
|
|
@ -2501,6 +2561,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(73000),
|
||||
|
|
@ -2542,6 +2603,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(127000),
|
||||
|
|
@ -2583,6 +2645,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(43000),
|
||||
|
|
@ -2624,6 +2687,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(171000),
|
||||
|
|
@ -2665,6 +2729,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(146000),
|
||||
|
|
@ -2706,6 +2771,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 years ago"),
|
||||
view_count: Some(139000),
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 months ago"),
|
||||
view_count: Some(37000000),
|
||||
|
|
@ -82,6 +83,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(72000000),
|
||||
|
|
@ -123,6 +125,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 months ago"),
|
||||
view_count: Some(32000000),
|
||||
|
|
@ -164,6 +167,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(40000000),
|
||||
|
|
@ -205,6 +209,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(491000000),
|
||||
|
|
@ -246,6 +251,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 months ago"),
|
||||
view_count: Some(27000000),
|
||||
|
|
@ -287,6 +293,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(18000000),
|
||||
|
|
@ -328,6 +335,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 years ago"),
|
||||
view_count: Some(259000000),
|
||||
|
|
@ -369,6 +377,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(361000000),
|
||||
|
|
@ -410,6 +419,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 years ago"),
|
||||
view_count: Some(313000000),
|
||||
|
|
@ -451,6 +461,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(104000000),
|
||||
|
|
@ -492,6 +503,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 years ago"),
|
||||
view_count: Some(76000000),
|
||||
|
|
@ -533,6 +545,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(66000000),
|
||||
|
|
@ -574,6 +587,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(6200000),
|
||||
|
|
@ -615,6 +629,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(265000000),
|
||||
|
|
@ -656,6 +671,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(283000000),
|
||||
|
|
@ -697,6 +713,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(279000000),
|
||||
|
|
@ -738,6 +755,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 years ago"),
|
||||
view_count: Some(76000000),
|
||||
|
|
@ -779,6 +797,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(31000000),
|
||||
|
|
@ -820,6 +839,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("12 years ago"),
|
||||
view_count: Some(210000000),
|
||||
|
|
@ -861,6 +881,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 months ago"),
|
||||
view_count: Some(13000000),
|
||||
|
|
@ -902,6 +923,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 years ago"),
|
||||
view_count: Some(58000000),
|
||||
|
|
@ -943,6 +965,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(14000000),
|
||||
|
|
@ -984,6 +1007,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(12000000),
|
||||
|
|
@ -1025,6 +1049,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(62000000),
|
||||
|
|
@ -1066,6 +1091,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(5500000),
|
||||
|
|
@ -1107,6 +1133,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(78000000),
|
||||
|
|
@ -1148,6 +1175,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(17000000),
|
||||
|
|
@ -1189,6 +1217,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(15000000),
|
||||
|
|
@ -1230,6 +1259,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(8800000),
|
||||
|
|
@ -1271,6 +1301,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(22000000),
|
||||
|
|
@ -1312,6 +1343,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(112000000),
|
||||
|
|
@ -1353,6 +1385,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 years ago"),
|
||||
view_count: Some(29000000),
|
||||
|
|
@ -1394,6 +1427,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 years ago"),
|
||||
view_count: Some(23000000),
|
||||
|
|
@ -1435,6 +1469,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("13 years ago"),
|
||||
view_count: Some(90000000),
|
||||
|
|
@ -1476,6 +1511,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(6100000),
|
||||
|
|
@ -1517,6 +1553,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(23000000),
|
||||
|
|
@ -1558,6 +1595,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("15 years ago"),
|
||||
view_count: Some(74000000),
|
||||
|
|
@ -1599,6 +1637,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(2800000),
|
||||
|
|
@ -1640,6 +1679,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(4900000),
|
||||
|
|
@ -1681,6 +1721,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(7300000),
|
||||
|
|
@ -1722,6 +1763,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 years ago"),
|
||||
view_count: Some(39000000),
|
||||
|
|
@ -1763,6 +1805,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 years ago"),
|
||||
view_count: Some(27000000),
|
||||
|
|
@ -1804,6 +1847,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 years ago"),
|
||||
view_count: Some(38000000),
|
||||
|
|
@ -1845,6 +1889,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(1900000),
|
||||
|
|
@ -1886,6 +1931,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(8800000),
|
||||
|
|
@ -1927,6 +1973,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 months ago"),
|
||||
view_count: Some(2500000),
|
||||
|
|
@ -1968,6 +2015,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(6300000),
|
||||
|
|
@ -2009,6 +2057,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(5600000),
|
||||
|
|
@ -2050,6 +2099,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(1100000),
|
||||
|
|
@ -2091,6 +2141,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(1200000),
|
||||
|
|
@ -2132,6 +2183,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(1700000),
|
||||
|
|
@ -2173,6 +2225,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(7100000),
|
||||
|
|
@ -2214,6 +2267,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 months ago"),
|
||||
view_count: Some(1400000),
|
||||
|
|
@ -2255,6 +2309,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(3600000),
|
||||
|
|
@ -2296,6 +2351,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(635000),
|
||||
|
|
@ -2337,6 +2393,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(5700000),
|
||||
|
|
@ -2378,6 +2435,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 years ago"),
|
||||
view_count: Some(3700000),
|
||||
|
|
@ -2419,6 +2477,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(497000),
|
||||
|
|
@ -2460,6 +2519,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(484000),
|
||||
|
|
@ -2501,6 +2561,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(1400000),
|
||||
|
|
@ -2542,6 +2603,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(3100000),
|
||||
|
|
@ -2583,6 +2645,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(960000),
|
||||
|
|
@ -2624,6 +2687,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 years ago"),
|
||||
view_count: Some(1800000),
|
||||
|
|
@ -2665,6 +2729,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(2700000),
|
||||
|
|
@ -2706,6 +2771,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(528000),
|
||||
|
|
@ -2747,6 +2813,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(237000),
|
||||
|
|
@ -2788,6 +2855,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(211000),
|
||||
|
|
@ -2829,6 +2897,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(195000),
|
||||
|
|
@ -2870,6 +2939,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 months ago"),
|
||||
view_count: Some(303000),
|
||||
|
|
@ -2911,6 +2981,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 months ago"),
|
||||
view_count: Some(255000),
|
||||
|
|
@ -2952,6 +3023,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 months ago"),
|
||||
view_count: Some(102000),
|
||||
|
|
@ -2993,6 +3065,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(222000),
|
||||
|
|
@ -3034,6 +3107,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 years ago"),
|
||||
view_count: Some(693000),
|
||||
|
|
@ -3075,6 +3149,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 years ago"),
|
||||
view_count: Some(613000),
|
||||
|
|
@ -3116,6 +3191,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(125000),
|
||||
|
|
@ -3157,6 +3233,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 months ago"),
|
||||
view_count: Some(143000),
|
||||
|
|
@ -3198,6 +3275,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(252000),
|
||||
|
|
@ -3239,6 +3317,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 months ago"),
|
||||
view_count: Some(100000),
|
||||
|
|
@ -3280,6 +3359,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(97000),
|
||||
|
|
@ -3321,6 +3401,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(88000),
|
||||
|
|
@ -3362,6 +3443,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 years ago"),
|
||||
view_count: Some(151000),
|
||||
|
|
@ -3403,6 +3485,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 months ago"),
|
||||
view_count: Some(26000),
|
||||
|
|
@ -3444,6 +3527,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(16000),
|
||||
|
|
@ -3485,6 +3569,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(125000),
|
||||
|
|
@ -3526,6 +3611,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 years ago"),
|
||||
view_count: Some(108000),
|
||||
|
|
@ -3567,6 +3653,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(13000),
|
||||
|
|
@ -3608,6 +3695,7 @@ Playlist(
|
|||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(4500),
|
||||
|
|
|
|||
|
|
@ -26,6 +26,346 @@ SearchResult(
|
|||
subscriber_count: Some(2920000),
|
||||
short_description: "Hi, I\'m Tina, aka Doobydobap! Food is the medium I use to tell stories and connect with people who share the same passion as I\u{a0}...",
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "N5AKQflK1TU",
|
||||
name: "When you impulse buy...",
|
||||
duration: Some(60),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/N5AKQflK1TU/hq720_2.jpg?sqp=-oaymwEdCJUDENAFSFXyq4qpAw8IARUAAIhCcAHAAQbQAQE=&rs=AOn4CLAsKUEXxvFyA6J9cUPJlYYtRBjxmg",
|
||||
width: 405,
|
||||
height: 720,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCh8gHdtzO2tXd593_bjErWg",
|
||||
name: "Doobydobap",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/dm5Aq93xvVJz0NoVO88ieBkDXmuShCujGPlZ7qETMEPTrXvPUCFI3-BB6Xs_P-r6Uk3mnBy9zA=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 day ago"),
|
||||
view_count: Some(858993),
|
||||
is_live: false,
|
||||
is_short: true,
|
||||
is_upcoming: false,
|
||||
short_description: Some("shorts #jam https://doobydobap.com/recipe/hongsi_jam Instagram @doobydobap Join my discord!"),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "OzIFALQ_YtA",
|
||||
name: "taste testing gam!",
|
||||
duration: Some(60),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/OzIFALQ_YtA/hq720_2.jpg?sqp=-oaymwEdCJUDENAFSFXyq4qpAw8IARUAAIhCcAHAAQbQAQE=&rs=AOn4CLD1E-eWjZrzHcfzh-DBWeZ6ewxNNg",
|
||||
width: 405,
|
||||
height: 720,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCh8gHdtzO2tXd593_bjErWg",
|
||||
name: "Doobydobap",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/dm5Aq93xvVJz0NoVO88ieBkDXmuShCujGPlZ7qETMEPTrXvPUCFI3-BB6Xs_P-r6Uk3mnBy9zA=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 days ago"),
|
||||
view_count: Some(1000180),
|
||||
is_live: false,
|
||||
is_short: true,
|
||||
is_upcoming: false,
|
||||
short_description: Some("shorts #fruit #mukbang Instagram @doobydobap Join my discord! https://discord.gg/doobyverse www.doobydobap.com for\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "dAcJILbc_0Q",
|
||||
name: "How to: Korean rice wine 🍶 (makgeolli)",
|
||||
duration: Some(59),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/dAcJILbc_0Q/hq720_2.jpg?sqp=-oaymwEdCJUDENAFSFXyq4qpAw8IARUAAIhCcAHAAQbQAQE=&rs=AOn4CLCi9qIkFstiJzKf9YdwdLEKzsZfZA",
|
||||
width: 405,
|
||||
height: 720,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCh8gHdtzO2tXd593_bjErWg",
|
||||
name: "Doobydobap",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/dm5Aq93xvVJz0NoVO88ieBkDXmuShCujGPlZ7qETMEPTrXvPUCFI3-BB6Xs_P-r6Uk3mnBy9zA=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("5 days ago"),
|
||||
view_count: Some(1325816),
|
||||
is_live: false,
|
||||
is_short: true,
|
||||
is_upcoming: false,
|
||||
short_description: Some("shorts Instagram @doobydobap Join my discord! https://discord.gg/doobyverse www.doobydobap.com for recipes & stories."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "9NuhKCv3crg",
|
||||
name: "the end.",
|
||||
duration: Some(982),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/9NuhKCv3crg/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB3RO6rSdCdoNvVoOIuXHuQLMAhjg",
|
||||
width: 360,
|
||||
height: 202,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/9NuhKCv3crg/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCGnhU_OdOXdc1jI-o8oDVXsyARaQ",
|
||||
width: 720,
|
||||
height: 404,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCh8gHdtzO2tXd593_bjErWg",
|
||||
name: "Doobydobap",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/dm5Aq93xvVJz0NoVO88ieBkDXmuShCujGPlZ7qETMEPTrXvPUCFI3-BB6Xs_P-r6Uk3mnBy9zA=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 days ago"),
|
||||
view_count: Some(974475),
|
||||
is_live: false,
|
||||
is_short: false,
|
||||
is_upcoming: false,
|
||||
short_description: Some("or the start of something new~~~~~ Thank you for your patience on the vlog, it took some time to adjust to my new normal. Excited\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "GvutfmW26JQ",
|
||||
name: "👹stay sour 🍋",
|
||||
duration: Some(52),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/GvutfmW26JQ/hq720_2.jpg?sqp=-oaymwEdCJUDENAFSFXyq4qpAw8IARUAAIhCcAHAAQbQAQE=&rs=AOn4CLATzHy4VrMbKmNT14yfqCUBvElmpQ",
|
||||
width: 405,
|
||||
height: 720,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCh8gHdtzO2tXd593_bjErWg",
|
||||
name: "Doobydobap",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/dm5Aq93xvVJz0NoVO88ieBkDXmuShCujGPlZ7qETMEPTrXvPUCFI3-BB6Xs_P-r6Uk3mnBy9zA=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 days ago"),
|
||||
view_count: Some(1096013),
|
||||
is_live: false,
|
||||
is_short: true,
|
||||
is_upcoming: false,
|
||||
short_description: Some("Ingredients: ** Citrus Filling** 1 cup mandarin juice or any orange-y citrus in season! 6 eggs 1 1/2 cup sugar ⅓ cup flour zest of 1\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "MwWdlNamxN0",
|
||||
name: "what I do with leftovers",
|
||||
duration: Some(60),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/MwWdlNamxN0/hq720_2.jpg?sqp=-oaymwEdCJUDENAFSFXyq4qpAw8IARUAAIhCcAHAAQbQAQE=&rs=AOn4CLDQFiOrRxYkYaYaJleuwExGzK0A8Q",
|
||||
width: 405,
|
||||
height: 720,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCh8gHdtzO2tXd593_bjErWg",
|
||||
name: "Doobydobap",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/dm5Aq93xvVJz0NoVO88ieBkDXmuShCujGPlZ7qETMEPTrXvPUCFI3-BB6Xs_P-r6Uk3mnBy9zA=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 days ago"),
|
||||
view_count: Some(2735502),
|
||||
is_live: false,
|
||||
is_short: true,
|
||||
is_upcoming: false,
|
||||
short_description: Some("shorts #friedrice #cooking Instagram @doobydobap Join my discord! https://discord.gg/doobyverse www.doobydobap.com for\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "FsYaHsohjBc",
|
||||
name: "osechi ft. slim shady",
|
||||
duration: Some(52),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/FsYaHsohjBc/hq720_2.jpg?sqp=-oaymwEdCJUDENAFSFXyq4qpAw8IARUAAIhCcAHAAQbQAQE=&rs=AOn4CLBuuMnmUl-er211GWmxJoIacRMWPQ",
|
||||
width: 405,
|
||||
height: 720,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCh8gHdtzO2tXd593_bjErWg",
|
||||
name: "Doobydobap",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/dm5Aq93xvVJz0NoVO88ieBkDXmuShCujGPlZ7qETMEPTrXvPUCFI3-BB6Xs_P-r6Uk3mnBy9zA=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(1168881),
|
||||
is_live: false,
|
||||
is_short: true,
|
||||
is_upcoming: false,
|
||||
short_description: Some("shorts #cooking Instagram @doobydobap Join my discord! https://discord.gg/doobyverse www.doobydobap.com for recipes\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "38Gd6TdmNVs",
|
||||
name: "KOREAN BARBECUE l doob gourmand ep.3",
|
||||
duration: Some(525),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/38Gd6TdmNVs/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDsNWReQCqk65JFrXXAd6rxMUI_Bw",
|
||||
width: 360,
|
||||
height: 202,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/38Gd6TdmNVs/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA46ZJUIjqXr6u27TG5kiThPUj0EQ",
|
||||
width: 720,
|
||||
height: 404,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCh8gHdtzO2tXd593_bjErWg",
|
||||
name: "Doobydobap",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/dm5Aq93xvVJz0NoVO88ieBkDXmuShCujGPlZ7qETMEPTrXvPUCFI3-BB6Xs_P-r6Uk3mnBy9zA=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(354486),
|
||||
is_live: false,
|
||||
is_short: false,
|
||||
is_upcoming: false,
|
||||
short_description: Some("I haven\'t done a doob gourmand series in so so long! I hope you enjoyed it, let me know what kind of food you\'re interested in\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "o04Yo2qxqcc",
|
||||
name: "trailer l doob gourmand ep.3 k bbq",
|
||||
duration: Some(53),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/o04Yo2qxqcc/hq720_2.jpg?sqp=-oaymwEdCJUDENAFSFXyq4qpAw8IARUAAIhCcAHAAQbQAQE=&rs=AOn4CLAAqXMMzlzLMIFNEAMwgDbQ1NkuSw",
|
||||
width: 405,
|
||||
height: 720,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCh8gHdtzO2tXd593_bjErWg",
|
||||
name: "Doobydobap",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/dm5Aq93xvVJz0NoVO88ieBkDXmuShCujGPlZ7qETMEPTrXvPUCFI3-BB6Xs_P-r6Uk3mnBy9zA=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(639926),
|
||||
is_live: false,
|
||||
is_short: true,
|
||||
is_upcoming: false,
|
||||
short_description: Some("shorts #bbq #korean ... a snippet from my doob gourmand, coming soon! Instagram @doobydobap Join my discord!"),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "JBUZE0mIlg8",
|
||||
name: "small but sure joy",
|
||||
duration: Some(29),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/JBUZE0mIlg8/hq720_2.jpg?sqp=-oaymwEdCJUDENAFSFXyq4qpAw8IARUAAIhCcAHAAQbQAQE=&rs=AOn4CLCRBlyIUBUm_aypWz4tGkrDNJxIZw",
|
||||
width: 405,
|
||||
height: 720,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCh8gHdtzO2tXd593_bjErWg",
|
||||
name: "Doobydobap",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/dm5Aq93xvVJz0NoVO88ieBkDXmuShCujGPlZ7qETMEPTrXvPUCFI3-BB6Xs_P-r6Uk3mnBy9zA=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(1231893),
|
||||
is_live: false,
|
||||
is_short: true,
|
||||
is_upcoming: false,
|
||||
short_description: Some("shorts #food #korea Instagram @doobydobap Join my discord! https://discord.gg/doobyverse www.doobydobap.com for\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "1VW7iXRIrc8",
|
||||
name: "Alone, in the City of Love",
|
||||
|
|
@ -55,6 +395,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(531580),
|
||||
|
|
@ -92,6 +433,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 days ago"),
|
||||
view_count: Some(974475),
|
||||
|
|
@ -129,6 +471,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(1034415),
|
||||
|
|
@ -166,6 +509,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(831908),
|
||||
|
|
@ -174,6 +518,386 @@ SearchResult(
|
|||
is_upcoming: false,
|
||||
short_description: Some("I could palpably feel how I\'m so much happier than before when I was reviewing my footage All the finalized recipes will be\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "ExHRTtm8QEA",
|
||||
name: "Mother, an Inventor? EP 456 | Atashin\'chi | [ENG sub]",
|
||||
duration: Some(418),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/ExHRTtm8QEA/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAge-bKNb6AanyqxV7ak4Kfn-3nYw",
|
||||
width: 360,
|
||||
height: 202,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/ExHRTtm8QEA/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBFFYvASoliDr52srhWeMpcNf1oJw",
|
||||
width: 720,
|
||||
height: 404,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCkwJXqFl-9VVvK9udYCFjMw",
|
||||
name: "【アニメ】あたしンち公式チャンネル",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/ytc/AMLnZu-wrmP4MaWt-SDzrcSiAeN7QTR2VgWBmt9Zr3TD=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("11 months ago"),
|
||||
view_count: Some(386384),
|
||||
is_live: false,
|
||||
is_short: false,
|
||||
is_upcoming: false,
|
||||
short_description: Some("▼Subscribe to the official channel here \nhttps://www.youtube.com/c/atashinchi?sub_confirmation=1\n#Atashinchi ..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "8mxdUQadX6Y",
|
||||
name: "wholesome days in korea :\'\')",
|
||||
duration: Some(497),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/8mxdUQadX6Y/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDoP9fZds83zk9TdFK0ZDDoV01c2g",
|
||||
width: 360,
|
||||
height: 202,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/8mxdUQadX6Y/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAbM5vfd7RzivOeKK4OG3ngMpCqwA",
|
||||
width: 720,
|
||||
height: 404,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCTZHeY_cugi1rAAPoH-sMkA",
|
||||
name: "dobochobo",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/VvcHqBmCDRXWVRlgWqRM4U69j0cde17bs9vQDn3qEMAK62dTb93MnBtpBlNX-eh2g8NX-BVEoQ=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: none,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("17 hours ago"),
|
||||
view_count: Some(19274),
|
||||
is_live: false,
|
||||
is_short: false,
|
||||
is_upcoming: false,
|
||||
short_description: Some("a short n sweet vlog of some of my last days in seoul - visiting my grandma, people watching at hangang, and spending time with\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "gXFw55sYoRE",
|
||||
name: "Kbbq for One",
|
||||
duration: Some(874),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/gXFw55sYoRE/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAvmd1zOXlDXmwCni86QaKInsHiRg",
|
||||
width: 360,
|
||||
height: 202,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/gXFw55sYoRE/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDS6cGKpyTFEFvd-Y-kpTOqHhFcrg",
|
||||
width: 720,
|
||||
height: 404,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCh8gHdtzO2tXd593_bjErWg",
|
||||
name: "Doobydobap",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/dm5Aq93xvVJz0NoVO88ieBkDXmuShCujGPlZ7qETMEPTrXvPUCFI3-BB6Xs_P-r6Uk3mnBy9zA=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("9 months ago"),
|
||||
view_count: Some(864777),
|
||||
is_live: false,
|
||||
is_short: false,
|
||||
is_upcoming: false,
|
||||
short_description: Some("Watch till the end to hear about my type ;) doobymart.com Go get your 돈역마염 T-shirts before Christmas! Instagram\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "Spiq_AjCXs8",
|
||||
name: "Tea and Biscuits... the British Obsession",
|
||||
duration: Some(578),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/Spiq_AjCXs8/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCDDN75ZCzIOVIElVqHWVANBzIVxg",
|
||||
width: 360,
|
||||
height: 202,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/Spiq_AjCXs8/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD2TrmSLHMNt7hDoR5jsmWMTcD7Uw",
|
||||
width: 720,
|
||||
height: 404,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCOgGAfSUy5LvEyVS_LF5kdw",
|
||||
name: "JOLLY",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/ytc/AMLnZu-2Z-LMvcKYcD3r83tRBuYsFJuau3d3rJr4AqG5fw=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 year ago"),
|
||||
view_count: Some(956121),
|
||||
is_live: false,
|
||||
is_short: false,
|
||||
is_upcoming: false,
|
||||
short_description: Some("Tea and Biscuits. A British institution. British people consume more than a jolly 8 million biscuits every day... but which one is the\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "IxFmWHjcdYM",
|
||||
name: "Golden Fried Rice from Kaguya-Sama: Love Is War | Anime with Alvin",
|
||||
duration: Some(447),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/IxFmWHjcdYM/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCu1oJLIA6yl336DVuRFeMACbrYMg",
|
||||
width: 360,
|
||||
height: 202,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/IxFmWHjcdYM/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC9oNa5mB_qbZFjr9GQCPzdWZWB5Q",
|
||||
width: 720,
|
||||
height: 404,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCJHA_jMfCvEnv-3kRjTCQXw",
|
||||
name: "Babish Culinary Universe",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/ytc/AMLnZu8y65Kqbg0e4OUZClxeu5qteQZEQqjenCHW3wYg=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("20 hours ago"),
|
||||
view_count: Some(262149),
|
||||
is_live: false,
|
||||
is_short: false,
|
||||
is_upcoming: false,
|
||||
short_description: Some("Save up to 40% on your SimpliSafe system. Visit https://SimpliSafe.com/babish to customize yours! Try SimpliSafe risk-free."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "djgrv_7HbsM",
|
||||
name: "When British People Try French Snacks...",
|
||||
duration: Some(816),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/djgrv_7HbsM/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLALhZG-LeI394jh6ZN2fNs3Spm9jg",
|
||||
width: 360,
|
||||
height: 202,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/djgrv_7HbsM/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAE1Ygy4wMYxkl8GsFvZ6eVAyAiRA",
|
||||
width: 720,
|
||||
height: 404,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCOgGAfSUy5LvEyVS_LF5kdw",
|
||||
name: "JOLLY",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/ytc/AMLnZu-2Z-LMvcKYcD3r83tRBuYsFJuau3d3rJr4AqG5fw=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(2347800),
|
||||
is_live: false,
|
||||
is_short: false,
|
||||
is_upcoming: false,
|
||||
short_description: Some("Today we try some Jolly French Snacks, and are reminded that French food is, well, jolly good. Buy Josh\'s autobiography (written\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "EqLHh9vJIKA",
|
||||
name: "Best Friends Cooking Battle (ft. Celebrity Chef)",
|
||||
duration: Some(1344),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/EqLHh9vJIKA/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAHKkitgyRgsAM_YaLa-LFZBeFfew",
|
||||
width: 360,
|
||||
height: 202,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/EqLHh9vJIKA/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB3ms2FhtfcwsnkleaIGI0475j4vQ",
|
||||
width: 720,
|
||||
height: 404,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCOgGAfSUy5LvEyVS_LF5kdw",
|
||||
name: "JOLLY",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/ytc/AMLnZu-2Z-LMvcKYcD3r83tRBuYsFJuau3d3rJr4AqG5fw=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(773583),
|
||||
is_live: false,
|
||||
is_short: false,
|
||||
is_upcoming: false,
|
||||
short_description: Some("If you want to send us anything to open, our PO Box is open again! The address is: Box 51, 1 Rockley Road, London, W14 0DJ\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "1oPq2UUiM7s",
|
||||
name: "The Ultimate Full English Breakfast with Sorted Food!",
|
||||
duration: Some(530),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/1oPq2UUiM7s/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCEmg7zT9mNRDtvV0XI6Wwp03MTAA",
|
||||
width: 360,
|
||||
height: 202,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/1oPq2UUiM7s/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD8HE0GLPGBzMc0V_8ycCrWEiQ0tA",
|
||||
width: 720,
|
||||
height: 404,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCOgGAfSUy5LvEyVS_LF5kdw",
|
||||
name: "JOLLY",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/ytc/AMLnZu-2Z-LMvcKYcD3r83tRBuYsFJuau3d3rJr4AqG5fw=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(882756),
|
||||
is_live: false,
|
||||
is_short: false,
|
||||
is_upcoming: false,
|
||||
short_description: Some("Today we\'re joined by Sorted Food to settle the great debate - what is in the ULTIMATE Full English?! Check out their channel\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "0uTLaUsK_fM",
|
||||
name: "The Ultimate Snack World-Cup!!",
|
||||
duration: Some(1133),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/0uTLaUsK_fM/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAKHz14GlQnRbdPEVCKzoGZ77OpAg",
|
||||
width: 360,
|
||||
height: 202,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/0uTLaUsK_fM/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCbKuNiDGuNTS-KTVatbAo0O9LQuw",
|
||||
width: 720,
|
||||
height: 404,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCOgGAfSUy5LvEyVS_LF5kdw",
|
||||
name: "JOLLY",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/ytc/AMLnZu-2Z-LMvcKYcD3r83tRBuYsFJuau3d3rJr4AqG5fw=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(752836),
|
||||
is_live: false,
|
||||
is_short: false,
|
||||
is_upcoming: false,
|
||||
short_description: Some("If you want to send us anything to open, our PO Box is open again! The address is: Box 51, 1 Rockley Road, London, W14 0DJ\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "6c58-749p6Y",
|
||||
name: "Old Friends & New",
|
||||
duration: Some(774),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/6c58-749p6Y/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB2Jhsz_feWcNW07yWtjrumbMgtnw",
|
||||
width: 360,
|
||||
height: 202,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/6c58-749p6Y/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDagCO86W02BzWwG3yYwtlvLUbAuw",
|
||||
width: 720,
|
||||
height: 404,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCh8gHdtzO2tXd593_bjErWg",
|
||||
name: "Doobydobap",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/dm5Aq93xvVJz0NoVO88ieBkDXmuShCujGPlZ7qETMEPTrXvPUCFI3-BB6Xs_P-r6Uk3mnBy9zA=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(426393),
|
||||
is_live: false,
|
||||
is_short: false,
|
||||
is_upcoming: false,
|
||||
short_description: Some("Realized I have a typo that says perogis instead of peroni oop But for real, I\'m so thankful for Bobbi bc she was one of the few/\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "38Gd6TdmNVs",
|
||||
name: "KOREAN BARBECUE l doob gourmand ep.3",
|
||||
|
|
@ -203,6 +927,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 weeks ago"),
|
||||
view_count: Some(354486),
|
||||
|
|
@ -240,6 +965,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("1 month ago"),
|
||||
view_count: Some(524950),
|
||||
|
|
@ -277,6 +1003,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 weeks ago"),
|
||||
view_count: Some(528595),
|
||||
|
|
@ -314,6 +1041,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(717515),
|
||||
|
|
@ -351,6 +1079,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 months ago"),
|
||||
view_count: Some(624386),
|
||||
|
|
@ -388,6 +1117,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(696942),
|
||||
|
|
@ -425,6 +1155,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(923749),
|
||||
|
|
@ -462,6 +1193,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("6 months ago"),
|
||||
view_count: Some(1282467),
|
||||
|
|
@ -499,6 +1231,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 months ago"),
|
||||
view_count: Some(1649656),
|
||||
|
|
@ -536,6 +1269,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("4 months ago"),
|
||||
view_count: Some(1085725),
|
||||
|
|
@ -544,6 +1278,44 @@ SearchResult(
|
|||
is_upcoming: false,
|
||||
short_description: Some("A busy, but calm week for me here in Seoul living alone. Planning on exploring more parts of Korea, please let me know in the\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "T4NOt727wqI",
|
||||
name: "20 Comfort Foods From Around The World",
|
||||
duration: Some(722),
|
||||
thumbnail: [
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/T4NOt727wqI/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBpte9rWpo0EXWj53uMxatkyAumag",
|
||||
width: 360,
|
||||
height: 202,
|
||||
),
|
||||
Thumbnail(
|
||||
url: "https://i.ytimg.com/vi/T4NOt727wqI/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB1U3YAMWUe4_RXBpWnVP_-XE3hvA",
|
||||
width: 720,
|
||||
height: 404,
|
||||
),
|
||||
],
|
||||
channel: Some(ChannelTag(
|
||||
id: "UCwiTOchWeKjrJZw7S1H__1g",
|
||||
name: "Food Insider",
|
||||
avatar: [
|
||||
Thumbnail(
|
||||
url: "https://yt3.ggpht.com/ytc/AMLnZu80hN5x1GVlHZ3VevK1qrMF2ocDLTs6t56GoAXoHg=s68-c-k-c0x00ffffff-no-rj",
|
||||
width: 68,
|
||||
height: 68,
|
||||
),
|
||||
],
|
||||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("2 years ago"),
|
||||
view_count: Some(5628269),
|
||||
is_live: false,
|
||||
is_short: false,
|
||||
is_upcoming: false,
|
||||
short_description: Some("In a time when much of the world is facing lockdown because of the coronavirus pandemic, unable to see family and friends in\u{a0}..."),
|
||||
)),
|
||||
Video(VideoItem(
|
||||
id: "dkMtSrjDLO0",
|
||||
name: "How to make Naruto\'s favorite ramen",
|
||||
|
|
@ -573,6 +1345,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("10 months ago"),
|
||||
view_count: Some(1327833),
|
||||
|
|
@ -610,6 +1383,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("3 months ago"),
|
||||
view_count: Some(1052801),
|
||||
|
|
@ -647,6 +1421,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("7 months ago"),
|
||||
view_count: Some(1137136),
|
||||
|
|
@ -684,6 +1459,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 months ago"),
|
||||
view_count: Some(928967),
|
||||
|
|
@ -721,6 +1497,7 @@ SearchResult(
|
|||
verification: verified,
|
||||
subscriber_count: None,
|
||||
)),
|
||||
channels_feat: [],
|
||||
publish_date: "[date]",
|
||||
publish_date_txt: Some("8 months ago"),
|
||||
view_count: Some(1077297),
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue