refactor: use unified models for video/playlist/channel

This commit is contained in:
ThetaDev 2022-10-17 00:55:49 +02:00
parent b22f6995cc
commit dbcb7fe0df
41 changed files with 2156 additions and 1228 deletions

View file

@ -3,17 +3,14 @@ use url::Url;
use crate::{ use crate::{
error::{Error, ExtractionError}, error::{Error, ExtractionError},
model::{Channel, ChannelInfo, ChannelPlaylist, ChannelVideo, Paginator}, model::{Channel, ChannelInfo, Paginator, PlaylistItem, VideoItem},
param::{ChannelOrder, Language}, param::{ChannelOrder, Language},
serializer::MapResult, serializer::MapResult,
timeago, timeago,
util::{self, TryRemove}, util::{self, TryRemove},
}; };
use super::{ use super::{response, ClientType, MapResponse, RustyPipeQuery, YTContext};
response::{self, FromWLang},
ClientType, MapResponse, QContinuation, RustyPipeQuery, YTContext,
};
#[derive(Debug, Serialize)] #[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
@ -41,7 +38,7 @@ impl RustyPipeQuery {
pub async fn channel_videos( pub async fn channel_videos(
self, self,
channel_id: &str, channel_id: &str,
) -> Result<Channel<Paginator<ChannelVideo>>, Error> { ) -> Result<Channel<Paginator<VideoItem>>, Error> {
self.channel_videos_ordered(channel_id, ChannelOrder::default()) self.channel_videos_ordered(channel_id, ChannelOrder::default())
.await .await
} }
@ -50,7 +47,7 @@ impl RustyPipeQuery {
self, self,
channel_id: &str, channel_id: &str,
order: ChannelOrder, order: ChannelOrder,
) -> Result<Channel<Paginator<ChannelVideo>>, Error> { ) -> Result<Channel<Paginator<VideoItem>>, Error> {
let context = self.get_context(ClientType::Desktop, true).await; let context = self.get_context(ClientType::Desktop, true).await;
let request_body = QChannel { let request_body = QChannel {
context, context,
@ -72,30 +69,10 @@ impl RustyPipeQuery {
.await .await
} }
pub async fn channel_videos_continuation(
self,
ctoken: &str,
) -> Result<Paginator<ChannelVideo>, Error> {
let context = self.get_context(ClientType::Desktop, true).await;
let request_body = QContinuation {
context,
continuation: ctoken,
};
self.execute_request::<response::ChannelCont, _, _>(
ClientType::Desktop,
"channel_videos_continuation",
ctoken,
"browse",
&request_body,
)
.await
}
pub async fn channel_playlists( pub async fn channel_playlists(
self, self,
channel_id: &str, channel_id: &str,
) -> Result<Channel<Paginator<ChannelPlaylist>>, Error> { ) -> Result<Channel<Paginator<PlaylistItem>>, Error> {
let context = self.get_context(ClientType::Desktop, true).await; let context = self.get_context(ClientType::Desktop, true).await;
let request_body = QChannel { let request_body = QChannel {
context, context,
@ -113,26 +90,6 @@ impl RustyPipeQuery {
.await .await
} }
pub async fn channel_playlists_continuation(
self,
ctoken: &str,
) -> Result<Paginator<ChannelPlaylist>, Error> {
let context = self.get_context(ClientType::Desktop, true).await;
let request_body = QContinuation {
context,
continuation: ctoken,
};
self.execute_request::<response::ChannelCont, _, _>(
ClientType::Desktop,
"channel_playlists_continuation",
ctoken,
"browse",
&request_body,
)
.await
}
pub async fn channel_info(&self, channel_id: &str) -> Result<Channel<ChannelInfo>, Error> { pub async fn channel_info(&self, channel_id: &str) -> Result<Channel<ChannelInfo>, Error> {
let context = self.get_context(ClientType::Desktop, true).await; let context = self.get_context(ClientType::Desktop, true).await;
let request_body = QChannel { let request_body = QChannel {
@ -152,13 +109,13 @@ impl RustyPipeQuery {
} }
} }
impl MapResponse<Channel<Paginator<ChannelVideo>>> for response::Channel { impl MapResponse<Channel<Paginator<VideoItem>>> for response::Channel {
fn map_response( fn map_response(
self, self,
id: &str, id: &str,
lang: Language, lang: Language,
_deobf: Option<&crate::deobfuscate::Deobfuscator>, _deobf: Option<&crate::deobfuscate::Deobfuscator>,
) -> Result<MapResult<Channel<Paginator<ChannelVideo>>>, ExtractionError> { ) -> Result<MapResult<Channel<Paginator<VideoItem>>>, ExtractionError> {
let content = map_channel_content(self.contents, id, self.alerts)?; let content = map_channel_content(self.contents, id, self.alerts)?;
let grid = match content { let grid = match content {
response::channel::ChannelContent::GridRenderer { items } => Some(items), response::channel::ChannelContent::GridRenderer { items } => Some(items),
@ -181,20 +138,22 @@ impl MapResponse<Channel<Paginator<ChannelVideo>>> for response::Channel {
} }
} }
impl MapResponse<Channel<Paginator<ChannelPlaylist>>> for response::Channel { impl MapResponse<Channel<Paginator<PlaylistItem>>> for response::Channel {
fn map_response( fn map_response(
self, self,
id: &str, id: &str,
lang: Language, lang: Language,
_deobf: Option<&crate::deobfuscate::Deobfuscator>, _deobf: Option<&crate::deobfuscate::Deobfuscator>,
) -> Result<MapResult<Channel<Paginator<ChannelPlaylist>>>, ExtractionError> { ) -> Result<MapResult<Channel<Paginator<PlaylistItem>>>, ExtractionError> {
let content = map_channel_content(self.contents, id, self.alerts)?; let content = map_channel_content(self.contents, id, self.alerts)?;
let grid = match content { let grid = match content {
response::channel::ChannelContent::GridRenderer { items } => Some(items), response::channel::ChannelContent::GridRenderer { items } => Some(items),
_ => None, _ => None,
}; };
let p_res = grid.map(map_playlists).unwrap_or_default(); let p_res = grid
.map(|item| map_playlists(item, lang))
.unwrap_or_default();
Ok(MapResult { Ok(MapResult {
c: map_channel( c: map_channel(
@ -267,98 +226,29 @@ impl MapResponse<Channel<ChannelInfo>> for response::Channel {
} }
} }
impl MapResponse<Paginator<ChannelVideo>> for response::ChannelCont {
fn map_response(
self,
_id: &str,
lang: Language,
_deobf: Option<&crate::deobfuscate::Deobfuscator>,
) -> Result<MapResult<Paginator<ChannelVideo>>, ExtractionError> {
let mut actions = self.on_response_received_actions;
let res = actions
.try_swap_remove(0)
.ok_or(ExtractionError::Retry)?
.append_continuation_items_action
.continuation_items;
Ok(map_videos(res, lang))
}
}
impl MapResponse<Paginator<ChannelPlaylist>> for response::ChannelCont {
fn map_response(
self,
_id: &str,
_lang: Language,
_deobf: Option<&crate::deobfuscate::Deobfuscator>,
) -> Result<MapResult<Paginator<ChannelPlaylist>>, ExtractionError> {
let mut actions = self.on_response_received_actions;
let res = actions
.try_swap_remove(0)
.ok_or(ExtractionError::Retry)?
.append_continuation_items_action
.continuation_items;
Ok(map_playlists(res))
}
}
fn map_videos( fn map_videos(
res: MapResult<Vec<response::VideoListItem>>, res: MapResult<Vec<response::YouTubeListItem>>,
lang: Language, lang: Language,
) -> MapResult<Paginator<ChannelVideo>> { ) -> MapResult<Paginator<VideoItem>> {
let mut ctoken = None; let mut mapper = response::YouTubeListMapper::<VideoItem>::new(lang);
let videos = res mapper.map_response(res);
.c
.into_iter()
.filter_map(|item| match item {
response::VideoListItem::GridVideoRenderer(video) => {
Some(ChannelVideo::from_w_lang(video, lang))
}
response::VideoListItem::RichItemRenderer {
content: response::RichItem::VideoRenderer(video),
} => Some(ChannelVideo::from_w_lang(video, lang)),
response::VideoListItem::ContinuationItemRenderer {
continuation_endpoint,
} => {
ctoken = Some(continuation_endpoint.continuation_command.token);
None
}
_ => None,
})
.collect();
MapResult { MapResult {
c: Paginator::new(None, videos, ctoken), c: Paginator::new(None, mapper.items, mapper.ctoken),
warnings: res.warnings, warnings: mapper.warnings,
} }
} }
fn map_playlists( fn map_playlists(
res: MapResult<Vec<response::VideoListItem>>, res: MapResult<Vec<response::YouTubeListItem>>,
) -> MapResult<Paginator<ChannelPlaylist>> { lang: Language,
let mut ctoken = None; ) -> MapResult<Paginator<PlaylistItem>> {
let playlists = res let mut mapper = response::YouTubeListMapper::<PlaylistItem>::new(lang);
.c mapper.map_response(res);
.into_iter()
.filter_map(|item| match item {
response::VideoListItem::GridPlaylistRenderer(playlist) => Some(playlist.into()),
response::VideoListItem::RichItemRenderer {
content: response::RichItem::PlaylistRenderer(playlist),
} => Some(playlist.into()),
response::VideoListItem::ContinuationItemRenderer {
continuation_endpoint,
} => {
ctoken = Some(continuation_endpoint.continuation_command.token);
None
}
_ => None,
})
.collect();
MapResult { MapResult {
c: Paginator::new(None, playlists, ctoken), c: Paginator::new(None, mapper.items, mapper.ctoken),
warnings: res.warnings, warnings: mapper.warnings,
} }
} }
@ -516,7 +406,7 @@ mod tests {
use crate::{ use crate::{
client::{response, MapResponse}, client::{response, MapResponse},
model::{Channel, ChannelInfo, ChannelPlaylist, ChannelVideo, Paginator}, model::{Channel, ChannelInfo, Paginator, PlaylistItem, VideoItem},
param::Language, param::Language,
serializer::MapResult, serializer::MapResult,
}; };
@ -537,7 +427,7 @@ mod tests {
let channel: response::Channel = let channel: response::Channel =
serde_json::from_reader(BufReader::new(json_file)).unwrap(); serde_json::from_reader(BufReader::new(json_file)).unwrap();
let map_res: MapResult<Channel<Paginator<ChannelVideo>>> = let map_res: MapResult<Channel<Paginator<VideoItem>>> =
channel.map_response(id, Language::En, None).unwrap(); channel.map_response(id, Language::En, None).unwrap();
assert!( assert!(
@ -557,27 +447,6 @@ mod tests {
} }
} }
#[test]
fn map_channel_videos_cont() {
let json_path = Path::new("testfiles/channel/channel_videos_cont.json");
let json_file = File::open(json_path).unwrap();
let channel: response::ChannelCont =
serde_json::from_reader(BufReader::new(json_file)).unwrap();
let map_res: MapResult<Paginator<ChannelVideo>> = channel
.map_response("UC2DjFE7Xf11URZqWBigcVOQ", Language::En, None)
.unwrap();
assert!(
map_res.warnings.is_empty(),
"deserialization/mapping warnings: {:?}",
map_res.warnings
);
insta::assert_ron_snapshot!("map_channel_videos_cont", map_res.c, {
".items[].publish_date" => "[date]",
});
}
#[test] #[test]
fn map_channel_playlists() { fn map_channel_playlists() {
let json_path = Path::new("testfiles/channel/channel_playlists.json"); let json_path = Path::new("testfiles/channel/channel_playlists.json");
@ -585,7 +454,7 @@ mod tests {
let channel: response::Channel = let channel: response::Channel =
serde_json::from_reader(BufReader::new(json_file)).unwrap(); serde_json::from_reader(BufReader::new(json_file)).unwrap();
let map_res: MapResult<Channel<Paginator<ChannelPlaylist>>> = channel let map_res: MapResult<Channel<Paginator<PlaylistItem>>> = channel
.map_response("UC2DjFE7Xf11URZqWBigcVOQ", Language::En, None) .map_response("UC2DjFE7Xf11URZqWBigcVOQ", Language::En, None)
.unwrap(); .unwrap();
@ -597,25 +466,6 @@ mod tests {
insta::assert_ron_snapshot!("map_channel_playlists", map_res.c); insta::assert_ron_snapshot!("map_channel_playlists", map_res.c);
} }
#[test]
fn map_channel_playlists_cont() {
let json_path = Path::new("testfiles/channel/channel_playlists_cont.json");
let json_file = File::open(json_path).unwrap();
let channel: response::ChannelCont =
serde_json::from_reader(BufReader::new(json_file)).unwrap();
let map_res: MapResult<Paginator<ChannelPlaylist>> = channel
.map_response("UC2DjFE7Xf11URZqWBigcVOQ", Language::En, None)
.unwrap();
assert!(
map_res.warnings.is_empty(),
"deserialization/mapping warnings: {:?}",
map_res.warnings
);
insta::assert_ron_snapshot!("map_channel_playlists_cont", map_res.c);
}
#[test] #[test]
fn map_channel_info() { fn map_channel_info() {
let json_path = Path::new("testfiles/channel/channel_info.json"); let json_path = Path::new("testfiles/channel/channel_info.json");

View file

@ -1,10 +1,83 @@
use crate::error::Error; use crate::error::{Error, ExtractionError};
use crate::model::{ use crate::model::{
ChannelPlaylist, ChannelVideo, Comment, Paginator, PlaylistVideo, RecommendedVideo, SearchItem, Comment, ContinuationEndpoint, Paginator, PlaylistVideo, RecommendedVideo, SearchVideo,
SearchVideo, YouTubeItem,
}; };
use crate::serializer::MapResult;
use crate::util::TryRemove;
use super::RustyPipeQuery; use super::{response, ClientType, MapResponse, QContinuation, RustyPipeQuery};
impl RustyPipeQuery {
pub async fn continuation<T: TryFrom<YouTubeItem>>(
self,
ctoken: &str,
endpoint: ContinuationEndpoint,
) -> Result<Paginator<T>, Error> {
let context = self.get_context(ClientType::Desktop, true).await;
let request_body = QContinuation {
context,
continuation: ctoken,
};
let p = self
.execute_request::<response::Continuation, Paginator<YouTubeItem>, _>(
ClientType::Desktop,
"continuation",
ctoken,
endpoint.as_str(),
&request_body,
)
.await?;
Ok(Paginator {
count: p.count,
items: p
.items
.into_iter()
.filter_map(|item| T::try_from(item).ok())
.collect(),
ctoken: p.ctoken,
visitor_data: p.visitor_data,
endpoint,
})
}
}
impl<T: TryFrom<YouTubeItem>> MapResponse<Paginator<T>> for response::Continuation {
fn map_response(
self,
_id: &str,
lang: crate::param::Language,
_deobf: Option<&crate::deobfuscate::Deobfuscator>,
) -> Result<MapResult<Paginator<T>>, ExtractionError> {
let mut actions = self.on_response_received_actions;
let items = some_or_bail!(
actions.try_swap_remove(0),
Err(ExtractionError::InvalidData(
"no item section renderer".into()
))
)
.append_continuation_items_action
.continuation_items;
let mut mapper = response::YouTubeListMapper::<YouTubeItem>::new(lang);
mapper.map_response(items);
Ok(MapResult {
c: Paginator::new(
self.estimated_results,
mapper
.items
.into_iter()
.filter_map(|item| T::try_from(item).ok())
.collect(),
mapper.ctoken,
),
warnings: mapper.warnings,
})
}
}
macro_rules! paginator { macro_rules! paginator {
($entity_type:ty, $cont_function:path) => { ($entity_type:ty, $cont_function:path) => {
@ -62,15 +135,10 @@ macro_rules! paginator {
}; };
} }
paginator!(Comment, RustyPipeQuery::video_comments);
paginator!(PlaylistVideo, RustyPipeQuery::playlist_continuation); paginator!(PlaylistVideo, RustyPipeQuery::playlist_continuation);
paginator!(RecommendedVideo, RustyPipeQuery::video_recommendations); paginator!(RecommendedVideo, RustyPipeQuery::video_recommendations);
paginator!(Comment, RustyPipeQuery::video_comments);
paginator!(ChannelVideo, RustyPipeQuery::channel_videos_continuation);
paginator!(
ChannelPlaylist,
RustyPipeQuery::channel_playlists_continuation
);
paginator!(SearchItem, RustyPipeQuery::search_continuation);
impl Paginator<SearchVideo> { impl Paginator<SearchVideo> {
pub async fn next(&self, query: RustyPipeQuery) -> Result<Option<Self>, Error> { pub async fn next(&self, query: RustyPipeQuery) -> Result<Option<Self>, Error> {
@ -125,3 +193,111 @@ impl Paginator<SearchVideo> {
Ok(()) Ok(())
} }
} }
impl<T: TryFrom<YouTubeItem>> Paginator<T> {
pub async fn next(&self, query: RustyPipeQuery) -> Result<Option<Self>, Error> {
Ok(match &self.ctoken {
Some(ctoken) => Some(query.continuation(ctoken, self.endpoint).await?),
_ => None,
})
}
pub async fn extend(&mut self, query: RustyPipeQuery) -> Result<bool, Error> {
match self.next(query).await {
Ok(Some(paginator)) => {
let mut items = paginator.items;
self.items.append(&mut items);
self.ctoken = paginator.ctoken;
Ok(true)
}
Ok(None) => Ok(false),
Err(e) => Err(e),
}
}
pub async fn extend_pages(
&mut self,
query: RustyPipeQuery,
n_pages: usize,
) -> Result<(), Error> {
for _ in 0..n_pages {
match self.extend(query.clone()).await {
Ok(false) => break,
Err(e) => return Err(e),
_ => {}
}
}
Ok(())
}
pub async fn extend_limit(
&mut self,
query: RustyPipeQuery,
n_items: usize,
) -> Result<(), Error> {
while self.items.len() < n_items {
match self.extend(query.clone()).await {
Ok(false) => break,
Err(e) => return Err(e),
_ => {}
}
}
Ok(())
}
}
#[cfg(test)]
mod tests {
use std::{fs::File, io::BufReader, path::Path};
use rstest::rstest;
use crate::{
client::{response, MapResponse},
model::{Paginator, PlaylistItem, YouTubeItem},
param::Language,
serializer::MapResult,
};
#[rstest]
#[case("search", "search/cont")]
fn map_continuation_items(#[case] name: &str, #[case] path: &str) {
let filename = format!("testfiles/{}.json", path);
let json_path = Path::new(&filename);
let json_file = File::open(json_path).unwrap();
let items: response::Continuation =
serde_json::from_reader(BufReader::new(json_file)).unwrap();
let map_res: MapResult<Paginator<YouTubeItem>> =
items.map_response("", Language::En, None).unwrap();
assert!(
map_res.warnings.is_empty(),
"deserialization/mapping warnings: {:?}",
map_res.warnings
);
insta::assert_ron_snapshot!(format!("map_cont_{}", name), map_res.c, {
".items.*.publish_date" => "[date]",
});
}
#[rstest]
#[case("channel_playlists", "channel/channel_playlists_cont")]
fn map_continuation_playlists(#[case] name: &str, #[case] path: &str) {
let filename = format!("testfiles/{}.json", path);
let json_path = Path::new(&filename);
let json_file = File::open(json_path).unwrap();
let items: response::Continuation =
serde_json::from_reader(BufReader::new(json_file)).unwrap();
let map_res: MapResult<Paginator<PlaylistItem>> =
items.map_response("", Language::En, None).unwrap();
assert!(
map_res.warnings.is_empty(),
"deserialization/mapping warnings: {:?}",
map_res.warnings
);
insta::assert_ron_snapshot!(format!("map_cont_{}", name), map_res.c);
}
}

View file

@ -3,9 +3,9 @@ use serde_with::serde_as;
use serde_with::{DefaultOnError, VecSkipError}; use serde_with::{DefaultOnError, VecSkipError};
use super::url_endpoint::NavigationEndpoint; use super::url_endpoint::NavigationEndpoint;
use super::Thumbnails;
use super::{Alert, ChannelBadge}; use super::{Alert, ChannelBadge};
use super::{ContentRenderer, ContentsRenderer, VideoListItem}; use super::{ContentRenderer, ContentsRenderer};
use super::{Thumbnails, YouTubeListItem};
use crate::serializer::ignore_any; use crate::serializer::ignore_any;
use crate::serializer::{text::Text, MapResult, VecLogError}; use crate::serializer::{text::Text, MapResult, VecLogError};
@ -83,7 +83,7 @@ pub struct SectionListRenderer {
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct RichGridRenderer { pub struct RichGridRenderer {
#[serde_as(as = "VecLogError<_>")] #[serde_as(as = "VecLogError<_>")]
pub contents: MapResult<Vec<VideoListItem>>, pub contents: MapResult<Vec<YouTubeListItem>>,
/// - **Videos**: browse-feedUC2DjFE7Xf11URZqWBigcVOQvideos (...) /// - **Videos**: browse-feedUC2DjFE7Xf11URZqWBigcVOQvideos (...)
/// - **Playlists**: browse-feedUC2DjFE7Xf11URZqWBigcVOQplaylists104 (...) /// - **Playlists**: browse-feedUC2DjFE7Xf11URZqWBigcVOQplaylists104 (...)
/// - **Info**: None /// - **Info**: None
@ -102,7 +102,7 @@ pub struct ItemSectionRendererWrap {
pub enum ChannelContent { pub enum ChannelContent {
GridRenderer { GridRenderer {
#[serde_as(as = "VecLogError<_>")] #[serde_as(as = "VecLogError<_>")]
items: MapResult<Vec<VideoListItem>>, items: MapResult<Vec<YouTubeListItem>>,
}, },
ChannelAboutFullMetadataRenderer(ChannelFullMetadata), ChannelAboutFullMetadataRenderer(ChannelFullMetadata),
#[default] #[default]
@ -217,5 +217,5 @@ pub struct OnResponseReceivedAction {
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct AppendAction { pub struct AppendAction {
#[serde_as(as = "VecLogError<_>")] #[serde_as(as = "VecLogError<_>")]
pub continuation_items: MapResult<Vec<VideoListItem>>, pub continuation_items: MapResult<Vec<YouTubeListItem>>,
} }

View file

@ -6,6 +6,7 @@ pub mod search;
pub mod trends; pub mod trends;
pub mod url_endpoint; pub mod url_endpoint;
pub mod video_details; pub mod video_details;
pub mod video_item;
pub use channel::Channel; pub use channel::Channel;
pub use channel::ChannelCont; pub use channel::ChannelCont;
@ -22,6 +23,8 @@ pub use url_endpoint::ResolvedUrl;
pub use video_details::VideoComments; pub use video_details::VideoComments;
pub use video_details::VideoDetails; pub use video_details::VideoDetails;
pub use video_details::VideoRecommendations; pub use video_details::VideoRecommendations;
pub use video_item::YouTubeListItem;
pub use video_item::YouTubeListMapper;
#[cfg(feature = "rss")] #[cfg(feature = "rss")]
pub mod channel_rss; pub mod channel_rss;
@ -488,6 +491,34 @@ pub struct ChildVideoRenderer {
pub length_text: Option<String>, pub length_text: Option<String>,
} }
// CONTINUATION
#[serde_as]
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Continuation {
/// Number of search results
#[serde_as(as = "Option<JsonString>")]
pub estimated_results: Option<u64>,
#[serde(alias = "onResponseReceivedCommands")]
#[serde_as(as = "VecSkipError<_>")]
pub on_response_received_actions: Vec<ContinuationActionWrap>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ContinuationActionWrap {
pub append_continuation_items_action: ContinuationAction,
}
#[serde_as]
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ContinuationAction {
#[serde_as(as = "VecLogError<_>")]
pub continuation_items: MapResult<Vec<YouTubeListItem>>,
}
// YouTube Music // YouTube Music
#[serde_as] #[serde_as]

View file

@ -5,6 +5,7 @@ use serde_with::{serde_as, VecSkipError};
use crate::serializer::ignore_any; use crate::serializer::ignore_any;
use crate::serializer::{text::Text, MapResult, VecLogError}; use crate::serializer::{text::Text, MapResult, VecLogError};
use super::video_item::YouTubeListItem;
use super::{ use super::{
ChannelRenderer, ContentsRenderer, ContinuationEndpoint, PlaylistRenderer, VideoRenderer, ChannelRenderer, ContentsRenderer, ContinuationEndpoint, PlaylistRenderer, VideoRenderer,
}; };
@ -65,7 +66,7 @@ pub enum SectionListItem {
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
ItemSectionRenderer { ItemSectionRenderer {
#[serde_as(as = "VecLogError<_>")] #[serde_as(as = "VecLogError<_>")]
contents: MapResult<Vec<SearchItem>>, contents: MapResult<Vec<YouTubeListItem>>,
}, },
/// Continuation token to fetch more search results /// Continuation token to fetch more search results
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]

View file

@ -0,0 +1,406 @@
use chrono::TimeZone;
use serde::Deserialize;
use serde_with::{json::JsonString, serde_as, VecSkipError};
use super::{
ChannelBadge, ChannelThumbnailSupportedRenderers, ContinuationEndpoint,
DetailedMetadataSnippet, IsLive, IsShort, Thumbnails, TimeOverlay, UpcomingEventData,
VideoBadge,
};
use crate::{
model::{ChannelId, ChannelItem, ChannelTag, PlaylistItem, VideoItem, YouTubeItem},
param::Language,
serializer::{
ignore_any,
text::{Text, TextComponent},
MapResult, VecLogError,
},
timeago,
util::{self, TryRemove},
};
#[serde_as]
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum YouTubeListItem {
#[serde(alias = "gridVideoRenderer", alias = "compactVideoRenderer")]
VideoRenderer(VideoRenderer),
#[serde(alias = "gridPlaylistRenderer")]
PlaylistRenderer(PlaylistRenderer),
ChannelRenderer(ChannelRenderer),
/// Continauation items are located at the end of a list
/// and contain the continuation token for progressive loading
#[serde(rename_all = "camelCase")]
ContinuationItemRenderer {
continuation_endpoint: ContinuationEndpoint,
},
/// Corrected search query
#[serde(rename_all = "camelCase")]
ShowingResultsForRenderer {
#[serde_as(as = "Text")]
corrected_query: String,
},
/// Contains video on startpage
///
/// Seems to be currently A/B tested on the channel page,
/// as of 11.10.2022
RichItemRenderer {
content: Box<YouTubeListItem>,
},
/// Contains search results
///
/// Seems to be currently A/B tested on the video details page,
/// as of 11.10.2022
ItemSectionRenderer {
#[serde_as(as = "VecLogError<_>")]
contents: MapResult<Vec<YouTubeListItem>>,
},
/// No video list item (e.g. ad) or unimplemented item
///
/// Unimplemented:
/// - compactPlaylistRenderer (recommended playlists)
/// - compactRadioRenderer (recommended mix)
#[serde(other, deserialize_with = "ignore_any")]
None,
}
#[serde_as]
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VideoRenderer {
pub video_id: String,
pub thumbnail: Thumbnails,
#[serde_as(as = "Text")]
pub title: String,
#[serde(rename = "shortBylineText")]
pub channel: Option<TextComponent>,
pub channel_thumbnail_supported_renderers: Option<ChannelThumbnailSupportedRenderers>,
#[serde_as(as = "Option<Text>")]
pub published_time_text: Option<String>,
#[serde_as(as = "Option<Text>")]
pub length_text: Option<String>,
/// Contains `No views` if the view count is zero
#[serde_as(as = "Option<Text>")]
pub view_count_text: Option<String>,
/// Channel verification badge
#[serde(default)]
#[serde_as(as = "VecSkipError<_>")]
pub owner_badges: Vec<ChannelBadge>,
/// Contains live tag for recommended videos
#[serde(default)]
#[serde_as(as = "VecSkipError<_>")]
pub badges: Vec<VideoBadge>,
/// Contains Short/Live tag
#[serde_as(as = "VecSkipError<_>")]
pub thumbnail_overlays: Vec<TimeOverlay>,
/// Abbreviated video description (on startpage)
#[serde_as(as = "Option<Text>")]
pub description_snippet: Option<String>,
/// Contains abbreviated video description (on search page)
#[serde_as(as = "Option<VecSkipError<_>>")]
pub detailed_metadata_snippets: Option<Vec<DetailedMetadataSnippet>>,
/// Release date for upcoming videos
pub upcoming_event_data: Option<UpcomingEventData>,
}
/// Playlist displayed in search results
#[serde_as]
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PlaylistRenderer {
pub playlist_id: String,
#[serde_as(as = "Text")]
pub title: String,
pub thumbnail: Option<Thumbnails>,
/// Used by playlists from search page
///
/// The first item of this list contains the playlist thumbnail,
/// subsequent items contain very small thumbnails of the next playlist videos
pub thumbnails: Option<Vec<Thumbnails>>,
#[serde_as(as = "Option<JsonString>")]
pub video_count: Option<u64>,
#[serde_as(as = "Option<Text>")]
pub video_count_short_text: Option<String>,
#[serde(rename = "shortBylineText")]
pub channel: Option<TextComponent>,
/// Channel verification badge
#[serde(default)]
#[serde_as(as = "VecSkipError<_>")]
pub owner_badges: Vec<ChannelBadge>,
}
/// Channel displayed in search results
#[serde_as]
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ChannelRenderer {
pub channel_id: String,
#[serde_as(as = "Text")]
pub title: String,
pub thumbnail: Thumbnails,
/// Abbreviated channel description
///
/// Not present if the channel has no description
#[serde(default)]
#[serde_as(as = "Text")]
pub description_snippet: String,
/// Not present if the channel has no videos
#[serde_as(as = "Option<Text>")]
pub video_count_text: Option<String>,
#[serde_as(as = "Option<Text>")]
pub subscriber_count_text: Option<String>,
/// Channel verification badge
#[serde(default)]
#[serde_as(as = "VecSkipError<_>")]
pub owner_badges: Vec<ChannelBadge>,
}
/// Result of mapping a list of different YouTube enities
/// (videos, channels, playlists)
#[derive(Debug)]
pub struct YouTubeListMapper<T> {
lang: Language,
pub items: Vec<T>,
pub warnings: Vec<String>,
pub ctoken: Option<String>,
pub corrected_query: Option<String>,
}
impl<T> YouTubeListMapper<T> {
pub fn new(lang: Language) -> Self {
Self {
lang,
items: Vec::new(),
warnings: Vec::new(),
ctoken: None,
corrected_query: None,
}
}
fn map_video(&self, video: VideoRenderer) -> VideoItem {
let mut tn_overlays = video.thumbnail_overlays;
let length_text = video.length_text.or_else(|| {
tn_overlays
.try_swap_remove(0)
.map(|overlay| overlay.thumbnail_overlay_time_status_renderer.text)
});
VideoItem {
id: video.video_id,
title: video.title,
length: length_text.and_then(|txt| util::parse_video_length(&txt)),
thumbnail: video.thumbnail.into(),
channel: video.channel.and_then(|c| {
ChannelId::try_from(c).ok().map(|c| ChannelTag {
id: c.id,
name: c.name,
avatar: video
.channel_thumbnail_supported_renderers
.map(|tn| tn.channel_thumbnail_with_link_renderer.thumbnail.into())
.unwrap_or_default(),
verification: video.owner_badges.into(),
subscriber_count: None,
})
}),
publish_date: video
.upcoming_event_data
.as_ref()
.map(|upc| {
chrono::Local.from_utc_datetime(&chrono::NaiveDateTime::from_timestamp(
upc.start_time,
0,
))
})
.or_else(|| {
video
.published_time_text
.as_ref()
.and_then(|txt| timeago::parse_timeago_to_dt(self.lang, txt))
}),
publish_date_txt: video.published_time_text,
view_count: video
.view_count_text
.map(|txt| util::parse_numeric(&txt).unwrap_or_default()),
is_live: tn_overlays.is_live() || video.badges.is_live(),
is_short: tn_overlays.is_short(),
is_upcoming: video.upcoming_event_data.is_some(),
short_description: video
.detailed_metadata_snippets
.and_then(|mut snippets| snippets.try_swap_remove(0).map(|s| s.snippet_text))
.or(video.description_snippet),
}
}
fn map_playlist(playlist: PlaylistRenderer) -> PlaylistItem {
PlaylistItem {
id: playlist.playlist_id,
name: playlist.title,
thumbnail: playlist
.thumbnail
.or_else(|| playlist.thumbnails.and_then(|mut t| t.try_swap_remove(0)))
.unwrap_or_default()
.into(),
channel: playlist.channel.and_then(|c| {
ChannelId::try_from(c).ok().map(|c| ChannelTag {
id: c.id,
name: c.name,
avatar: Vec::new(),
verification: playlist.owner_badges.into(),
subscriber_count: None,
})
}),
video_count: playlist.video_count.or_else(|| {
playlist
.video_count_short_text
.and_then(|txt| util::parse_numeric(&txt).ok())
}),
}
}
fn map_channel(channel: ChannelRenderer) -> ChannelItem {
ChannelItem {
id: channel.channel_id,
name: channel.title,
avatar: channel.thumbnail.into(),
verification: channel.owner_badges.into(),
subscriber_count: channel
.subscriber_count_text
.and_then(|txt| util::parse_numeric(&txt).ok()),
video_count: channel
.video_count_text
.and_then(|txt| util::parse_numeric(&txt).ok())
.unwrap_or_default(),
short_description: channel.description_snippet,
}
}
}
impl YouTubeListMapper<YouTubeItem> {
fn map_item(&mut self, item: YouTubeListItem) {
match item {
YouTubeListItem::VideoRenderer(video) => {
self.items.push(YouTubeItem::Video(self.map_video(video)));
}
YouTubeListItem::PlaylistRenderer(playlist) => self
.items
.push(YouTubeItem::Playlist(Self::map_playlist(playlist))),
YouTubeListItem::ChannelRenderer(channel) => {
self.items
.push(YouTubeItem::Channel(Self::map_channel(channel)));
}
YouTubeListItem::ContinuationItemRenderer {
continuation_endpoint,
} => self.ctoken = Some(continuation_endpoint.continuation_command.token),
YouTubeListItem::ShowingResultsForRenderer { corrected_query } => {
self.corrected_query = Some(corrected_query);
}
YouTubeListItem::RichItemRenderer { content } => {
self.map_item(*content);
}
YouTubeListItem::ItemSectionRenderer { mut contents } => {
self.warnings.append(&mut contents.warnings);
contents.c.into_iter().for_each(|it| self.map_item(it));
}
YouTubeListItem::None => {}
}
}
pub fn map_response(&mut self, mut res: MapResult<Vec<YouTubeListItem>>) {
self.warnings.append(&mut res.warnings);
res.c.into_iter().for_each(|item| self.map_item(item));
}
}
impl YouTubeListMapper<VideoItem> {
fn map_item(&mut self, item: YouTubeListItem) {
match item {
YouTubeListItem::VideoRenderer(video) => {
self.items.push(self.map_video(video));
}
YouTubeListItem::ContinuationItemRenderer {
continuation_endpoint,
} => self.ctoken = Some(continuation_endpoint.continuation_command.token),
YouTubeListItem::ShowingResultsForRenderer { corrected_query } => {
self.corrected_query = Some(corrected_query);
}
YouTubeListItem::RichItemRenderer { content } => {
self.map_item(*content);
}
YouTubeListItem::ItemSectionRenderer { mut contents } => {
self.warnings.append(&mut contents.warnings);
contents.c.into_iter().for_each(|it| self.map_item(it));
}
_ => {}
}
}
pub fn map_response(&mut self, mut res: MapResult<Vec<YouTubeListItem>>) {
self.warnings.append(&mut res.warnings);
res.c.into_iter().for_each(|item| self.map_item(item));
}
}
impl YouTubeListMapper<PlaylistItem> {
fn map_item(&mut self, item: YouTubeListItem) {
match item {
YouTubeListItem::PlaylistRenderer(playlist) => {
self.items.push(Self::map_playlist(playlist))
}
YouTubeListItem::ContinuationItemRenderer {
continuation_endpoint,
} => self.ctoken = Some(continuation_endpoint.continuation_command.token),
YouTubeListItem::ShowingResultsForRenderer { corrected_query } => {
self.corrected_query = Some(corrected_query);
}
YouTubeListItem::RichItemRenderer { content } => {
self.map_item(*content);
}
YouTubeListItem::ItemSectionRenderer { mut contents } => {
self.warnings.append(&mut contents.warnings);
contents.c.into_iter().for_each(|it| self.map_item(it));
}
_ => {}
}
}
pub fn map_response(&mut self, mut res: MapResult<Vec<YouTubeListItem>>) {
self.warnings.append(&mut res.warnings);
res.c.into_iter().for_each(|item| self.map_item(item));
}
}
impl YouTubeListMapper<ChannelItem> {
fn map_item(&mut self, item: YouTubeListItem) {
match item {
YouTubeListItem::ChannelRenderer(channel) => {
self.items.push(Self::map_channel(channel));
}
YouTubeListItem::ContinuationItemRenderer {
continuation_endpoint,
} => self.ctoken = Some(continuation_endpoint.continuation_command.token),
YouTubeListItem::ShowingResultsForRenderer { corrected_query } => {
self.corrected_query = Some(corrected_query);
}
YouTubeListItem::RichItemRenderer { content } => {
self.map_item(*content);
}
YouTubeListItem::ItemSectionRenderer { mut contents } => {
self.warnings.append(&mut contents.warnings);
contents.c.into_iter().for_each(|it| self.map_item(it));
}
_ => {}
}
}
pub fn map_response(&mut self, mut res: MapResult<Vec<YouTubeListItem>>) {
self.warnings.append(&mut res.warnings);
res.c.into_iter().for_each(|item| self.map_item(item));
}
}

View file

@ -3,15 +3,11 @@ use serde::{de::IgnoredAny, Serialize};
use crate::{ use crate::{
deobfuscate::Deobfuscator, deobfuscate::Deobfuscator,
error::{Error, ExtractionError}, error::{Error, ExtractionError},
model::{Paginator, SearchItem, SearchResult, SearchVideo}, model::{Paginator, SearchResult, YouTubeItem},
param::{search_filter::SearchFilter, Language}, param::{search_filter::SearchFilter, Language},
util::TryRemove,
}; };
use super::{ use super::{response, ClientType, MapResponse, MapResult, RustyPipeQuery, YTContext};
response::{self, TryFromWLang},
ClientType, MapResponse, MapResult, QContinuation, RustyPipeQuery, YTContext,
};
#[derive(Debug, Serialize)] #[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
@ -63,23 +59,6 @@ impl RustyPipeQuery {
.await .await
} }
pub async fn search_continuation(self, ctoken: &str) -> Result<Paginator<SearchItem>, Error> {
let context = self.get_context(ClientType::Desktop, true).await;
let request_body = QContinuation {
context,
continuation: ctoken,
};
self.execute_request::<response::SearchCont, _, _>(
ClientType::Desktop,
"search_continuation",
ctoken,
"search",
&request_body,
)
.await
}
pub async fn search_suggestion(self, query: &str) -> Result<Vec<String>, Error> { pub async fn search_suggestion(self, query: &str) -> Result<Vec<String>, Error> {
let url = url::Url::parse_with_params("https://suggestqueries-clients6.youtube.com/complete/search?client=youtube&gs_rn=64&gs_ri=youtube&ds=yt&cp=1&gs_id=4&xhr=t&xssi=t", let url = url::Url::parse_with_params("https://suggestqueries-clients6.youtube.com/complete/search?client=youtube&gs_rn=64&gs_ri=youtube&ds=yt&cp=1&gs_id=4&xhr=t&xssi=t",
&[("hl", self.opts.lang.to_string()), ("gl", self.opts.country.to_string()), ("q", query.to_string())] &[("hl", self.opts.lang.to_string()), ("gl", self.opts.country.to_string()), ("q", query.to_string())]
@ -123,55 +102,22 @@ impl MapResponse<SearchResult> for response::Search {
let (items, ctoken) = map_section_list_items(section_list_items)?; let (items, ctoken) = map_section_list_items(section_list_items)?;
let mut warnings = items.warnings; let mut mapper = response::YouTubeListMapper::<YouTubeItem>::new(lang);
let (mut mapped, corrected_query) = map_search_items(items.c, lang); mapper.map_response(items);
warnings.append(&mut mapped.warnings);
Ok(MapResult { Ok(MapResult {
c: SearchResult { c: SearchResult {
items: Paginator::new(self.estimated_results, mapped.c, ctoken), items: Paginator::new(self.estimated_results, mapper.items, ctoken),
corrected_query, corrected_query: mapper.corrected_query,
}, },
warnings, warnings: mapper.warnings,
})
}
}
impl MapResponse<Paginator<SearchItem>> for response::SearchCont {
fn map_response(
self,
_id: &str,
lang: Language,
_deobf: Option<&Deobfuscator>,
) -> Result<MapResult<Paginator<SearchItem>>, ExtractionError> {
let mut commands = self.on_response_received_commands;
let cont_command = some_or_bail!(
commands.try_swap_remove(0),
Err(ExtractionError::InvalidData(
"no item section renderer".into()
))
);
let (items, ctoken) = map_section_list_items(
cont_command
.append_continuation_items_action
.continuation_items,
)?;
let mut warnings = items.warnings;
let (mut mapped, _) = map_search_items(items.c, lang);
warnings.append(&mut mapped.warnings);
Ok(MapResult {
c: Paginator::new(self.estimated_results, mapped.c, ctoken),
warnings,
}) })
} }
} }
fn map_section_list_items( fn map_section_list_items(
section_list_items: Vec<response::search::SectionListItem>, section_list_items: Vec<response::search::SectionListItem>,
) -> Result<(MapResult<Vec<response::search::SearchItem>>, Option<String>), ExtractionError> { ) -> Result<(MapResult<Vec<response::YouTubeListItem>>, Option<String>), ExtractionError> {
let mut items = None; let mut items = None;
let mut ctoken = None; let mut ctoken = None;
section_list_items.into_iter().for_each(|item| match item { section_list_items.into_iter().for_each(|item| match item {
@ -195,54 +141,13 @@ fn map_section_list_items(
Ok((items, ctoken)) Ok((items, ctoken))
} }
fn map_search_items(
items: Vec<response::search::SearchItem>,
lang: Language,
) -> (MapResult<Vec<SearchItem>>, Option<String>) {
let mut warnings = Vec::new();
let mut c_query = None;
let mapped_items = items
.into_iter()
.filter_map(|item| match item {
response::search::SearchItem::VideoRenderer(video) => {
match SearchVideo::from_w_lang(video, lang) {
Ok(video) => Some(SearchItem::Video(video)),
Err(e) => {
warnings.push(e.to_string());
None
}
}
}
response::search::SearchItem::PlaylistRenderer(playlist) => {
Some(SearchItem::Playlist(playlist.into()))
}
response::search::SearchItem::ChannelRenderer(channel) => {
Some(SearchItem::Channel(channel.into()))
}
response::search::SearchItem::ShowingResultsForRenderer { corrected_query } => {
c_query = Some(corrected_query);
None
}
response::search::SearchItem::None => None,
})
.collect();
(
MapResult {
c: mapped_items,
warnings,
},
c_query,
)
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::{fs::File, io::BufReader, path::Path}; use std::{fs::File, io::BufReader, path::Path};
use crate::{ use crate::{
client::{response, MapResponse}, client::{response, MapResponse},
model::{Paginator, SearchItem, SearchResult}, model::SearchResult,
param::Language, param::Language,
serializer::MapResult, serializer::MapResult,
}; };
@ -271,26 +176,4 @@ mod tests {
".items.items.*.publish_date" => "[date]", ".items.items.*.publish_date" => "[date]",
}); });
} }
#[test]
fn t_map_search_cont() {
let filename = format!("testfiles/search/cont.json");
let json_path = Path::new(&filename);
let json_file = File::open(json_path).unwrap();
let search_cont: response::SearchCont =
serde_json::from_reader(BufReader::new(json_file)).unwrap();
let map_res: MapResult<Paginator<SearchItem>> =
search_cont.map_response("", Language::En, None).unwrap();
assert!(
map_res.warnings.is_empty(),
"deserialization/mapping warnings: {:?}",
map_res.warnings
);
insta::assert_ron_snapshot!("map_search_cont", map_res.c, {
".items.*.publish_date" => "[date]",
});
}
} }

View file

@ -144,7 +144,7 @@ Channel(
content: Paginator( content: Paginator(
count: None, count: None,
items: [ items: [
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHtOV3AEwhuea4TnviddKfAj", id: "PLvOlSehNtuHtOV3AEwhuea4TnviddKfAj",
name: "MacGyver Project", name: "MacGyver Project",
thumbnail: [ thumbnail: [
@ -154,9 +154,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(2), video_count: Some(2),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHuvHE5GQrQJxWXHdmW2l5IF", id: "PLvOlSehNtuHuvHE5GQrQJxWXHdmW2l5IF",
name: "Calculators", name: "Calculators",
thumbnail: [ thumbnail: [
@ -166,9 +167,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(1), video_count: Some(1),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHs6wRwVSaErU0BEnLiHfnKJ", id: "PLvOlSehNtuHs6wRwVSaErU0BEnLiHfnKJ",
name: "BM235", name: "BM235",
thumbnail: [ thumbnail: [
@ -178,9 +180,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(9), video_count: Some(9),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHu4k0ZkKFLsysSB5iava6Qu", id: "PLvOlSehNtuHu4k0ZkKFLsysSB5iava6Qu",
name: "Vibration Measurement", name: "Vibration Measurement",
thumbnail: [ thumbnail: [
@ -190,9 +193,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(2), video_count: Some(2),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHtdQF-m5UFZ5GEjABadI3kI", id: "PLvOlSehNtuHtdQF-m5UFZ5GEjABadI3kI",
name: "Component Selection", name: "Component Selection",
thumbnail: [ thumbnail: [
@ -202,9 +206,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(4), video_count: Some(4),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHtlndPUSOPgsujUdq1c5Mr9", id: "PLvOlSehNtuHtlndPUSOPgsujUdq1c5Mr9",
name: "Solar Roadways", name: "Solar Roadways",
thumbnail: [ thumbnail: [
@ -214,9 +219,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(18), video_count: Some(18),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvD6M_7WeN071OVsZFE0_q-", id: "PLvOlSehNtuHvD6M_7WeN071OVsZFE0_q-",
name: "Electronics Tutorials - AC Theory Series", name: "Electronics Tutorials - AC Theory Series",
thumbnail: [ thumbnail: [
@ -226,9 +232,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(3), video_count: Some(3),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHtVLq2MDPIz82BWMIZcuwhK", id: "PLvOlSehNtuHtVLq2MDPIz82BWMIZcuwhK",
name: "Electronics Tutorial - DC Fundamentals", name: "Electronics Tutorial - DC Fundamentals",
thumbnail: [ thumbnail: [
@ -238,9 +245,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(8), video_count: Some(8),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvIDfW3x2p4BY6l4RYgfBJE", id: "PLvOlSehNtuHvIDfW3x2p4BY6l4RYgfBJE",
name: "Oscilloscope Probing", name: "Oscilloscope Probing",
thumbnail: [ thumbnail: [
@ -250,9 +258,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(13), video_count: Some(13),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHu6Jjb8U82eKQfvKhJVl0Bu", id: "PLvOlSehNtuHu6Jjb8U82eKQfvKhJVl0Bu",
name: "Thermal Design", name: "Thermal Design",
thumbnail: [ thumbnail: [
@ -262,9 +271,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(9), video_count: Some(9),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHs-X2Awg33PCBNrP2BGFVhC", id: "PLvOlSehNtuHs-X2Awg33PCBNrP2BGFVhC",
name: "Electric Cars", name: "Electric Cars",
thumbnail: [ thumbnail: [
@ -274,9 +284,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(7), video_count: Some(7),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHuLODLTeq3PM-OJRP2nzNUa", id: "PLvOlSehNtuHuLODLTeq3PM-OJRP2nzNUa",
name: "Designing a better uCurrent", name: "Designing a better uCurrent",
thumbnail: [ thumbnail: [
@ -286,9 +297,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(3), video_count: Some(3),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHtvTKP4RTNW1-08Kmzy1pvA", id: "PLvOlSehNtuHtvTKP4RTNW1-08Kmzy1pvA",
name: "EMC Compliance & Measurement", name: "EMC Compliance & Measurement",
thumbnail: [ thumbnail: [
@ -298,9 +310,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(8), video_count: Some(8),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHuUTpCrTVX7BdU68l2aVqMv", id: "PLvOlSehNtuHuUTpCrTVX7BdU68l2aVqMv",
name: "Power Counter Display Project", name: "Power Counter Display Project",
thumbnail: [ thumbnail: [
@ -310,9 +323,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(2), video_count: Some(2),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvm120Tq40nKrM5SUBlolN3", id: "PLvOlSehNtuHvm120Tq40nKrM5SUBlolN3",
name: "Live - Ask Dave", name: "Live - Ask Dave",
thumbnail: [ thumbnail: [
@ -322,9 +336,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(3), video_count: Some(3),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHsiF93KOLoF1KAHArmIW9lC", id: "PLvOlSehNtuHsiF93KOLoF1KAHArmIW9lC",
name: "Padauk Microcontroller", name: "Padauk Microcontroller",
thumbnail: [ thumbnail: [
@ -334,9 +349,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(10), video_count: Some(10),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvxTzBLwUFw4My4rtrNFzED", id: "PLvOlSehNtuHvxTzBLwUFw4My4rtrNFzED",
name: "Other Debunking Videos", name: "Other Debunking Videos",
thumbnail: [ thumbnail: [
@ -346,9 +362,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(1), video_count: Some(1),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHt2pJ7X5tumuM4Wa3r1OC7Q", id: "PLvOlSehNtuHt2pJ7X5tumuM4Wa3r1OC7Q",
name: "Audio & Speakers", name: "Audio & Speakers",
thumbnail: [ thumbnail: [
@ -358,9 +375,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(9), video_count: Some(9),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHtX7OearWdmqGzqiu4DHKWi", id: "PLvOlSehNtuHtX7OearWdmqGzqiu4DHKWi",
name: "Cameras", name: "Cameras",
thumbnail: [ thumbnail: [
@ -370,9 +388,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(16), video_count: Some(16),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHu-TaNRp27_PiXjBG5wY9Gv", id: "PLvOlSehNtuHu-TaNRp27_PiXjBG5wY9Gv",
name: "Cryptocurrency", name: "Cryptocurrency",
thumbnail: [ thumbnail: [
@ -382,9 +401,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(7), video_count: Some(7),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvmK-VGcZ33ZuATmcNB8tvH", id: "PLvOlSehNtuHvmK-VGcZ33ZuATmcNB8tvH",
name: "LCD Tutorial", name: "LCD Tutorial",
thumbnail: [ thumbnail: [
@ -394,9 +414,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(6), video_count: Some(6),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvbV8x_bWQBKEg4IshWjG3U", id: "PLvOlSehNtuHvbV8x_bWQBKEg4IshWjG3U",
name: "Guest Videos", name: "Guest Videos",
thumbnail: [ thumbnail: [
@ -406,9 +427,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(12), video_count: Some(12),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHs5tuhiqdxQeegsLDP7TM8V", id: "PLvOlSehNtuHs5tuhiqdxQeegsLDP7TM8V",
name: "Software Development", name: "Software Development",
thumbnail: [ thumbnail: [
@ -418,9 +440,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(1), video_count: Some(1),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHu328BlpUOUDsv9Kf1Ri8Tg", id: "PLvOlSehNtuHu328BlpUOUDsv9Kf1Ri8Tg",
name: "John Kenny - Keysight", name: "John Kenny - Keysight",
thumbnail: [ thumbnail: [
@ -430,9 +453,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(5), video_count: Some(5),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvj_E5KUBluJJupXmideiZk", id: "PLvOlSehNtuHvj_E5KUBluJJupXmideiZk",
name: "General Tech Information", name: "General Tech Information",
thumbnail: [ thumbnail: [
@ -442,9 +466,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(2), video_count: Some(2),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHsWHPg1KlSd8agKbrcn3Dwn", id: "PLvOlSehNtuHsWHPg1KlSd8agKbrcn3Dwn",
name: "Microscope", name: "Microscope",
thumbnail: [ thumbnail: [
@ -454,9 +479,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(4), video_count: Some(4),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHuQb5djEVLzwBSTT27p2dXB", id: "PLvOlSehNtuHuQb5djEVLzwBSTT27p2dXB",
name: "The Signal Path", name: "The Signal Path",
thumbnail: [ thumbnail: [
@ -466,9 +492,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(1), video_count: Some(1),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHstMIbtLqlEiidVjj8ob0xp", id: "PLvOlSehNtuHstMIbtLqlEiidVjj8ob0xp",
name: "Thermal Imaging", name: "Thermal Imaging",
thumbnail: [ thumbnail: [
@ -478,9 +505,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(2), video_count: Some(2),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHugqRHdt46SN9Bmoh-D5Gp2", id: "PLvOlSehNtuHugqRHdt46SN9Bmoh-D5Gp2",
name: "EEVacademy", name: "EEVacademy",
thumbnail: [ thumbnail: [
@ -490,9 +518,10 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(9), video_count: Some(9),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHtqqYM7ON99sbyiokMKrwwI", id: "PLvOlSehNtuHtqqYM7ON99sbyiokMKrwwI",
name: "Brainstorming", name: "Brainstorming",
thumbnail: [ thumbnail: [
@ -502,9 +531,11 @@ Channel(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(1), video_count: Some(1),
), ),
], ],
ctoken: Some("4qmFsgLCARIYVUMyRGpGRTdYZjExVVJacVdCaWdjVk9RGnRFZ2x3YkdGNWJHbHpkSE1ZQXlBQk1BRTRBZW9EUEVOblRrUlJhbEZUU2tKSmFWVkZlREpVTW5oVVdsZG9UMlJJVmtsa1NFWjRWMVV3TTFRd05EVlBXRTVwWlZkc2RtRXdNVXhqYm1RelUxTm5PQSUzRCUzRJoCL2Jyb3dzZS1mZWVkVUMyRGpGRTdYZjExVVJacVdCaWdjVk9RcGxheWxpc3RzMTA0"), ctoken: Some("4qmFsgLCARIYVUMyRGpGRTdYZjExVVJacVdCaWdjVk9RGnRFZ2x3YkdGNWJHbHpkSE1ZQXlBQk1BRTRBZW9EUEVOblRrUlJhbEZUU2tKSmFWVkZlREpVTW5oVVdsZG9UMlJJVmtsa1NFWjRWMVV3TTFRd05EVlBXRTVwWlZkc2RtRXdNVXhqYm1RelUxTm5PQSUzRCUzRJoCL2Jyb3dzZS1mZWVkVUMyRGpGRTdYZjExVVJacVdCaWdjVk9RcGxheWxpc3RzMTA0"),
endpoint: browse,
), ),
) )

View file

@ -115,7 +115,7 @@ Channel(
content: Paginator( content: Paginator(
count: None, count: None,
items: [ items: [
ChannelVideo( VideoItem(
id: "EIcmfSzeaKk", id: "EIcmfSzeaKk",
title: "our new normal", title: "our new normal",
length: Some(1106), length: Some(1106),
@ -141,14 +141,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("9 hours ago"), publish_date_txt: Some("9 hours ago"),
view_count: 142423, view_count: Some(142423),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("I\'ve been really enjoying cooking more lately (′ꈍωꈍ‵)\nWas so cool to see my makgeolli fermenting, I can\'t wait to show you the progress update in my next vlog. \n\nThank you again doobies!..."),
), ),
ChannelVideo( VideoItem(
id: "9NuhKCv3crg", id: "9NuhKCv3crg",
title: "the end.", title: "the end.",
length: Some(982), length: Some(982),
@ -174,14 +176,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 days ago"), publish_date_txt: Some("7 days ago"),
view_count: 989763, view_count: Some(989763),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("or the start of something new~~~~~\n\nThank you for your patience on the vlog, it took some time to adjust to my new normal. Excited for change and I\'ll always try my best to make the best content..."),
), ),
ChannelVideo( VideoItem(
id: "38Gd6TdmNVs", id: "38Gd6TdmNVs",
title: "KOREAN BARBECUE l doob gourmand ep.3", title: "KOREAN BARBECUE l doob gourmand ep.3",
length: Some(525), length: Some(525),
@ -207,14 +211,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 weeks ago"), publish_date_txt: Some("2 weeks ago"),
view_count: 355470, view_count: Some(355470),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: 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 seeing in these series! :)\n\nLove you doobies!\n\nInstagram @doobydobap..."),
), ),
ChannelVideo( VideoItem(
id: "l9TiwunjzgA", id: "l9TiwunjzgA",
title: "long distance", title: "long distance",
length: Some(1043), length: Some(1043),
@ -240,14 +246,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 weeks ago"), publish_date_txt: Some("3 weeks ago"),
view_count: 697188, view_count: Some(697188),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("exciting changes are about to come! \ndoob gourmand kbbq coming out on Thursday this week :)\n\nInstagram @doobydobap \nJoin my discord! 😈\nhttps://discord.gg/doobyverse\nwww.doobydobap.com for..."),
), ),
ChannelVideo( VideoItem(
id: "pRVSdUxdsVw", id: "pRVSdUxdsVw",
title: "Repairing...", title: "Repairing...",
length: Some(965), length: Some(965),
@ -273,14 +281,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 weeks ago"), publish_date_txt: Some("4 weeks ago"),
view_count: 529586, view_count: Some(529586),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("The word repair stems from the Latin word reparare, from re- back and parare make ready.\' And I feel that\'s exactly how I feel about this week\'s vlog-- I feel like I\'m repairing my..."),
), ),
ChannelVideo( VideoItem(
id: "2FJVhdOO0F0", id: "2FJVhdOO0F0",
title: "a health scare", title: "a health scare",
length: Some(1238), length: Some(1238),
@ -306,14 +316,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 1066729, view_count: Some(1066729),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("https://www.nationalbreastcancer.org/about-breast-cancer/\nI\'m really thankful that my results came out okay. This really was one of the worst / scariest weeks of my life, but an important one..."),
), ),
ChannelVideo( VideoItem(
id: "CutR_1SDDzY", id: "CutR_1SDDzY",
title: "feels good to be back", title: "feels good to be back",
length: Some(1159), length: Some(1159),
@ -339,14 +351,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 525663, view_count: Some(525663),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("I missed you guys. Happy to see you guys back. \nI\'ve really been working on my mental health, educating myself with different food cultures, and focusing on being happy the last month. \nThank..."),
), ),
ChannelVideo( VideoItem(
id: "KUz7oArksR4", id: "KUz7oArksR4",
title: "running away", title: "running away",
length: Some(1023), length: Some(1023),
@ -372,14 +386,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 717806, view_count: Some(717806),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("for now... more adventures to come! \n\n\n\n\nMusic by Mark Generous - A Summer Day - https://thmatc.co/?l=CF6C5FFF\nInstagram @doobydobap \nJoin my discord! 😈\nhttps://discord.gg/doobyverse\nwww.doobyd..."),
), ),
ChannelVideo( VideoItem(
id: "sPb2gyN-hnE", id: "sPb2gyN-hnE",
title: "worth fighting for", title: "worth fighting for",
length: Some(1232), length: Some(1232),
@ -405,14 +421,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 624673, view_count: Some(624673),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Please be respectful in the comments section! \nI will not be tolerating any hateful/derogatory speech 👹👹👹 *barking noise*\n\nMusic \nMarie - Howard Harper-Barnes\nMusic by Monét Ngo -..."),
), ),
ChannelVideo( VideoItem(
id: "PXsK9-CFoH4", id: "PXsK9-CFoH4",
title: "waiting...", title: "waiting...",
length: Some(1455), length: Some(1455),
@ -438,14 +456,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 924135, view_count: Some(924135),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("👀☂\u{fe0f}🕴\u{fe0f}\ntuna kimchi jook \n2 cups cooked rice \n3 cups water \n1 cup kimchi \n320g canned tuna \n1 tbsp perilla seed oil \n1 onion\n1 tbsp gochujang\n1 tbsp soy sauce \n½ tsp salt (to taste)..."),
), ),
ChannelVideo( VideoItem(
id: "r2ye6zW0nbM", id: "r2ye6zW0nbM",
title: "a wedding", title: "a wedding",
length: Some(1207), length: Some(1207),
@ -471,14 +491,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 1053353, view_count: Some(1053353),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Ginger Pork Recipe!\nhttps://doobydobap.com/recipe/ginger-pork-shogayaki\n-\nInstagram @doobydobap \nJoin my discord! 😈\nhttps://discord.gg/doobyverse\nwww.doobydobap.com for recipes & stories..."),
), ),
ChannelVideo( VideoItem(
id: "rriwHj8U664", id: "rriwHj8U664",
title: "my seoul apartment tour", title: "my seoul apartment tour",
length: Some(721), length: Some(721),
@ -504,14 +526,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 697242, view_count: Some(697242),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Korea has an interesting rent structure called junseh where you pay a higher security deposit in turn for lower rent! And before anyone starts accusing me, no, it\'s all with my own money!!!..."),
), ),
ChannelVideo( VideoItem(
id: "FKJtrUeol3o", id: "FKJtrUeol3o",
title: "with quantity comes quality", title: "with quantity comes quality",
length: Some(1140), length: Some(1140),
@ -537,14 +561,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 1086097, view_count: Some(1086097),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("A busy, but calm week for me here in Seoul living alone. \nPlanning on exploring more parts of Korea, please let me know in the comments what you\'d wanna see!\n\nFried Eggplants with Doubanjiang..."),
), ),
ChannelVideo( VideoItem(
id: "zYHB38UlzE0", id: "zYHB38UlzE0",
title: "Q&A l relationships, burnout, privilege, college advice, living alone, and life after youtube?", title: "Q&A l relationships, burnout, privilege, college advice, living alone, and life after youtube?",
length: Some(775), length: Some(775),
@ -570,14 +596,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 528979, view_count: Some(528979),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("So many questions I wasn\'t able to answer, but if you comment below I\'ll try and answer every single one of them!!!!\n\nA little bit of audio issues, it was my first time using this mic, \nsowwy..."),
), ),
ChannelVideo( VideoItem(
id: "hGbQ2WM9nOo", id: "hGbQ2WM9nOo",
title: "Why does everything bad for you taste good ㅣ CHILI OIL RAMEN", title: "Why does everything bad for you taste good ㅣ CHILI OIL RAMEN",
length: Some(428), length: Some(428),
@ -603,14 +631,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 1036890, view_count: Some(1036890),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("https://partner.bokksu.com/doobydobap use code DOOBYDOBAP to get $15 off your first bokksu order! \n\nInstagram @doobydobap \nJoin my discord! 😈\nhttps://discord.gg/doobyverse\nwww.doobydobap.com..."),
), ),
ChannelVideo( VideoItem(
id: "PxGmP4v_A38", id: "PxGmP4v_A38",
title: "Alone and Thriving l late night korean convenience store, muji kitchenware haul, spring cleaning!", title: "Alone and Thriving l late night korean convenience store, muji kitchenware haul, spring cleaning!",
length: Some(1437), length: Some(1437),
@ -636,14 +666,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 832542, view_count: Some(832542),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("I could palpably feel how I\'m so much happier than before when I was reviewing my footage 🥺🥺🥺 \n\nAll the finalized recipes will be updated on my Instagram or my website! \n\nMusic\nMusic..."),
), ),
ChannelVideo( VideoItem(
id: "8t-WyYcpEDE", id: "8t-WyYcpEDE",
title: "What I hate most", title: "What I hate most",
length: Some(61), length: Some(61),
@ -669,14 +701,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 1342882, view_count: Some(1342882),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("#shorts #cooking \nhttps://doobydobap.com/recipe/ginger-pork-shogayaki\n\nInstagram @doobydobap \nJoin my discord! 😈\nhttps://discord.gg/doobyverse\nwww.doobydobap.com for recipes & stories"),
), ),
ChannelVideo( VideoItem(
id: "RroYpLxxNjY", id: "RroYpLxxNjY",
title: "I\'m Back. ㅣ cooking korean food, eating alone, working out, and 2M!", title: "I\'m Back. ㅣ cooking korean food, eating alone, working out, and 2M!",
length: Some(1313), length: Some(1313),
@ -702,14 +736,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 1076848, view_count: Some(1076848),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Annyoung doobies! It has been a while since I\'ve sat down and spoken to you all. I\'m thrilled to be back, and I finally feel like I\'m in my element after a much-needed break. \n\nThank you so..."),
), ),
ChannelVideo( VideoItem(
id: "l47QuudsZ34", id: "l47QuudsZ34",
title: "We ate our way through Florence (ft. mamadooby)", title: "We ate our way through Florence (ft. mamadooby)",
length: Some(1109), length: Some(1109),
@ -735,14 +771,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("5 months ago"), publish_date_txt: Some("5 months ago"),
view_count: 562349, view_count: Some(562349),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Annyoung doobies :)\nI\'m back after a hiatus, I\'ve been travelling and putting my mental health first so I don\'t burn out!!! Much needed break to be inspired & grow for more content to come!..."),
), ),
ChannelVideo( VideoItem(
id: "1VW7iXRIrc8", id: "1VW7iXRIrc8",
title: "Alone, in the City of Love", title: "Alone, in the City of Love",
length: Some(1875), length: Some(1875),
@ -768,14 +806,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("6 months ago"), publish_date_txt: Some("6 months ago"),
view_count: 531938, view_count: Some(531938),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("I know it\'s a little long, but I hope you enjoyed this Paris vlog :}\n\nLocation📍\nUdon Restaurant: Sanukiya\n9 Rue d\'Argenteuil, Paris\nCoffee: Telescope Cafe\n5 Rue Villédo, 75001 Paris, France..."),
), ),
ChannelVideo( VideoItem(
id: "6c58-749p6Y", id: "6c58-749p6Y",
title: "Old Friends & New", title: "Old Friends & New",
length: Some(774), length: Some(774),
@ -801,14 +841,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("6 months ago"), publish_date_txt: Some("6 months ago"),
view_count: 426469, view_count: Some(426469),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Realized I have a typo that says perogis instead of peroni oop \nBut for real, I\'m so thankful for Bobbi bc she was one of the few/ only people that welcomed me to a new school/country where..."),
), ),
ChannelVideo( VideoItem(
id: "Q2G53LuEUaU", id: "Q2G53LuEUaU",
title: "Where we stand", title: "Where we stand",
length: Some(858), length: Some(858),
@ -834,14 +876,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("6 months ago"), publish_date_txt: Some("6 months ago"),
view_count: 448915, view_count: Some(448915),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Thank you to BetterHelp for sponsoring this video! \nGo to https://www.betterhelp.com/doobydobap to get 10% off your first month :)\n\nLocations 📍\nThis is Dover btw\nhttps://www.google.com/maps/plac..."),
), ),
ChannelVideo( VideoItem(
id: "8rAOeowNQrI", id: "8rAOeowNQrI",
title: "That\'s so last year", title: "That\'s so last year",
length: Some(1286), length: Some(1286),
@ -867,14 +911,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("6 months ago"), publish_date_txt: Some("6 months ago"),
view_count: 675443, view_count: Some(675443),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Location 📍\nScience Museum\nhttps://goo.gl/maps/dPPSZwmSrMzhEh9Y7\nNatural History Museum \nhttps://goo.gl/maps/XSu2EZN9XP8rGVWg6\nJoy King Lau - Dim Sum \nhttps://goo.gl/maps/D3rgoN1raQocyQPM6..."),
), ),
ChannelVideo( VideoItem(
id: "0RGIdIKkbSI", id: "0RGIdIKkbSI",
title: "The Muffin Man", title: "The Muffin Man",
length: Some(1052), length: Some(1052),
@ -900,14 +946,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("6 months ago"), publish_date_txt: Some("6 months ago"),
view_count: 426465, view_count: Some(426465),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Use code DOOBYDOBAP16 for up to 16 FREE MEALS + 3 Surprise Gifts across 6 HelloFresh boxes plus free shipping at https://bit.ly/3Kiz0qb!\n\nMusic\nindolore - je rêve d\'é ( moow edit ) https://soundc..."),
), ),
ChannelVideo( VideoItem(
id: "NudTbo2CJMY", id: "NudTbo2CJMY",
title: "Flying to London", title: "Flying to London",
length: Some(1078), length: Some(1078),
@ -933,14 +981,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 months ago"), publish_date_txt: Some("7 months ago"),
view_count: 1137831, view_count: Some(1137831),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Tomato Beef Curry\n1 packet Japanese Curry Roux\n250g thinly sliced beef \n2 large onions\n2 tbsp butter\n2 tbsp neutral oil \n1 can whole tomatoes\n500mL water\n2 tbsp ketchup \n\n1. Melt 1 tbsp butter..."),
), ),
ChannelVideo( VideoItem(
id: "8mJk1ncGZig", id: "8mJk1ncGZig",
title: "(not so) Teenage Angst", title: "(not so) Teenage Angst",
length: Some(1376), length: Some(1376),
@ -966,14 +1016,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 months ago"), publish_date_txt: Some("7 months ago"),
view_count: 612275, view_count: Some(612275),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Again, I hope you guys know that my vlogs are a visual diary of whats happening in my life and what Im feeling that week. Im not speaking for everyone, so take with a grain o salt!..."),
), ),
ChannelVideo( VideoItem(
id: "qvgCi2WpbfE", id: "qvgCi2WpbfE",
title: "can\'t smell :s", title: "can\'t smell :s",
length: Some(875), length: Some(875),
@ -999,14 +1051,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 months ago"), publish_date_txt: Some("7 months ago"),
view_count: 396397, view_count: Some(396397),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Kimchi Jeon \nParmesan Kimchi Jeon or regular, both works\nIngredients\n* 1 cup kimchi + 2 tbsp juice\n* 1 tsp gochujang (optional for extra heat)\n* ⅓ cup parmesan, grated + extra parmesan for..."),
), ),
ChannelVideo( VideoItem(
id: "Sm4Yqtqr9f8", id: "Sm4Yqtqr9f8",
title: "I have covid", title: "I have covid",
length: Some(814), length: Some(814),
@ -1032,14 +1086,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 months ago"), publish_date_txt: Some("7 months ago"),
view_count: 599030, view_count: Some(599030),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("I had a bit too much fun with the intro.\nI actually didn\'t realize I shot it in slow-mo. \nThank you all for the supportive messages, donno what I did to deserve you all. Eternally thankful...."),
), ),
ChannelVideo( VideoItem(
id: "ZRtf4ksF3qs", id: "ZRtf4ksF3qs",
title: "Everything I ate in Busan & make up tutorial??", title: "Everything I ate in Busan & make up tutorial??",
length: Some(1026), length: Some(1026),
@ -1065,14 +1121,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 months ago"), publish_date_txt: Some("7 months ago"),
view_count: 530192, view_count: Some(530192),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("I\'m okay btw!! I got overwhelmed a bit this past weekend in Busan and was really... anxious the entire time I was on my trip :(\nI\'ll still be sharing where I went from last weekend soon as..."),
), ),
ChannelVideo( VideoItem(
id: "oG4Wth1oVBQ", id: "oG4Wth1oVBQ",
title: "On the other side", title: "On the other side",
length: Some(1592), length: Some(1592),
@ -1098,14 +1156,17 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("8 months ago"), publish_date_txt: Some("8 months ago"),
view_count: 567604, view_count: Some(567604),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Gochujang Pasta Recipe Link\nhttps://doobydobap.com/recipe/gochujang-pasta-with-prawns\nI just didn\'t put any prawns bc I didn\'t have any!\n\nLocation\ndanil seoul \n66-33 Wangsimni-ro, Seongsu-dong..."),
), ),
], ],
ctoken: Some("4qmFsgKhARIYVUNoOGdIZHR6TzJ0WGQ1OTNfYmpFcldnGoQBOGdaZ0dsNTZYQXBZQ2pCRlozTkpiRXRwYURZdFNGZG9ZbVZuUVZObmVVMUJSVFJJYTBsTVExQlFVbXR3YjBkRlMwUnBkVmRhU1VGV1FVRVNKRFl6TkRnd056Wm1MVEF3TURBdE1tRXhaUzA0TnpRNUxXUTBaalUwTjJZNE16a3pZeGdC"), ctoken: Some("4qmFsgKhARIYVUNoOGdIZHR6TzJ0WGQ1OTNfYmpFcldnGoQBOGdaZ0dsNTZYQXBZQ2pCRlozTkpiRXRwYURZdFNGZG9ZbVZuUVZObmVVMUJSVFJJYTBsTVExQlFVbXR3YjBkRlMwUnBkVmRhU1VGV1FVRVNKRFl6TkRnd056Wm1MVEF3TURBdE1tRXhaUzA0TnpRNUxXUTBaalUwTjJZNE16a3pZeGdC"),
endpoint: browse,
), ),
) )

View file

@ -144,7 +144,7 @@ Channel(
content: Paginator( content: Paginator(
count: None, count: None,
items: [ items: [
ChannelVideo( VideoItem(
id: "4EcQYK_no5M", id: "4EcQYK_no5M",
title: "EEVblog 1506 - History of Electricity with Kathy Loves Physics", title: "EEVblog 1506 - History of Electricity with Kathy Loves Physics",
length: Some(6143), length: Some(6143),
@ -170,14 +170,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 day ago"), publish_date_txt: Some("1 day ago"),
view_count: 8813, view_count: Some(8813),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Talking about the history of electricity and physics with Kathy Joseph from Kathey Loves Physics, and her new book:\nThe Lightning Tamers: True Stories of the Dreamers and Schemers Who Harnessed..."),
), ),
ChannelVideo( VideoItem(
id: "zEzjVUzNAFA", id: "zEzjVUzNAFA",
title: "EEVblog 1505 - 120W Home Phantom Power? Audit Time!", title: "EEVblog 1505 - 120W Home Phantom Power? Audit Time!",
length: Some(1464), length: Some(1464),
@ -203,14 +205,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("6 days ago"), publish_date_txt: Some("6 days ago"),
view_count: 48599, view_count: Some(48599),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("My home takes 120W phantom standby power. Let\'s do a complete audit and see what is consuming the most power, and how it can be reduced.\n\nHow bad product design kills the environment: https://www.y..."),
), ),
ChannelVideo( VideoItem(
id: "YIbQ3nudCA0", id: "YIbQ3nudCA0",
title: "EEVblog 1504 - The COOL thing you MISSED at Tesla AI Day 2022", title: "EEVblog 1504 - The COOL thing you MISSED at Tesla AI Day 2022",
length: Some(1021), length: Some(1021),
@ -236,14 +240,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("10 days ago"), publish_date_txt: Some("10 days ago"),
view_count: 74126, view_count: Some(74126),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("A very cool bit of electronics failure mode analysis that you missed at the 2022 Tesla AI Day presentation. And it\'s got nothing to do with the Optimus Tesla Bot!\n\nA look at how ceramic capacitor..."),
), ),
ChannelVideo( VideoItem(
id: "W1Jl0rMRGSg", id: "W1Jl0rMRGSg",
title: "EEVblog 1503 - Rigol HDO4000 12bit Oscilloscope TEARDOWN", title: "EEVblog 1503 - Rigol HDO4000 12bit Oscilloscope TEARDOWN",
length: Some(1798), length: Some(1798),
@ -269,14 +275,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("11 days ago"), publish_date_txt: Some("11 days ago"),
view_count: 36129, view_count: Some(36129),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Teardown of the new Rigol HDO4000 12bit ultra low noise oscilloscope\n\nPSU teardown: https://www.youtube.com/watch?v=muMjiao5i0k\n\nForum: https://www.eevblog.com/forum/testgear/rigol-hdo1000-and-hdo4..."),
), ),
ChannelVideo( VideoItem(
id: "YFKu_emNzpk", id: "YFKu_emNzpk",
title: "EEVblog 1502 - Is Home Battery Storage Financially Viable?", title: "EEVblog 1502 - Is Home Battery Storage Financially Viable?",
length: Some(1199), length: Some(1199),
@ -302,14 +310,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 weeks ago"), publish_date_txt: Some("2 weeks ago"),
view_count: 87357, view_count: Some(87357),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Running through the numbers to see if home battery storage is viable on my home. \nAnd comparing Tesla Powerwall, Enphase IQ Battery, BYD LVS, and Greenbank battery pricing.\n\nAll my solar videos:..."),
), ),
ChannelVideo( VideoItem(
id: "gremHHvqYTE", id: "gremHHvqYTE",
title: "EEVblog 1501 - Rigol HDO4000 Low Noise 12bit Oscilloscope Unboxing & First Impression", title: "EEVblog 1501 - Rigol HDO4000 Low Noise 12bit Oscilloscope Unboxing & First Impression",
length: Some(1794), length: Some(1794),
@ -335,14 +345,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 weeks ago"), publish_date_txt: Some("2 weeks ago"),
view_count: 48259, view_count: Some(48259),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Rigol\'s new HDO4000 Series ultra low noise 12bit oscilloscope with Centaur chipset.\nUnboxing, first impression, and noise measurements.\n\nAC RMS noise measurement: https://www.youtube.com/watch?v=G8..."),
), ),
ChannelVideo( VideoItem(
id: "WHO8NBfpaO0", id: "WHO8NBfpaO0",
title: "eevBLAB 102 - Last Mile Autonomous Robot Deliveries WILL FAIL", title: "eevBLAB 102 - Last Mile Autonomous Robot Deliveries WILL FAIL",
length: Some(742), length: Some(742),
@ -368,14 +380,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 weeks ago"), publish_date_txt: Some("3 weeks ago"),
view_count: 27509, view_count: Some(27509),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Four reasons why autonomous pizza delivery robots will FAIL.\nAnd nope, they won\'t save the environment either.\nBut maybe I\'m wrong?\nMagna are trialing a pizza delivery robot in Manhatten.\n..."),
), ),
ChannelVideo( VideoItem(
id: "W1Q8CxL95_Y", id: "W1Q8CxL95_Y",
title: "EEVblog 1500 - Automatic Transfer Switch REVERSE ENGINEERED", title: "EEVblog 1500 - Automatic Transfer Switch REVERSE ENGINEERED",
length: Some(1770), length: Some(1770),
@ -401,14 +415,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 weeks ago"), publish_date_txt: Some("3 weeks ago"),
view_count: 57925, view_count: Some(57925),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Automatic AC transfer switches are pretty cool devices. A look at what they do, a practical demo, teardown, and then reverse engineering to explain how it does it with a direct one-to-one schematic..."),
), ),
ChannelVideo( VideoItem(
id: "lagxSrPeoYg", id: "lagxSrPeoYg",
title: "EEVblog 1499 - EcoFlow Delta Pro 3.6kWh Portable Battery TEARDOWN!", title: "EEVblog 1499 - EcoFlow Delta Pro 3.6kWh Portable Battery TEARDOWN!",
length: Some(2334), length: Some(2334),
@ -434,14 +450,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 77907, view_count: Some(77907),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Teardown of the EcoFlow Delta Pro 3.6kWh portable/home LiFePO4 battery solar inverter/generator.\nBack in the old EEVblog garage!\n\nTeardown photos: https://www.eevblog.com/2022/09/08/eevblog-1499-ec..."),
), ),
ChannelVideo( VideoItem(
id: "qTctWW9_FmE", id: "qTctWW9_FmE",
title: "EEVblog 1498 - TransPod Fluxjet Hyperloop $550M Boondoggle!", title: "EEVblog 1498 - TransPod Fluxjet Hyperloop $550M Boondoggle!",
length: Some(2399), length: Some(2399),
@ -467,14 +485,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 63421, view_count: Some(63421),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("The Transpod FluxJet is Hyperloop based on the \"New physics\" of \"Veillance Flux\"!\nAnd plasma arc power transfer!\n$550M to create a reduced pressure Fluxjet link from Calgary to Edmonton in..."),
), ),
ChannelVideo( VideoItem(
id: "3t9G80wk0pk", id: "3t9G80wk0pk",
title: "eevBLAB 101 - Why Are Tektronix Oscilloscopes So Expensive?", title: "eevBLAB 101 - Why Are Tektronix Oscilloscopes So Expensive?",
length: Some(1423), length: Some(1423),
@ -500,14 +520,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 73052, view_count: Some(73052),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Answering the question of why Tektronix and the other top tier manufactuer\'s oscilloscopes are so expensive? Why don\'t they just make a low cost scope?\nHere is a list of 16 reasons, can you..."),
), ),
ChannelVideo( VideoItem(
id: "7dze5CnZnmk", id: "7dze5CnZnmk",
title: "EEVblog 1497 - RIP Fluke. Thanks Energizer. NOT.", title: "EEVblog 1497 - RIP Fluke. Thanks Energizer. NOT.",
length: Some(1168), length: Some(1168),
@ -533,14 +555,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 93529, view_count: Some(93529),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("RIP this Fluke 3000 wireless multimeter. Thanks Energizer for the alkaline battery leakage!\n\nPART 2 Repair: https://www.youtube.com/watch?v=qmcSEJehqZM\n\nEnergizer battery leakage in liquid..."),
), ),
ChannelVideo( VideoItem(
id: "6XnrZpPYgBg", id: "6XnrZpPYgBg",
title: "EEVblog 1496 - Winning Mailbag", title: "EEVblog 1496 - Winning Mailbag",
length: Some(3139), length: Some(3139),
@ -566,14 +590,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 41569, view_count: Some(41569),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Meet 13yo Josh, the winner of the Jaycar $5 scope, and designer of Framework laptop boards!\nhttps://lectronz.com/products/uart-expansion-card\nHis Patreon: https://www.patreon.com/i2clabs\nMore..."),
), ),
ChannelVideo( VideoItem(
id: "Psp3ltpFvws", id: "Psp3ltpFvws",
title: "eevBLAB 100 - Reuters Attacks Odysee - LOL", title: "eevBLAB 100 - Reuters Attacks Odysee - LOL",
length: Some(855), length: Some(855),
@ -599,14 +625,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 22842, view_count: Some(22842),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Reuters attacks Odysee for hosting conspiracy and violent content and gets OWNED, LOL.\nLet\'s actually take look to see if that\'s the case. SPOILER: It\'s not, Odysee is fantastic.\nWatch an an..."),
), ),
ChannelVideo( VideoItem(
id: "taVYTYz5vLE", id: "taVYTYz5vLE",
title: "EEVblog 1495 - Quaze Wireless Power (AGAIN!) but for GAMING!", title: "EEVblog 1495 - Quaze Wireless Power (AGAIN!) but for GAMING!",
length: Some(2592), length: Some(2592),
@ -632,14 +660,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 41621, view_count: Some(41621),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Yes, wireless power is BACK! And this time they are targetting gaming rigs.\nQuaze want to power gaming rigs up to 500W with 15MHz resonant RF wireless desktop power. Let\'s take a look! How..."),
), ),
ChannelVideo( VideoItem(
id: "Y6cZrieFw-k", id: "Y6cZrieFw-k",
title: "EEVblog 1494 - FIVE Ways to Open a CHEAP SAFE!", title: "EEVblog 1494 - FIVE Ways to Open a CHEAP SAFE!",
length: Some(1194), length: Some(1194),
@ -665,14 +695,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 77542, view_count: Some(77542),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("FIVE different easy methods to crack into a cheap Sandleford safe found in the dumpster, WITHOUT using physical force. Including a bonus 6th method that doesn\'t work on this one.\nDon\'t buy..."),
), ),
ChannelVideo( VideoItem(
id: "Kr2XyhpUdUI", id: "Kr2XyhpUdUI",
title: "EEVblog 1493 - MacGyver Project - Part 2", title: "EEVblog 1493 - MacGyver Project - Part 2",
length: Some(1785), length: Some(1785),
@ -698,14 +730,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 34947, view_count: Some(34947),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Powering up the Banshee ultrasonic leak detector LED display to see how the display is multiplexed turned out to be very interesting!\nWith special guest debugger, Sagan, who invents a new industry..."),
), ),
ChannelVideo( VideoItem(
id: "rxGafdgkal8", id: "rxGafdgkal8",
title: "EEVblog 1492 - $5 Oscilloscope Repaired! + Oz GIVEAWAY", title: "EEVblog 1492 - $5 Oscilloscope Repaired! + Oz GIVEAWAY",
length: Some(1163), length: Some(1163),
@ -731,14 +765,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 45618, view_count: Some(45618),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("The $5 Hantek oscilloscope is repaired, and I\'m giving it away to a youngster in Australia.\n\nIf you want the scope, enter here:\nhttps://www.eevblog.com/forum/contests/giveaway-(oz-only)-hantek-osci..."),
), ),
ChannelVideo( VideoItem(
id: "4yosozyeIP4", id: "4yosozyeIP4",
title: "EEVblog 1491 - The MacGyver Project - Part 1", title: "EEVblog 1491 - The MacGyver Project - Part 1",
length: Some(1706), length: Some(1706),
@ -764,14 +800,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 34868, view_count: Some(34868),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Part 1 reverse engineering the interface on the LED display of the Banshee Ultrasonic gas leak detector to make a MacGyver type countdown timer THING (for demonetisation purposes).\nThis will..."),
), ),
ChannelVideo( VideoItem(
id: "06JtC2DC_dQ", id: "06JtC2DC_dQ",
title: "EEVblog 1490 - Insane Jaycar Dumpster Sale! 2022", title: "EEVblog 1490 - Insane Jaycar Dumpster Sale! 2022",
length: Some(1700), length: Some(1700),
@ -797,14 +835,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 64336, view_count: Some(64336),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Insane Jaycar dumpster relocation sale!\n\nSupport the EEVblog on:\nPatreon: http://www.patreon.com/eevblog\nOdysee: https://odysee.com/@eevblog:7\nWeb Site: http://www.eevblog.com\nEEVblog2: http://www...."),
), ),
ChannelVideo( VideoItem(
id: "piquT76w9TI", id: "piquT76w9TI",
title: "EEVblog 1489 - Mystery Teardown!", title: "EEVblog 1489 - Mystery Teardown!",
length: Some(1466), length: Some(1466),
@ -830,14 +870,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 150958, view_count: Some(150958),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Teardown of a bizarre looking Banshee 343 Ultrasonic Gas Leak Detector\n\nThumbs up this video and pinned comment if you want to see a countdown timer refit project!\n\nDatasheet: https://www.instrumar..."),
), ),
ChannelVideo( VideoItem(
id: "pKuUKT-zU-g", id: "pKuUKT-zU-g",
title: "EEVblog 1488 - Tilt Five Augmented Reality AR Glasses - First Reaction!", title: "EEVblog 1488 - Tilt Five Augmented Reality AR Glasses - First Reaction!",
length: Some(2152), length: Some(2152),
@ -863,14 +905,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 30903, view_count: Some(30903),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Dave tries Jeri Ellsworth\'s Tilt Five augmented reality AR glasses for the first time!\nUnboxing, first reaction, and a bit of a first user review.\n\n00:00 - Tilt Five AR Kickstarter Glasses..."),
), ),
ChannelVideo( VideoItem(
id: "_R4wQQNSO6k", id: "_R4wQQNSO6k",
title: "EEVblog 1487 - Do Solar Micro Inverters Take Power at Night?", title: "EEVblog 1487 - Do Solar Micro Inverters Take Power at Night?",
length: Some(2399), length: Some(2399),
@ -896,14 +940,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 48669, view_count: Some(48669),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("How much power do Enphase and other solar micro inverters draw at night time when switched off? It\'s actually a very interesting question involving real and apparent/reactive power, the system..."),
), ),
ChannelVideo( VideoItem(
id: "ikp5BorIo_M", id: "ikp5BorIo_M",
title: "EEVblog 1486 - What you DIDN\'T KNOW About Film Capacitor FAILURES!", title: "EEVblog 1486 - What you DIDN\'T KNOW About Film Capacitor FAILURES!",
length: Some(1792), length: Some(1792),
@ -929,14 +975,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 83505, view_count: Some(83505),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("You might think you know how film capacitors fail and degrade in capacitance over time - self-healing due to surges, right? WRONG!\nCapacitor expert and AVX Fellow Ron Demcko confirms what\'s..."),
), ),
ChannelVideo( VideoItem(
id: "7O-QckjCXNo", id: "7O-QckjCXNo",
title: "eevBLAB 99 - AI SPAM BOT Youtube Space/Science/Tech Channels? - WTF", title: "eevBLAB 99 - AI SPAM BOT Youtube Space/Science/Tech Channels? - WTF",
length: Some(592), length: Some(592),
@ -962,14 +1010,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 42843, view_count: Some(42843),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("WTF are these random mash content spam space/science/tech Youtube channels? Are they auto-generated AI bots?\nThese channels get over 1M views a day!\nhttps://www.youtube.com/channel/UC2jAc3ifBNVT03i..."),
), ),
ChannelVideo( VideoItem(
id: "VutdTxF4E-0", id: "VutdTxF4E-0",
title: "RIP The Old Garage Lab", title: "RIP The Old Garage Lab",
length: Some(115), length: Some(115),
@ -995,14 +1045,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 26036, view_count: Some(26036),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("RIP The old EEVblog garage lab.\nA slightly extended tour of the old lab: https://odysee.com/@eevblog:7/2021-06-11-Old-Lab-Tour:2\nSecret feature of the EEVblog lab bench: https://www.youtube.com/wat..."),
), ),
ChannelVideo( VideoItem(
id: "o7xfGuRaq94", id: "o7xfGuRaq94",
title: "EEVblog 1485 - PedalCell CadenceX Bike Generator LOL FAIL!", title: "EEVblog 1485 - PedalCell CadenceX Bike Generator LOL FAIL!",
length: Some(1026), length: Some(1026),
@ -1028,14 +1080,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 63729, view_count: Some(63729),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("The failed PedalCell CadenceX Bike Generator from the previous mailbag video is tested, torn down, analysed, hilrariously laughed at, and dodgily repaired.\nhttps://pedalcell.com/\n\n00:00 - Failed..."),
), ),
ChannelVideo( VideoItem(
id: "3WSIfHOv3fc", id: "3WSIfHOv3fc",
title: "EEVblog 1484 - Kaba Mas X-09 High Security Electronic Lock Teardown", title: "EEVblog 1484 - Kaba Mas X-09 High Security Electronic Lock Teardown",
length: Some(1106), length: Some(1106),
@ -1061,14 +1115,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 22920, view_count: Some(22920),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Extended version of the Mailbag 1483 teardown of the Kaba Mas X-09 High Security Electronic Lock Teardown\n\nSupport the EEVblog on:\nPatreon: http://www.patreon.com/eevblog\nOdysee: https://odysee.com..."),
), ),
ChannelVideo( VideoItem(
id: "8yXZJZCKImI", id: "8yXZJZCKImI",
title: "EEVblog 1483 - Holy Mailbag Bomb Batman!", title: "EEVblog 1483 - Holy Mailbag Bomb Batman!",
length: Some(3373), length: Some(3373),
@ -1094,14 +1150,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 66042, view_count: Some(66042),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("Bumper Mailbag!\n\nForum: https://www.eevblog.com/forum/blog/eevblog-1483-holy-mailbag-bomb-batman/\n\nSPOILERS:\n00:00 - Contact Harald Covid Bluetooth Tracing \n04:24 - Kaba Mas X09 High Security..."),
), ),
ChannelVideo( VideoItem(
id: "vJ4pW6LKJWU", id: "vJ4pW6LKJWU",
title: "EEVblog 1482 - Mains Capacitor Zener Regulator Circuit", title: "EEVblog 1482 - Mains Capacitor Zener Regulator Circuit",
length: Some(1132), length: Some(1132),
@ -1127,14 +1185,17 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 52065, view_count: Some(52065),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: Some("A follow up to the previous video on repairing the heater.\nA viewer asked how the capacitor diode rectifier gave a 24V output. The key is in the zener regulator, so this vidoe looks at how..."),
), ),
], ],
ctoken: Some("4qmFsgKhARIYVUMyRGpGRTdYZjExVVJacVdCaWdjVk9RGoQBOGdaZ0dsNTZYQXBZQ2pCRlozTkpOV054YjJ4eWNYSnBjeTA0UVZObmVVMUJSVFJJYTBsTVEwbEhjV3cxYjBkRlVHcHlYM2hTU1VGV1FVRVNKRFl6TkRZMVlqZzFMVEF3TURBdE1qTXlOaTA1WTJSbUxUTmpNamcyWkRReU1tWTNOaGdC"), ctoken: Some("4qmFsgKhARIYVUMyRGpGRTdYZjExVVJacVdCaWdjVk9RGoQBOGdaZ0dsNTZYQXBZQ2pCRlozTkpOV054YjJ4eWNYSnBjeTA0UVZObmVVMUJSVFJJYTBsTVEwbEhjV3cxYjBkRlVHcHlYM2hTU1VGV1FVRVNKRFl6TkRZMVlqZzFMVEF3TURBdE1qTXlOaTA1WTJSbUxUTmpNamcyWkRReU1tWTNOaGdC"),
endpoint: browse,
), ),
) )

View file

@ -144,7 +144,7 @@ Channel(
content: Paginator( content: Paginator(
count: None, count: None,
items: [ items: [
ChannelVideo( VideoItem(
id: "gremHHvqYTE", id: "gremHHvqYTE",
title: "EEVblog 1501 - Rigol HDO4000 Low Noise 12bit Oscilloscope Unboxing & First Impression", title: "EEVblog 1501 - Rigol HDO4000 Low Noise 12bit Oscilloscope Unboxing & First Impression",
length: Some(1794), length: Some(1794),
@ -170,14 +170,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("20 hours ago"), publish_date_txt: Some("20 hours ago"),
view_count: 19739, view_count: Some(19739),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "WHO8NBfpaO0", id: "WHO8NBfpaO0",
title: "eevBLAB 102 - Last Mile Autonomous Robot Deliveries WILL FAIL", title: "eevBLAB 102 - Last Mile Autonomous Robot Deliveries WILL FAIL",
length: Some(742), length: Some(742),
@ -203,14 +205,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("5 days ago"), publish_date_txt: Some("5 days ago"),
view_count: 24194, view_count: Some(24194),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "W1Q8CxL95_Y", id: "W1Q8CxL95_Y",
title: "EEVblog 1500 - Automatic Transfer Switch REVERSE ENGINEERED", title: "EEVblog 1500 - Automatic Transfer Switch REVERSE ENGINEERED",
length: Some(1770), length: Some(1770),
@ -236,14 +240,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 days ago"), publish_date_txt: Some("7 days ago"),
view_count: 51443, view_count: Some(51443),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "lagxSrPeoYg", id: "lagxSrPeoYg",
title: "EEVblog 1499 - EcoFlow Delta Pro 3.6kWh Portable Battery TEARDOWN!", title: "EEVblog 1499 - EcoFlow Delta Pro 3.6kWh Portable Battery TEARDOWN!",
length: Some(2334), length: Some(2334),
@ -269,14 +275,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("13 days ago"), publish_date_txt: Some("13 days ago"),
view_count: 72324, view_count: Some(72324),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "qTctWW9_FmE", id: "qTctWW9_FmE",
title: "EEVblog 1498 - TransPod Fluxjet Hyperloop $550M Boondoggle!", title: "EEVblog 1498 - TransPod Fluxjet Hyperloop $550M Boondoggle!",
length: Some(2399), length: Some(2399),
@ -302,14 +310,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 weeks ago"), publish_date_txt: Some("2 weeks ago"),
view_count: 57348, view_count: Some(57348),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "3t9G80wk0pk", id: "3t9G80wk0pk",
title: "eevBLAB 101 - Why Are Tektronix Oscilloscopes So Expensive?", title: "eevBLAB 101 - Why Are Tektronix Oscilloscopes So Expensive?",
length: Some(1423), length: Some(1423),
@ -335,14 +345,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 weeks ago"), publish_date_txt: Some("2 weeks ago"),
view_count: 68645, view_count: Some(68645),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "7dze5CnZnmk", id: "7dze5CnZnmk",
title: "EEVblog 1497 - RIP Fluke. Thanks Energizer. NOT.", title: "EEVblog 1497 - RIP Fluke. Thanks Energizer. NOT.",
length: Some(1168), length: Some(1168),
@ -368,14 +380,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 weeks ago"), publish_date_txt: Some("3 weeks ago"),
view_count: 91388, view_count: Some(91388),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "6XnrZpPYgBg", id: "6XnrZpPYgBg",
title: "EEVblog 1496 - Winning Mailbag", title: "EEVblog 1496 - Winning Mailbag",
length: Some(3139), length: Some(3139),
@ -401,14 +415,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 weeks ago"), publish_date_txt: Some("3 weeks ago"),
view_count: 39993, view_count: Some(39993),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "Psp3ltpFvws", id: "Psp3ltpFvws",
title: "eevBLAB 100 - Reuters Attacks Odysee - LOL", title: "eevBLAB 100 - Reuters Attacks Odysee - LOL",
length: Some(855), length: Some(855),
@ -434,14 +450,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 weeks ago"), publish_date_txt: Some("4 weeks ago"),
view_count: 22512, view_count: Some(22512),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "taVYTYz5vLE", id: "taVYTYz5vLE",
title: "EEVblog 1495 - Quaze Wireless Power (AGAIN!) but for GAMING!", title: "EEVblog 1495 - Quaze Wireless Power (AGAIN!) but for GAMING!",
length: Some(2592), length: Some(2592),
@ -467,14 +485,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 40137, view_count: Some(40137),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "Y6cZrieFw-k", id: "Y6cZrieFw-k",
title: "EEVblog 1494 - FIVE Ways to Open a CHEAP SAFE!", title: "EEVblog 1494 - FIVE Ways to Open a CHEAP SAFE!",
length: Some(1194), length: Some(1194),
@ -500,14 +520,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 74510, view_count: Some(74510),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "Kr2XyhpUdUI", id: "Kr2XyhpUdUI",
title: "EEVblog 1493 - MacGyver Project - Part 2", title: "EEVblog 1493 - MacGyver Project - Part 2",
length: Some(1785), length: Some(1785),
@ -533,14 +555,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 34487, view_count: Some(34487),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "rxGafdgkal8", id: "rxGafdgkal8",
title: "EEVblog 1492 - $5 Oscilloscope Repaired! + Oz GIVEAWAY", title: "EEVblog 1492 - $5 Oscilloscope Repaired! + Oz GIVEAWAY",
length: Some(1163), length: Some(1163),
@ -566,14 +590,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 44928, view_count: Some(44928),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "4yosozyeIP4", id: "4yosozyeIP4",
title: "EEVblog 1491 - The MacGyver Project - Part 1", title: "EEVblog 1491 - The MacGyver Project - Part 1",
length: Some(1706), length: Some(1706),
@ -599,14 +625,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 34324, view_count: Some(34324),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "06JtC2DC_dQ", id: "06JtC2DC_dQ",
title: "EEVblog 1490 - Insane Jaycar Dumpster Sale! 2022", title: "EEVblog 1490 - Insane Jaycar Dumpster Sale! 2022",
length: Some(1700), length: Some(1700),
@ -632,14 +660,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 63763, view_count: Some(63763),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "piquT76w9TI", id: "piquT76w9TI",
title: "EEVblog 1489 - Mystery Teardown!", title: "EEVblog 1489 - Mystery Teardown!",
length: Some(1466), length: Some(1466),
@ -665,14 +695,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 149186, view_count: Some(149186),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "pKuUKT-zU-g", id: "pKuUKT-zU-g",
title: "EEVblog 1488 - Tilt Five Augmented Reality AR Glasses - First Reaction!", title: "EEVblog 1488 - Tilt Five Augmented Reality AR Glasses - First Reaction!",
length: Some(2152), length: Some(2152),
@ -698,14 +730,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 30130, view_count: Some(30130),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "_R4wQQNSO6k", id: "_R4wQQNSO6k",
title: "EEVblog 1487 - Do Solar Micro Inverters Take Power at Night?", title: "EEVblog 1487 - Do Solar Micro Inverters Take Power at Night?",
length: Some(2399), length: Some(2399),
@ -731,14 +765,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 48037, view_count: Some(48037),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "ikp5BorIo_M", id: "ikp5BorIo_M",
title: "EEVblog 1486 - What you DIDN\'T KNOW About Film Capacitor FAILURES!", title: "EEVblog 1486 - What you DIDN\'T KNOW About Film Capacitor FAILURES!",
length: Some(1792), length: Some(1792),
@ -764,14 +800,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 81958, view_count: Some(81958),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "7O-QckjCXNo", id: "7O-QckjCXNo",
title: "eevBLAB 99 - AI SPAM BOT Youtube Space/Science/Tech Channels? - WTF", title: "eevBLAB 99 - AI SPAM BOT Youtube Space/Science/Tech Channels? - WTF",
length: Some(592), length: Some(592),
@ -797,14 +835,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 42635, view_count: Some(42635),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "VutdTxF4E-0", id: "VutdTxF4E-0",
title: "RIP The Old Garage Lab", title: "RIP The Old Garage Lab",
length: Some(115), length: Some(115),
@ -830,14 +870,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 25860, view_count: Some(25860),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "o7xfGuRaq94", id: "o7xfGuRaq94",
title: "EEVblog 1485 - PedalCell CadenceX Bike Generator LOL FAIL!", title: "EEVblog 1485 - PedalCell CadenceX Bike Generator LOL FAIL!",
length: Some(1026), length: Some(1026),
@ -863,14 +905,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 63035, view_count: Some(63035),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "3WSIfHOv3fc", id: "3WSIfHOv3fc",
title: "EEVblog 1484 - Kaba Mas X-09 High Security Electronic Lock Teardown", title: "EEVblog 1484 - Kaba Mas X-09 High Security Electronic Lock Teardown",
length: Some(1106), length: Some(1106),
@ -896,14 +940,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 22731, view_count: Some(22731),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "8yXZJZCKImI", id: "8yXZJZCKImI",
title: "EEVblog 1483 - Holy Mailbag Bomb Batman!", title: "EEVblog 1483 - Holy Mailbag Bomb Batman!",
length: Some(3373), length: Some(3373),
@ -929,14 +975,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 65765, view_count: Some(65765),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "vJ4pW6LKJWU", id: "vJ4pW6LKJWU",
title: "EEVblog 1482 - Mains Capacitor Zener Regulator Circuit", title: "EEVblog 1482 - Mains Capacitor Zener Regulator Circuit",
length: Some(1132), length: Some(1132),
@ -962,14 +1010,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 51555, view_count: Some(51555),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "myqiqUE00fo", id: "myqiqUE00fo",
title: "EEVblog 1481 - Dodgy Dangerous Heater REPAIR", title: "EEVblog 1481 - Dodgy Dangerous Heater REPAIR",
length: Some(1622), length: Some(1622),
@ -995,14 +1045,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 46638, view_count: Some(46638),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "xIokNnjuam8", id: "xIokNnjuam8",
title: "EEVblog 1480 - Lightyear Zero Solar Powered Electric Car", title: "EEVblog 1480 - Lightyear Zero Solar Powered Electric Car",
length: Some(1196), length: Some(1196),
@ -1028,14 +1080,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 62921, view_count: Some(62921),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "S3R4r2xvVYQ", id: "S3R4r2xvVYQ",
title: "EEVblog 1479 - Is Your Calculator WRONG?", title: "EEVblog 1479 - Is Your Calculator WRONG?",
length: Some(1066), length: Some(1066),
@ -1061,14 +1115,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 66895, view_count: Some(66895),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "RlwcdUnRw6w", id: "RlwcdUnRw6w",
title: "EEVblog 1478 - Waveform Update Rate Shootout - Tek 2 Series vs Others", title: "EEVblog 1478 - Waveform Update Rate Shootout - Tek 2 Series vs Others",
length: Some(1348), length: Some(1348),
@ -1094,14 +1150,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 25894, view_count: Some(25894),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "R2fw2g6WFbg", id: "R2fw2g6WFbg",
title: "EEVblog 1477 - TEARDOWN! - NEW Tektronix 2 Series Oscilloscope", title: "EEVblog 1477 - TEARDOWN! - NEW Tektronix 2 Series Oscilloscope",
length: Some(2718), length: Some(2718),
@ -1127,14 +1185,17 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 80173, view_count: Some(80173),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
], ],
ctoken: Some("4qmFsgKrARIYVUMyRGpGRTdYZjExVVJacVdCaWdjVk9RGmBFZ1oyYVdSbGIzTVlBeUFBTUFFNEFlb0RNRVZuYjBsMVMzWlpPVXREWWw5TVRraExSRWwzUVZSblpWRm5kMGx3ZFVOMGJWRlpVVjlOUjA1d2QwcEpRVlpCUVElM0QlM0SaAixicm93c2UtZmVlZFVDMkRqRkU3WGYxMVVSWnFXQmlnY1ZPUXZpZGVvczEwMg%3D%3D"), ctoken: Some("4qmFsgKrARIYVUMyRGpGRTdYZjExVVJacVdCaWdjVk9RGmBFZ1oyYVdSbGIzTVlBeUFBTUFFNEFlb0RNRVZuYjBsMVMzWlpPVXREWWw5TVRraExSRWwzUVZSblpWRm5kMGx3ZFVOMGJWRlpVVjlOUjA1d2QwcEpRVlpCUVElM0QlM0SaAixicm93c2UtZmVlZFVDMkRqRkU3WGYxMVVSWnFXQmlnY1ZPUXZpZGVvczEwMg%3D%3D"),
endpoint: browse,
), ),
) )

View file

@ -33,5 +33,6 @@ Channel(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
) )

View file

@ -128,7 +128,7 @@ Channel(
content: Paginator( content: Paginator(
count: Some(21), count: Some(21),
items: [ items: [
ChannelVideo( VideoItem(
id: "csP93FGy0bs", id: "csP93FGy0bs",
title: "Chill Out Music Mix • 24/7 Live Radio | Relaxing Deep House, Chillout Lounge, Vocal & Instrumental", title: "Chill Out Music Mix • 24/7 Live Radio | Relaxing Deep House, Chillout Lounge, Vocal & Instrumental",
length: None, length: None,
@ -154,14 +154,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: None, publish_date_txt: None,
view_count: 94, view_count: Some(94),
is_live: true, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "19hKXI1ENrY", id: "19hKXI1ENrY",
title: "Deep House Radio | Relaxing & Chill House, Best Summer Mix 2022, Gym & Workout Music", title: "Deep House Radio | Relaxing & Chill House, Best Summer Mix 2022, Gym & Workout Music",
length: None, length: None,
@ -187,14 +189,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: None, publish_date_txt: None,
view_count: 381, view_count: Some(381),
is_live: true, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "CqMUC5eXX7c", id: "CqMUC5eXX7c",
title: "Back To School / Work 📚 Deep Focus Chillout Mix | The Good Life Radio #4", title: "Back To School / Work 📚 Deep Focus Chillout Mix | The Good Life Radio #4",
length: Some(4667), length: Some(4667),
@ -220,14 +224,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 year ago"), publish_date_txt: Some("1 year ago"),
view_count: 241528, view_count: Some(241528),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "A77SYlXKQEM", id: "A77SYlXKQEM",
title: "Chillout Lounge 🏖\u{fe0f} Calm & Relaxing Background Music | The Good Life Radio #3", title: "Chillout Lounge 🏖\u{fe0f} Calm & Relaxing Background Music | The Good Life Radio #3",
length: Some(1861), length: Some(1861),
@ -253,14 +259,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 year ago"), publish_date_txt: Some("1 year ago"),
view_count: 118351, view_count: Some(118351),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "72vkRHQfjbk", id: "72vkRHQfjbk",
title: "Summer Lovers 💖 A Beautiful & Relaxing Chillout Deep House Mix | The Good Life Radio #2", title: "Summer Lovers 💖 A Beautiful & Relaxing Chillout Deep House Mix | The Good Life Radio #2",
length: Some(1832), length: Some(1832),
@ -286,14 +294,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 year ago"), publish_date_txt: Some("1 year ago"),
view_count: 157971, view_count: Some(157971),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "AMWMDhibROw", id: "AMWMDhibROw",
title: "Relaxing & Chill House 🌴 Summer \'21 Chill-Out Mix | The Good Life Radio #1", title: "Relaxing & Chill House 🌴 Summer \'21 Chill-Out Mix | The Good Life Radio #1",
length: Some(1949), length: Some(1949),
@ -319,14 +329,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 year ago"), publish_date_txt: Some("1 year ago"),
view_count: 82309, view_count: Some(82309),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "9UMxZofMNbA", id: "9UMxZofMNbA",
title: "Chillout Lounge - Calm & Relaxing Background Music | Study, Work, Sleep, Meditation, Chill", title: "Chillout Lounge - Calm & Relaxing Background Music | Study, Work, Sleep, Meditation, Chill",
length: None, length: None,
@ -352,14 +364,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: None, publish_date_txt: None,
view_count: 2043, view_count: Some(2043),
is_live: true, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "a2sEYVwBvX4", id: "a2sEYVwBvX4",
title: "Paratone - Heaven Is A Place On Earth (feat. kaii)", title: "Paratone - Heaven Is A Place On Earth (feat. kaii)",
length: Some(161), length: Some(161),
@ -385,14 +399,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 years ago"), publish_date_txt: Some("2 years ago"),
view_count: 186475, view_count: Some(186475),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "JAY-prtJnGY", id: "JAY-prtJnGY",
title: "Joseph Feinstein - Where I Belong", title: "Joseph Feinstein - Where I Belong",
length: Some(126), length: Some(126),
@ -418,14 +434,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 years ago"), publish_date_txt: Some("2 years ago"),
view_count: 66425, view_count: Some(66425),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "DySa8OrQDi4", id: "DySa8OrQDi4",
title: "LA Vision & Gigi D\'Agostino - Hollywood", title: "LA Vision & Gigi D\'Agostino - Hollywood",
length: Some(200), length: Some(200),
@ -451,14 +469,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 years ago"), publish_date_txt: Some("2 years ago"),
view_count: 1520020, view_count: Some(1520020),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "NqzXULaB8MA", id: "NqzXULaB8MA",
title: "LO - Home", title: "LO - Home",
length: Some(163), length: Some(163),
@ -484,14 +504,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 years ago"), publish_date_txt: Some("2 years ago"),
view_count: 37549, view_count: Some(37549),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "UGzy6uhZkmw", id: "UGzy6uhZkmw",
title: "Luca - Sunset", title: "Luca - Sunset",
length: Some(153), length: Some(153),
@ -517,14 +539,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 years ago"), publish_date_txt: Some("2 years ago"),
view_count: 33002, view_count: Some(33002),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "iuvapHKpW8A", id: "iuvapHKpW8A",
title: "nourii - Better Off (feat. BCS)", title: "nourii - Better Off (feat. BCS)",
length: Some(126), length: Some(126),
@ -550,14 +574,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 years ago"), publish_date_txt: Some("2 years ago"),
view_count: 42036, view_count: Some(42036),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "n_1Nwht-Gh4", id: "n_1Nwht-Gh4",
title: "Deep House Covers & Remixes of Popular Songs 2020 🌴 Deep House, G-House, Chill-Out Music Playlist", title: "Deep House Covers & Remixes of Popular Songs 2020 🌴 Deep House, G-House, Chill-Out Music Playlist",
length: Some(2940), length: Some(2940),
@ -583,14 +609,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 years ago"), publish_date_txt: Some("2 years ago"),
view_count: 322935, view_count: Some(322935),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "6TptI5BtP5U", id: "6TptI5BtP5U",
title: "The Good Life Radio Mix #2 | Summer Memories ☀\u{fe0f} (Chill Music Playlist 2020)", title: "The Good Life Radio Mix #2 | Summer Memories ☀\u{fe0f} (Chill Music Playlist 2020)",
length: Some(3448), length: Some(3448),
@ -616,14 +644,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 years ago"), publish_date_txt: Some("2 years ago"),
view_count: 91980, view_count: Some(91980),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "36YnV9STBqc", id: "36YnV9STBqc",
title: "The Good Life Radio\u{a0}•\u{a0}24/7 Live Radio | Best Relax House, Chillout, Study, Running, Gym, Happy Music", title: "The Good Life Radio\u{a0}•\u{a0}24/7 Live Radio | Best Relax House, Chillout, Study, Running, Gym, Happy Music",
length: None, length: None,
@ -649,14 +679,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: None, publish_date_txt: None,
view_count: 4030, view_count: Some(4030),
is_live: true, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "7x6ii2TcsPE", id: "7x6ii2TcsPE",
title: "The Good Life Radio Mix #1 | Relaxing & Chill House Music Playlist 2020", title: "The Good Life Radio Mix #1 | Relaxing & Chill House Music Playlist 2020",
length: Some(2726), length: Some(2726),
@ -682,14 +714,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 years ago"), publish_date_txt: Some("2 years ago"),
view_count: 288098, view_count: Some(288098),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "mxV5MBZYYDE", id: "mxV5MBZYYDE",
title: "Christmas Music with Vocals 🎅 Best Relaxing Christmas Songs 2020", title: "Christmas Music with Vocals 🎅 Best Relaxing Christmas Songs 2020",
length: Some(5863), length: Some(5863),
@ -715,14 +749,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 years ago"), publish_date_txt: Some("2 years ago"),
view_count: 50818, view_count: Some(50818),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "hh2AOoPoAIo", id: "hh2AOoPoAIo",
title: "The Good Life Radio Mix 2019 🎅 Winter & Christmas Relax House Playlist [Best of Part 1]", title: "The Good Life Radio Mix 2019 🎅 Winter & Christmas Relax House Playlist [Best of Part 1]",
length: Some(2530), length: Some(2530),
@ -748,14 +784,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 years ago"), publish_date_txt: Some("2 years ago"),
view_count: 98431, view_count: Some(98431),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "aFlvhtWsJ0g", id: "aFlvhtWsJ0g",
title: "Chillout Playlist | Relaxing Summer Music Mix 2019 [Deep & Tropical House]", title: "Chillout Playlist | Relaxing Summer Music Mix 2019 [Deep & Tropical House]",
length: Some(2483), length: Some(2483),
@ -781,14 +819,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 years ago"), publish_date_txt: Some("3 years ago"),
view_count: 572456, view_count: Some(572456),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "cD-d7u6fnEI", id: "cD-d7u6fnEI",
title: "Chill House Playlist | Relaxing Summer Music 2019", title: "Chill House Playlist | Relaxing Summer Music 2019",
length: Some(3165), length: Some(3165),
@ -814,14 +854,17 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 years ago"), publish_date_txt: Some("3 years ago"),
view_count: 3114909, view_count: Some(3114909),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
], ],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
) )

View file

@ -116,5 +116,6 @@ Channel(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
) )

View file

@ -115,7 +115,7 @@ Channel(
content: Paginator( content: Paginator(
count: None, count: None,
items: [ items: [
ChannelVideo( VideoItem(
id: "JBUZE0mIlg8", id: "JBUZE0mIlg8",
title: "small but sure joy", title: "small but sure joy",
length: None, length: None,
@ -126,14 +126,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 day ago"), publish_date_txt: Some("1 day ago"),
view_count: 443549, view_count: Some(443549),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "SRrvxFc2b2c", id: "SRrvxFc2b2c",
title: "i don\'t believe in long distance relationships", title: "i don\'t believe in long distance relationships",
length: None, length: None,
@ -144,14 +146,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 days ago"), publish_date_txt: Some("2 days ago"),
view_count: 1154962, view_count: Some(1154962),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "l9TiwunjzgA", id: "l9TiwunjzgA",
title: "long distance", title: "long distance",
length: Some(1043), length: Some(1043),
@ -177,14 +181,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 days ago"), publish_date_txt: Some("3 days ago"),
view_count: 477460, view_count: Some(477460),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "cNx0ql9gnf4", id: "cNx0ql9gnf4",
title: "come over :)", title: "come over :)",
length: None, length: None,
@ -195,14 +201,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("6 days ago"), publish_date_txt: Some("6 days ago"),
view_count: 1388173, view_count: Some(1388173),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "fGQUWI4o__A", id: "fGQUWI4o__A",
title: "Baskin Robbins in South Korea", title: "Baskin Robbins in South Korea",
length: None, length: None,
@ -213,14 +221,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 days ago"), publish_date_txt: Some("7 days ago"),
view_count: 1738301, view_count: Some(1738301),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "Q73VTjdqVA8", id: "Q73VTjdqVA8",
title: "dry hot pot", title: "dry hot pot",
length: None, length: None,
@ -231,14 +241,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("9 days ago"), publish_date_txt: Some("9 days ago"),
view_count: 1316594, view_count: Some(1316594),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "pRVSdUxdsVw", id: "pRVSdUxdsVw",
title: "Repairing...", title: "Repairing...",
length: Some(965), length: Some(965),
@ -264,14 +276,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("10 days ago"), publish_date_txt: Some("10 days ago"),
view_count: 478703, view_count: Some(478703),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "gTG2WDbiYGo", id: "gTG2WDbiYGo",
title: "time machine", title: "time machine",
length: None, length: None,
@ -282,14 +296,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("11 days ago"), publish_date_txt: Some("11 days ago"),
view_count: 1412213, view_count: Some(1412213),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "y5JK5YFp92g", id: "y5JK5YFp92g",
title: "tiramissu", title: "tiramissu",
length: None, length: None,
@ -300,14 +316,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("13 days ago"), publish_date_txt: Some("13 days ago"),
view_count: 1513305, view_count: Some(1513305),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "pvSWHm4wlxY", id: "pvSWHm4wlxY",
title: "having kids", title: "having kids",
length: None, length: None,
@ -318,14 +336,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 weeks ago"), publish_date_txt: Some("2 weeks ago"),
view_count: 8936223, view_count: Some(8936223),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "2FJVhdOO0F0", id: "2FJVhdOO0F0",
title: "a health scare", title: "a health scare",
length: Some(1238), length: Some(1238),
@ -351,14 +371,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 weeks ago"), publish_date_txt: Some("2 weeks ago"),
view_count: 987083, view_count: Some(987083),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "CqFGACRrWJE", id: "CqFGACRrWJE",
title: "just do it", title: "just do it",
length: None, length: None,
@ -369,14 +391,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 weeks ago"), publish_date_txt: Some("2 weeks ago"),
view_count: 2769717, view_count: Some(2769717),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "CutR_1SDDzY", id: "CutR_1SDDzY",
title: "feels good to be back", title: "feels good to be back",
length: Some(1159), length: Some(1159),
@ -402,14 +426,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 weeks ago"), publish_date_txt: Some("3 weeks ago"),
view_count: 497660, view_count: Some(497660),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "DdGr6t2NqKc", id: "DdGr6t2NqKc",
title: "coming soon", title: "coming soon",
length: None, length: None,
@ -420,14 +446,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 weeks ago"), publish_date_txt: Some("3 weeks ago"),
view_count: 572107, view_count: Some(572107),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "jKS44NMWuXw", id: "jKS44NMWuXw",
title: "adult money", title: "adult money",
length: None, length: None,
@ -438,14 +466,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 weeks ago"), publish_date_txt: Some("3 weeks ago"),
view_count: 1707132, view_count: Some(1707132),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "kx1YtJM_vbI", id: "kx1YtJM_vbI",
title: "a fig\'s journey", title: "a fig\'s journey",
length: None, length: None,
@ -456,14 +486,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 weeks ago"), publish_date_txt: Some("3 weeks ago"),
view_count: 933094, view_count: Some(933094),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "Sdbzs-1WWH0", id: "Sdbzs-1WWH0",
title: "How to.. Mozzarella 🧀", title: "How to.. Mozzarella 🧀",
length: None, length: None,
@ -474,14 +506,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 5985184, view_count: Some(5985184),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "9qBHyJIDous", id: "9qBHyJIDous",
title: "how to drink like a real korean", title: "how to drink like a real korean",
length: None, length: None,
@ -492,14 +526,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 14741387, view_count: Some(14741387),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "mBeFDb4gp8s", id: "mBeFDb4gp8s",
title: "mr. krabs soup", title: "mr. krabs soup",
length: None, length: None,
@ -510,14 +546,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 2511322, view_count: Some(2511322),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "b38r1UYqoBQ", id: "b38r1UYqoBQ",
title: "in five years", title: "in five years",
length: None, length: None,
@ -528,14 +566,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 2364408, view_count: Some(2364408),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "KUz7oArksR4", id: "KUz7oArksR4",
title: "running away", title: "running away",
length: Some(1023), length: Some(1023),
@ -561,14 +601,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 706059, view_count: Some(706059),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "RdFk4WaifEo", id: "RdFk4WaifEo",
title: "a weeknight dinner", title: "a weeknight dinner",
length: None, length: None,
@ -579,14 +621,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 1947627, view_count: Some(1947627),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "GuyGyzZcumI", id: "GuyGyzZcumI",
title: "McDonald\'s Michelin Burger", title: "McDonald\'s Michelin Burger",
length: None, length: None,
@ -597,14 +641,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 4763839, view_count: Some(4763839),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "07Zipsb3-qU", id: "07Zipsb3-qU",
title: "cwispy potato pancake", title: "cwispy potato pancake",
length: None, length: None,
@ -615,14 +661,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 1915695, view_count: Some(1915695),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "3kaePnU6Clo", id: "3kaePnU6Clo",
title: "authenticity is overrated", title: "authenticity is overrated",
length: None, length: None,
@ -633,14 +681,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 7268944, view_count: Some(7268944),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "rt4rXMftnpg", id: "rt4rXMftnpg",
title: "you can kimchi anything (T&C applies)", title: "you can kimchi anything (T&C applies)",
length: None, length: None,
@ -651,14 +701,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 2539103, view_count: Some(2539103),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "DTyLUvbf128", id: "DTyLUvbf128",
title: "egg, soy, and perfect pot rice", title: "egg, soy, and perfect pot rice",
length: None, length: None,
@ -669,14 +721,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 5545680, view_count: Some(5545680),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "DzjLBgIe_aI", id: "DzjLBgIe_aI",
title: "love language", title: "love language",
length: None, length: None,
@ -687,14 +741,16 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 2202314, view_count: Some(2202314),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "sPb2gyN-hnE", id: "sPb2gyN-hnE",
title: "worth fighting for", title: "worth fighting for",
length: Some(1232), length: Some(1232),
@ -720,14 +776,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 613416, view_count: Some(613416),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "9JboRKeJ2m4", id: "9JboRKeJ2m4",
title: "Rating Italian McDonald\'s", title: "Rating Italian McDonald\'s",
length: None, length: None,
@ -738,14 +796,17 @@ Channel(
height: 720, height: 720,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 6443699, view_count: Some(6443699),
is_live: false, is_live: false,
is_short: true, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
], ],
ctoken: Some("4qmFsgKrARIYVUNoOGdIZHR6TzJ0WGQ1OTNfYmpFcldnGmBFZ1oyYVdSbGIzTVlBeUFBTUFFNEFlb0RNRVZuYzBrM2NsTnVkazF4U1hWemRqQkJVMmQ1VFVGRk5FaHJTVXhEVUhac2NscHJSMFZKWVhWd016RkpRVlpCUVElM0QlM0SaAixicm93c2UtZmVlZFVDaDhnSGR0ek8ydFhkNTkzX2JqRXJXZ3ZpZGVvczEwMg%3D%3D"), ctoken: Some("4qmFsgKrARIYVUNoOGdIZHR6TzJ0WGQ1OTNfYmpFcldnGmBFZ1oyYVdSbGIzTVlBeUFBTUFFNEFlb0RNRVZuYzBrM2NsTnVkazF4U1hWemRqQkJVMmQ1VFVGRk5FaHJTVXhEVUhac2NscHJSMFZKWVhWd016RkpRVlpCUVElM0QlM0SaAixicm93c2UtZmVlZFVDaDhnSGR0ek8ydFhkNTkzX2JqRXJXZ3ZpZGVvczEwMg%3D%3D"),
endpoint: browse,
), ),
) )

View file

@ -132,7 +132,7 @@ Channel(
content: Paginator( content: Paginator(
count: None, count: None,
items: [ items: [
ChannelVideo( VideoItem(
id: "B-KjpyR4n5Q", id: "B-KjpyR4n5Q",
title: "The Online Manosphere", title: "The Online Manosphere",
length: None, length: None,
@ -158,14 +158,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: Some("2022-09-27T18:00:00+02:00"), publish_date: Some("2022-09-27T18:00:00+02:00"),
publish_date_txt: None, publish_date_txt: None,
view_count: 237, view_count: Some(237),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: true, is_upcoming: true,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "umDsCyZ67J0", id: "umDsCyZ67J0",
title: "Ukraine - The Beginning of the End", title: "Ukraine - The Beginning of the End",
length: Some(614), length: Some(614),
@ -191,14 +193,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("13 days ago"), publish_date_txt: Some("13 days ago"),
view_count: 742284, view_count: Some(742284),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "dNgKGL8lQck", id: "dNgKGL8lQck",
title: "Honest Russian Military Recruitment Video", title: "Honest Russian Military Recruitment Video",
length: Some(62), length: Some(62),
@ -224,14 +228,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 weeks ago"), publish_date_txt: Some("3 weeks ago"),
view_count: 420368, view_count: Some(420368),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "UVWciFJeFNA", id: "UVWciFJeFNA",
title: "Self-Driving Cars Will Only Make Traffic Worse", title: "Self-Driving Cars Will Only Make Traffic Worse",
length: Some(458), length: Some(458),
@ -257,14 +263,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 weeks ago"), publish_date_txt: Some("3 weeks ago"),
view_count: 528718, view_count: Some(528718),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "vyWaax07_ks", id: "vyWaax07_ks",
title: "NEOM Is The Parody Of The Future", title: "NEOM Is The Parody Of The Future",
length: Some(636), length: Some(636),
@ -290,14 +298,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 897237, view_count: Some(897237),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "onQ0ICkLEJw", id: "onQ0ICkLEJw",
title: "I Got An Email From \"The Dubai Sheikh\'s Personal Friend\"", title: "I Got An Email From \"The Dubai Sheikh\'s Personal Friend\"",
length: Some(211), length: Some(211),
@ -323,14 +333,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 526638, view_count: Some(526638),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "yDEL1pTYOhs", id: "yDEL1pTYOhs",
title: "The \"Meritocracy\" Isn\'t Real", title: "The \"Meritocracy\" Isn\'t Real",
length: Some(385), length: Some(385),
@ -356,14 +368,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 368801, view_count: Some(368801),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "EnVvlhhqWtw", id: "EnVvlhhqWtw",
title: "City Review - Prague: Beautiful and Disappointing", title: "City Review - Prague: Beautiful and Disappointing",
length: Some(834), length: Some(834),
@ -389,14 +403,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 286737, view_count: Some(286737),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "Oxz4oY0T85Y", id: "Oxz4oY0T85Y",
title: "European International Rail SUCKS, Here\'s Why", title: "European International Rail SUCKS, Here\'s Why",
length: Some(810), length: Some(810),
@ -422,14 +438,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 664499, view_count: Some(664499),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "lxUEuOkblws", id: "lxUEuOkblws",
title: "Why the Straddling Bus Failed", title: "Why the Straddling Bus Failed",
length: Some(614), length: Some(614),
@ -455,14 +473,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 592227, view_count: Some(592227),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "UG8jiKOtedk", id: "UG8jiKOtedk",
title: "How Canadian Ukrainian Volunteer Got Exposed", title: "How Canadian Ukrainian Volunteer Got Exposed",
length: Some(538), length: Some(538),
@ -488,14 +508,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 396946, view_count: Some(396946),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "bQld7iJJSyk", id: "bQld7iJJSyk",
title: "Why Roads ALWAYS Fill Up, No Matter How Much We Widen Them", title: "Why Roads ALWAYS Fill Up, No Matter How Much We Widen Them",
length: Some(159), length: Some(159),
@ -521,14 +543,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 778430, view_count: Some(778430),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "WUK0K5mdQ_s", id: "WUK0K5mdQ_s",
title: "Egypt\'s New Capital is an Ozymandian Nightmare", title: "Egypt\'s New Capital is an Ozymandian Nightmare",
length: Some(870), length: Some(870),
@ -554,14 +578,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 2118499, view_count: Some(2118499),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "LB-vsT1Sl68", id: "LB-vsT1Sl68",
title: "Why Car-Centric Cities are a GREAT Idea", title: "Why Car-Centric Cities are a GREAT Idea",
length: Some(369), length: Some(369),
@ -587,14 +613,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 525824, view_count: Some(525824),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "p8NiM_p8n5A", id: "p8NiM_p8n5A",
title: "HE FIXED TRAFFIC", title: "HE FIXED TRAFFIC",
length: Some(157), length: Some(157),
@ -620,14 +648,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 1097056, view_count: Some(1097056),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "U9YdnzOf4NQ", id: "U9YdnzOf4NQ",
title: "Why a Mars Colony is a Stupid and Dangerous Idea", title: "Why a Mars Colony is a Stupid and Dangerous Idea",
length: Some(1000), length: Some(1000),
@ -653,14 +683,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 1532114, view_count: Some(1532114),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "CH55WpJxF1s", id: "CH55WpJxF1s",
title: "What #Elongate Is Really About", title: "What #Elongate Is Really About",
length: Some(122), length: Some(122),
@ -686,14 +718,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 511601, view_count: Some(511601),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "PPcsZwUv350", id: "PPcsZwUv350",
title: "Vladimir Putin\'s Three Choices", title: "Vladimir Putin\'s Three Choices",
length: Some(505), length: Some(505),
@ -719,14 +753,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 662099, view_count: Some(662099),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "B78-FgNqdc8", id: "B78-FgNqdc8",
title: "Was I WRONG About Electric Buses?", title: "Was I WRONG About Electric Buses?",
length: Some(1536), length: Some(1536),
@ -752,14 +788,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 549826, view_count: Some(549826),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "JCXLwOMSDxk", id: "JCXLwOMSDxk",
title: "If We Treated Afghanistan Like Ukraine", title: "If We Treated Afghanistan Like Ukraine",
length: Some(92), length: Some(92),
@ -785,14 +823,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 538197, view_count: Some(538197),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "IpIWswLYAbA", id: "IpIWswLYAbA",
title: "Who\'s Winning the War for Ukraine?", title: "Who\'s Winning the War for Ukraine?",
length: Some(646), length: Some(646),
@ -818,14 +858,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("5 months ago"), publish_date_txt: Some("5 months ago"),
view_count: 536648, view_count: Some(536648),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "NIItoD1Ebh0", id: "NIItoD1Ebh0",
title: "Old Habits Die Hard", title: "Old Habits Die Hard",
length: Some(107), length: Some(107),
@ -851,14 +893,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("5 months ago"), publish_date_txt: Some("5 months ago"),
view_count: 724630, view_count: Some(724630),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "pENUV9DLa2g", id: "pENUV9DLa2g",
title: "Anarcho-Capitalism In Practice III - The Final Attempt", title: "Anarcho-Capitalism In Practice III - The Final Attempt",
length: Some(600), length: Some(600),
@ -884,14 +928,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("5 months ago"), publish_date_txt: Some("5 months ago"),
view_count: 426960, view_count: Some(426960),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "gFGQI8P9BMg", id: "gFGQI8P9BMg",
title: "How The Gravel Institute Lies To You About Ukraine", title: "How The Gravel Institute Lies To You About Ukraine",
length: Some(2472), length: Some(2472),
@ -917,14 +963,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("6 months ago"), publish_date_txt: Some("6 months ago"),
view_count: 735941, view_count: Some(735941),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "AVLevneWvaE", id: "AVLevneWvaE",
title: "Why Russia Can\'t Achieve Air Supremacy In Ukraine", title: "Why Russia Can\'t Achieve Air Supremacy In Ukraine",
length: Some(188), length: Some(188),
@ -950,14 +998,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("6 months ago"), publish_date_txt: Some("6 months ago"),
view_count: 502205, view_count: Some(502205),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "MfRcY90OccY", id: "MfRcY90OccY",
title: "Can Ukraine Actually WIN This?", title: "Can Ukraine Actually WIN This?",
length: Some(606), length: Some(606),
@ -983,14 +1033,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("6 months ago"), publish_date_txt: Some("6 months ago"),
view_count: 718668, view_count: Some(718668),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "dQXwreYzJ40", id: "dQXwreYzJ40",
title: "Here\'s What Will Happen To Ukraine [Update: yep, called it]", title: "Here\'s What Will Happen To Ukraine [Update: yep, called it]",
length: Some(397), length: Some(397),
@ -1016,14 +1068,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 months ago"), publish_date_txt: Some("7 months ago"),
view_count: 775830, view_count: Some(775830),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "-OO3RiNMDB8", id: "-OO3RiNMDB8",
title: "Assessing The Russian Invasion Threat", title: "Assessing The Russian Invasion Threat",
length: Some(655), length: Some(655),
@ -1049,14 +1103,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 months ago"), publish_date_txt: Some("7 months ago"),
view_count: 480357, view_count: Some(480357),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "obMTYs30E9A", id: "obMTYs30E9A",
title: "Ukraine - The Country That Defied Vladimir Putin", title: "Ukraine - The Country That Defied Vladimir Putin",
length: Some(2498), length: Some(2498),
@ -1082,14 +1138,16 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 months ago"), publish_date_txt: Some("7 months ago"),
view_count: 460878, view_count: Some(460878),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
ChannelVideo( VideoItem(
id: "4-2bR1iFlhk", id: "4-2bR1iFlhk",
title: "\"Wait, Russia isn\'t in NATO?!\" Insane Debate on Ukraine, US Politics, and more!", title: "\"Wait, Russia isn\'t in NATO?!\" Insane Debate on Ukraine, US Politics, and more!",
length: Some(12151), length: Some(12151),
@ -1115,14 +1173,17 @@ Channel(
height: 188, height: 188,
), ),
], ],
channel: None,
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 months ago"), publish_date_txt: Some("7 months ago"),
view_count: 228151, view_count: Some(228151),
is_live: false, is_live: false,
is_short: false, is_short: false,
is_upcoming: false, is_upcoming: false,
short_description: None,
), ),
], ],
ctoken: Some("4qmFsgKnARIYVUNjdmZIYS1HSFNPSEZBalUwLUllNTdBGlxFZ1oyYVdSbGIzTVlBeUFBTUFFNEFlb0RNa1ZuYzBsdFlYbFhlRkJZYnpWMlltcEJVMmQ1VFVGRk5FaHJTVTFEVFdGVWVrcHJSMFZPUzJzMmNqQkNVMEZHVVVGQpoCLGJyb3dzZS1mZWVkVUNjdmZIYS1HSFNPSEZBalUwLUllNTdBdmlkZW9zMTAy"), ctoken: Some("4qmFsgKnARIYVUNjdmZIYS1HSFNPSEZBalUwLUllNTdBGlxFZ1oyYVdSbGIzTVlBeUFBTUFFNEFlb0RNa1ZuYzBsdFlYbFhlRkJZYnpWMlltcEJVMmQ1VFVGRk5FaHJTVTFEVFdGVWVrcHJSMFZPUzJzMmNqQkNVMEZHVVVGQpoCLGJyb3dzZS1mZWVkVUNjdmZIYS1HSFNPSEZBalUwLUllNTdBdmlkZW9zMTAy"),
endpoint: browse,
), ),
) )

View file

@ -1,11 +1,11 @@
--- ---
source: src/client/channel.rs source: src/client/pagination.rs
expression: map_res.c expression: map_res.c
--- ---
Paginator( Paginator(
count: None, count: None,
items: [ items: [
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHutdg1kZkG7aAYhjoJnk2fc", id: "PLvOlSehNtuHutdg1kZkG7aAYhjoJnk2fc",
name: "Nixie Tube Display Project", name: "Nixie Tube Display Project",
thumbnail: [ thumbnail: [
@ -15,9 +15,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(9), video_count: Some(9),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHujYmL_-5CBUg-za2osSUVI", id: "PLvOlSehNtuHujYmL_-5CBUg-za2osSUVI",
name: "Mystery Teardown", name: "Mystery Teardown",
thumbnail: [ thumbnail: [
@ -27,9 +28,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(16), video_count: Some(16),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHuGQmy-eJgqB28b2AWKteuG", id: "PLvOlSehNtuHuGQmy-eJgqB28b2AWKteuG",
name: "EEVsmoke", name: "EEVsmoke",
thumbnail: [ thumbnail: [
@ -39,9 +41,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(2), video_count: Some(2),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHuSab0CmpulB2Wv8Kz0985m", id: "PLvOlSehNtuHuSab0CmpulB2Wv8Kz0985m",
name: "EEVcomments", name: "EEVcomments",
thumbnail: [ thumbnail: [
@ -51,9 +54,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(1), video_count: Some(1),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvtQ5FxEivbCGxp4t3W8zKE", id: "PLvOlSehNtuHvtQ5FxEivbCGxp4t3W8zKE",
name: "Spectrum Analyser", name: "Spectrum Analyser",
thumbnail: [ thumbnail: [
@ -63,9 +67,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(11), video_count: Some(11),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHuJUxiTbVKHzWjvIVf1NVOl", id: "PLvOlSehNtuHuJUxiTbVKHzWjvIVf1NVOl",
name: "Space", name: "Space",
thumbnail: [ thumbnail: [
@ -75,9 +80,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(5), video_count: Some(5),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHtTXTVCXVDIRKV442ynD7Pz", id: "PLvOlSehNtuHtTXTVCXVDIRKV442ynD7Pz",
name: "Lunar Rover", name: "Lunar Rover",
thumbnail: [ thumbnail: [
@ -87,9 +93,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(1), video_count: Some(1),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHsma5qL7piUiM5N4IOyuQyx", id: "PLvOlSehNtuHsma5qL7piUiM5N4IOyuQyx",
name: "Wayback Wednesday", name: "Wayback Wednesday",
thumbnail: [ thumbnail: [
@ -99,9 +106,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(1), video_count: Some(1),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvLb_HJBKqbgZ9IvEX-pVOF", id: "PLvOlSehNtuHvLb_HJBKqbgZ9IvEX-pVOF",
name: "Magazines", name: "Magazines",
thumbnail: [ thumbnail: [
@ -111,9 +119,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(4), video_count: Some(4),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHugE85Y_LckT4EhrKwo7WQe", id: "PLvOlSehNtuHugE85Y_LckT4EhrKwo7WQe",
name: "Embedded Computing", name: "Embedded Computing",
thumbnail: [ thumbnail: [
@ -123,9 +132,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(4), video_count: Some(4),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHu3GsTHwHoAXlWVcL3c3dA0", id: "PLvOlSehNtuHu3GsTHwHoAXlWVcL3c3dA0",
name: "High Speed Camera", name: "High Speed Camera",
thumbnail: [ thumbnail: [
@ -135,9 +145,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(2), video_count: Some(2),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvTyDxI-_RDK8UlPbJ5FNf9", id: "PLvOlSehNtuHvTyDxI-_RDK8UlPbJ5FNf9",
name: "Announcements & Misc", name: "Announcements & Misc",
thumbnail: [ thumbnail: [
@ -147,9 +158,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(28), video_count: Some(28),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHtT17_AeYMe-EOS_GXCBQQ1", id: "PLvOlSehNtuHtT17_AeYMe-EOS_GXCBQQ1",
name: "Interviews", name: "Interviews",
thumbnail: [ thumbnail: [
@ -159,9 +171,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(9), video_count: Some(9),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHsCTtj-T_vkpTTbBXW4sB51", id: "PLvOlSehNtuHsCTtj-T_vkpTTbBXW4sB51",
name: "Oscilloscope Tutorials", name: "Oscilloscope Tutorials",
thumbnail: [ thumbnail: [
@ -171,9 +184,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(38), video_count: Some(38),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHsKCtJJ_rlRP5qE7lN-1EMX", id: "PLvOlSehNtuHsKCtJJ_rlRP5qE7lN-1EMX",
name: "Anti-Static ESD", name: "Anti-Static ESD",
thumbnail: [ thumbnail: [
@ -183,9 +197,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(7), video_count: Some(7),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvFf9a2swL8QVMwji0wT3ha", id: "PLvOlSehNtuHvFf9a2swL8QVMwji0wT3ha",
name: "Unboxing", name: "Unboxing",
thumbnail: [ thumbnail: [
@ -195,9 +210,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(2), video_count: Some(2),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHtn9n6n-uB8VNCTrERwYxLZ", id: "PLvOlSehNtuHtn9n6n-uB8VNCTrERwYxLZ",
name: "Power Supplies", name: "Power Supplies",
thumbnail: [ thumbnail: [
@ -207,9 +223,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(43), video_count: Some(43),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHuo-6paPTh3ji7AEMpnSna6", id: "PLvOlSehNtuHuo-6paPTh3ji7AEMpnSna6",
name: "CNC Milling Machine", name: "CNC Milling Machine",
thumbnail: [ thumbnail: [
@ -219,9 +236,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(1), video_count: Some(1),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvpVeLXSGlS7EBlY3zKfIXh", id: "PLvOlSehNtuHvpVeLXSGlS7EBlY3zKfIXh",
name: "Capacitors", name: "Capacitors",
thumbnail: [ thumbnail: [
@ -231,9 +249,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(15), video_count: Some(15),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHsNGit9YgkuxsFtFNJxwgot", id: "PLvOlSehNtuHsNGit9YgkuxsFtFNJxwgot",
name: "PCB Assembly", name: "PCB Assembly",
thumbnail: [ thumbnail: [
@ -243,9 +262,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(5), video_count: Some(5),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvsggk5TwGdR2BZcoKRkQ2I", id: "PLvOlSehNtuHvsggk5TwGdR2BZcoKRkQ2I",
name: "3D Printing", name: "3D Printing",
thumbnail: [ thumbnail: [
@ -255,9 +275,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(6), video_count: Some(6),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHtH_DR5hAIGQ-Ty6f9TZWNV", id: "PLvOlSehNtuHtH_DR5hAIGQ-Ty6f9TZWNV",
name: "Video Editing / PC Builds", name: "Video Editing / PC Builds",
thumbnail: [ thumbnail: [
@ -267,9 +288,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(3), video_count: Some(3),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvPZ1-dDC449w_r2M0R4jtc", id: "PLvOlSehNtuHvPZ1-dDC449w_r2M0R4jtc",
name: "Solar Power Systems", name: "Solar Power Systems",
thumbnail: [ thumbnail: [
@ -279,9 +301,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(19), video_count: Some(19),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHtolTr61FnHtvZb6tRPrs8m", id: "PLvOlSehNtuHtolTr61FnHtvZb6tRPrs8m",
name: "EEVblab", name: "EEVblab",
thumbnail: [ thumbnail: [
@ -291,9 +314,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(101), video_count: Some(101),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHsc8y1buFPJZaD1kKzIxpWL", id: "PLvOlSehNtuHsc8y1buFPJZaD1kKzIxpWL",
name: "Repairs", name: "Repairs",
thumbnail: [ thumbnail: [
@ -303,9 +327,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(78), video_count: Some(78),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvBpmbLABRmSKv2b0C4LWV_", id: "PLvOlSehNtuHvBpmbLABRmSKv2b0C4LWV_",
name: "Debunking", name: "Debunking",
thumbnail: [ thumbnail: [
@ -315,9 +340,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(73), video_count: Some(73),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHs_8iObryqVCeqLIo5KTFQ-", id: "PLvOlSehNtuHs_8iObryqVCeqLIo5KTFQ-",
name: "Lab Bench Builds + ESD Mats", name: "Lab Bench Builds + ESD Mats",
thumbnail: [ thumbnail: [
@ -327,9 +353,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(9), video_count: Some(9),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvatF_8oJ2qpKxi_wWw6YN4", id: "PLvOlSehNtuHvatF_8oJ2qpKxi_wWw6YN4",
name: "Reverse Engineering", name: "Reverse Engineering",
thumbnail: [ thumbnail: [
@ -339,9 +366,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(10), video_count: Some(10),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvwQR69zYRyxSkujQs2SgLl", id: "PLvOlSehNtuHvwQR69zYRyxSkujQs2SgLl",
name: "Scams", name: "Scams",
thumbnail: [ thumbnail: [
@ -351,9 +379,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(5), video_count: Some(5),
), ),
ChannelPlaylist( PlaylistItem(
id: "PLvOlSehNtuHvRvEU3VebO2JHa1I_iIAQD", id: "PLvOlSehNtuHvRvEU3VebO2JHa1I_iIAQD",
name: "Hacking / Experiments", name: "Hacking / Experiments",
thumbnail: [ thumbnail: [
@ -363,8 +392,10 @@ Paginator(
height: 270, height: 270,
), ),
], ],
channel: None,
video_count: Some(63), video_count: Some(63),
), ),
], ],
ctoken: Some("4qmFsgLCARIYVUMyRGpGRTdYZjExVVJacVdCaWdjVk9RGnRFZ2x3YkdGNWJHbHpkSE1ZQXlBQk1BRTRBZW9EUEVOblRrUlJhbEZUU2tKSmFWVkZlREpVTW5oVVdsZG9UMlJJVmtsa2JFb3lVbFpWZWxadFZtbFVla3BMVTBkRmVGTldPWEJUVlVaU1VrTm5PQSUzRCUzRJoCL2Jyb3dzZS1mZWVkVUMyRGpGRTdYZjExVVJacVdCaWdjVk9RcGxheWxpc3RzMTA0"), ctoken: Some("4qmFsgLCARIYVUMyRGpGRTdYZjExVVJacVdCaWdjVk9RGnRFZ2x3YkdGNWJHbHpkSE1ZQXlBQk1BRTRBZW9EUEVOblRrUlJhbEZUU2tKSmFWVkZlREpVTW5oVVdsZG9UMlJJVmtsa2JFb3lVbFpWZWxadFZtbFVla3BMVTBkRmVGTldPWEJUVlVaU1VrTm5PQSUzRCUzRJoCL2Jyb3dzZS1mZWVkVUMyRGpGRTdYZjExVVJacVdCaWdjVk9RcGxheWxpc3RzMTA0"),
endpoint: browse,
) )

View file

@ -1,11 +1,11 @@
--- ---
source: src/client/search.rs source: src/client/pagination.rs
expression: map_res.c expression: map_res.c
--- ---
Paginator( Paginator(
count: Some(7250), count: Some(7250),
items: [ items: [
Video(SearchVideo( Video(VideoItem(
id: "N5AKQflK1TU", id: "N5AKQflK1TU",
title: "When you impulse buy...", title: "When you impulse buy...",
length: Some(60), length: Some(60),
@ -16,7 +16,7 @@ Paginator(
height: 720, height: 720,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -28,15 +28,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 day ago"), publish_date_txt: Some("1 day ago"),
view_count: 859366, view_count: Some(859366),
is_live: false, is_live: false,
is_short: true, is_short: false,
short_description: "shorts #jam https://doobydobap.com/recipe/hongsi_jam Instagram @doobydobap Join my discord!", is_upcoming: false,
short_description: Some("shorts #jam https://doobydobap.com/recipe/hongsi_jam Instagram @doobydobap Join my discord!"),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "OzIFALQ_YtA", id: "OzIFALQ_YtA",
title: "taste testing gam!", title: "taste testing gam!",
length: Some(60), length: Some(60),
@ -47,7 +48,7 @@ Paginator(
height: 720, height: 720,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -59,15 +60,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 days ago"), publish_date_txt: Some("3 days ago"),
view_count: 1000402, view_count: Some(1000402),
is_live: false, is_live: false,
is_short: true, is_short: false,
short_description: "shorts #fruit #mukbang Instagram @doobydobap Join my discord! https://discord.gg/doobyverse www.doobydobap.com for\u{a0}...", 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(SearchVideo( Video(VideoItem(
id: "zYHB38UlzE0", id: "zYHB38UlzE0",
title: "Q&A l relationships, burnout, privilege, college advice, living alone, and life after youtube?", title: "Q&A l relationships, burnout, privilege, college advice, living alone, and life after youtube?",
length: Some(775), length: Some(775),
@ -83,7 +85,7 @@ Paginator(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -95,15 +97,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 528795, view_count: Some(528795),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "So many questions I wasn\'t able to answer, but if you comment below I\'ll try and answer every single one of them!!!! A little bit of\u{a0}...", is_upcoming: false,
short_description: Some("So many questions I wasn\'t able to answer, but if you comment below I\'ll try and answer every single one of them!!!! A little bit of\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "GvutfmW26JQ", id: "GvutfmW26JQ",
title: "👹stay sour 🍋", title: "👹stay sour 🍋",
length: Some(52), length: Some(52),
@ -114,7 +117,7 @@ Paginator(
height: 720, height: 720,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -126,15 +129,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("8 days ago"), publish_date_txt: Some("8 days ago"),
view_count: 1096055, view_count: Some(1096055),
is_live: false, is_live: false,
is_short: true, is_short: false,
short_description: "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}...", 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(SearchVideo( Video(VideoItem(
id: "gK-jLnvVsb0", id: "gK-jLnvVsb0",
title: "Contradicting myself", title: "Contradicting myself",
length: Some(1381), length: Some(1381),
@ -150,7 +154,7 @@ Paginator(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -162,15 +166,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("8 months ago"), publish_date_txt: Some("8 months ago"),
view_count: 928968, view_count: Some(928968),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Sesame Granola Recipe 2 cups old-fashioned instant oats 2 cups mixture of seeds / nuts of your choice (I used ½ cup each of\u{a0}...", is_upcoming: false,
short_description: Some("Sesame Granola Recipe 2 cups old-fashioned instant oats 2 cups mixture of seeds / nuts of your choice (I used ½ cup each of\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "NudTbo2CJMY", id: "NudTbo2CJMY",
title: "Flying to London", title: "Flying to London",
length: Some(1078), length: Some(1078),
@ -186,7 +191,7 @@ Paginator(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -198,15 +203,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 months ago"), publish_date_txt: Some("7 months ago"),
view_count: 1137138, view_count: Some(1137138),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Tomato Beef Curry 1 packet Japanese Curry Roux 250g thinly sliced beef 2 large onions 2 tbsp butter 2 tbsp neutral oil 1 can\u{a0}...", is_upcoming: false,
short_description: Some("Tomato Beef Curry 1 packet Japanese Curry Roux 250g thinly sliced beef 2 large onions 2 tbsp butter 2 tbsp neutral oil 1 can\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "Nc0HzyDRjm0", id: "Nc0HzyDRjm0",
title: "Stekki-don ㅣ After Hours ep.2", title: "Stekki-don ㅣ After Hours ep.2",
length: Some(749), length: Some(749),
@ -222,7 +228,7 @@ Paginator(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -234,15 +240,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("8 months ago"), publish_date_txt: Some("8 months ago"),
view_count: 462437, view_count: Some(462437),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Stekki-Don (for two, or for one very hungry person) 500g Ribeye 1 tsp Kosher salt 2 tbsp unsalted butter Sauce 4 tbsp light soy\u{a0}...", is_upcoming: false,
short_description: Some("Stekki-Don (for two, or for one very hungry person) 500g Ribeye 1 tsp Kosher salt 2 tbsp unsalted butter Sauce 4 tbsp light soy\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "pvSWHm4wlxY", id: "pvSWHm4wlxY",
title: "having kids", title: "having kids",
length: Some(60), length: Some(60),
@ -253,7 +260,7 @@ Paginator(
height: 720, height: 720,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -265,15 +272,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 11285067, view_count: Some(11285067),
is_live: false, is_live: false,
is_short: true, is_short: false,
short_description: "shorts Instagram @doobydobap Join my discord! https://discord.gg/doobyverse www.doobydobap.com for recipes & stories.", is_upcoming: false,
short_description: Some("shorts Instagram @doobydobap Join my discord! https://discord.gg/doobyverse www.doobydobap.com for recipes & stories."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "fGQUWI4o__A", id: "fGQUWI4o__A",
title: "Baskin Robbins in South Korea", title: "Baskin Robbins in South Korea",
length: Some(53), length: Some(53),
@ -284,7 +292,7 @@ Paginator(
height: 720, height: 720,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -296,15 +304,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 weeks ago"), publish_date_txt: Some("3 weeks ago"),
view_count: 2415040, view_count: Some(2415040),
is_live: false, is_live: false,
is_short: true, is_short: false,
short_description: "shorts #icecream Instagram @doobydobap Join my discord! https://discord.gg/doobyverse www.doobydobap.com for recipes\u{a0}...", is_upcoming: false,
short_description: Some("shorts #icecream Instagram @doobydobap Join my discord! https://discord.gg/doobyverse www.doobydobap.com for recipes\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "GuyGyzZcumI", id: "GuyGyzZcumI",
title: "McDonald\'s Michelin Burger", title: "McDonald\'s Michelin Burger",
length: Some(59), length: Some(59),
@ -315,7 +324,7 @@ Paginator(
height: 720, height: 720,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -327,15 +336,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 5100787, view_count: Some(5100787),
is_live: false, is_live: false,
is_short: true, is_short: false,
short_description: "mcdonalds #michelin #fastfood Instagram @doobydobap Join my discord! https://discord.gg/doobyverse\u{a0}...", is_upcoming: false,
short_description: Some("mcdonalds #michelin #fastfood Instagram @doobydobap Join my discord! https://discord.gg/doobyverse\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "6VGG19W08UQ", id: "6VGG19W08UQ",
title: "Nostalgia is a powerful ingredient", title: "Nostalgia is a powerful ingredient",
length: Some(52), length: Some(52),
@ -346,7 +356,7 @@ Paginator(
height: 480, height: 480,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -358,15 +368,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("10 months ago"), publish_date_txt: Some("10 months ago"),
view_count: 55308394, view_count: Some(55308394),
is_live: false, is_live: false,
is_short: true, is_short: false,
short_description: "shorts ASMR version on my Instagram @doobydobap Join my discord! https://discord.gg/doobyverse www.doobydobap.com\u{a0}...", is_upcoming: false,
short_description: Some("shorts ASMR version on my Instagram @doobydobap Join my discord! https://discord.gg/doobyverse www.doobydobap.com\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "p3Xhx6aQEXo", id: "p3Xhx6aQEXo",
title: "Jjajangmyun ㅣ Doob Gourmand ep.2", title: "Jjajangmyun ㅣ Doob Gourmand ep.2",
length: Some(664), length: Some(664),
@ -382,7 +393,7 @@ Paginator(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -394,15 +405,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("8 months ago"), publish_date_txt: Some("8 months ago"),
view_count: 774061, view_count: Some(774061),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Stay on for bloopers! Vlog coming on Tuesday!! Location 의천각 Uicheongag 수정구 신흥동 6907번지 성남시 경기도 KR\u{a0}...", is_upcoming: false,
short_description: Some("Stay on for bloopers! Vlog coming on Tuesday!! Location 의천각 Uicheongag 수정구 신흥동 6907번지 성남시 경기도 KR\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "35Gu3Q6qEn4", id: "35Gu3Q6qEn4",
title: "Deal Breakers", title: "Deal Breakers",
length: Some(60), length: Some(60),
@ -413,7 +425,7 @@ Paginator(
height: 480, height: 480,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -425,15 +437,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("8 months ago"), publish_date_txt: Some("8 months ago"),
view_count: 12314192, view_count: Some(12314192),
is_live: false, is_live: false,
is_short: true, is_short: false,
short_description: "shorts another deal breaker: people who like chocolate chip banana bread over regular-- you heard me Recipe: Wet: 3 very ripe\u{a0}...", is_upcoming: false,
short_description: Some("shorts another deal breaker: people who like chocolate chip banana bread over regular-- you heard me Recipe: Wet: 3 very ripe\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "JoUdBrUpBN0", id: "JoUdBrUpBN0",
title: "Jjambbong, jjajangmyeon\'s biggest rival", title: "Jjambbong, jjajangmyeon\'s biggest rival",
length: Some(56), length: Some(56),
@ -444,7 +457,7 @@ Paginator(
height: 480, height: 480,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -456,15 +469,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 year ago"), publish_date_txt: Some("1 year ago"),
view_count: 4266748, view_count: Some(4266748),
is_live: false, is_live: false,
is_short: true, is_short: false,
short_description: "shorts Recipe on my website at www.doobydobap.com/recipe.", is_upcoming: false,
short_description: Some("shorts Recipe on my website at www.doobydobap.com/recipe."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "l76ovWsPLi8", id: "l76ovWsPLi8",
title: "Jjagglee, Ricotta Persimmon Toast, Plants, and Pringles! l Home Alone All Day Vlog", title: "Jjagglee, Ricotta Persimmon Toast, Plants, and Pringles! l Home Alone All Day Vlog",
length: Some(673), length: Some(673),
@ -480,7 +494,7 @@ Paginator(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -492,15 +506,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("9 months ago"), publish_date_txt: Some("9 months ago"),
view_count: 439888, view_count: Some(439888),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Ingredients for jjaglee 1 cup pork belly 1 cup fermented kimchi ½ onion 1 leek 1 firm tofu 1.5 tbsp gochujang 2 tbsp coarse\u{a0}...", is_upcoming: false,
short_description: Some("Ingredients for jjaglee 1 cup pork belly 1 cup fermented kimchi ½ onion 1 leek 1 firm tofu 1.5 tbsp gochujang 2 tbsp coarse\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "zt1Lx9L619w", id: "zt1Lx9L619w",
title: "The biggest privilege my rich friends have", title: "The biggest privilege my rich friends have",
length: Some(58), length: Some(58),
@ -511,7 +526,7 @@ Paginator(
height: 480, height: 480,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -523,14 +538,16 @@ Paginator(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("6 months ago"), publish_date_txt: Some("6 months ago"),
view_count: 9312774, view_count: Some(9312774),
is_live: false, is_live: false,
is_short: true, is_short: false,
short_description: "shorts #japanese #curry Tomato Beef Curry 1 packet Japanese Curry Roux 250g thinly sliced beef 2 large onions 2 tbsp butter 2\u{a0}...", is_upcoming: false,
short_description: Some("shorts #japanese #curry Tomato Beef Curry 1 packet Japanese Curry Roux 250g thinly sliced beef 2 large onions 2 tbsp butter 2\u{a0}..."),
)), )),
], ],
ctoken: Some("EpMDEgpkb29ieWRvYmFwGoQDU0NpQ0FRdE9OVUZMVVdac1N6RlVWWUlCQzA5NlNVWkJURkZmV1hSQmdnRUxjako1WlRaNlZ6QnVZazJDQVF0NldVaENNemhWYkhwRk1JSUJDMGQyZFhSbWJWY3lOa3BSZ2dFTFVuSnZXWEJNZUhoT2FsbUNBUXRzTkRkUmRYVmtjMW96TklJQkMyZExMV3BNYm5aV2MySXdnZ0VMVG5Wa1ZHSnZNa05LVFZtQ0FRdE9ZekJJZW5sRVVtcHRNSUlCQzNCMlUxZEliVFIzYkhoWmdnRUxaa2RSVlZkSk5HOWZYMEdDQVF0UWVFZHRVRFIyWDBFek9JSUJDMGQxZVVkNWVscGpkVzFKZ2dFTE5sWkhSekU1VnpBNFZWR0NBUXR3TTFob2VEWmhVVVZZYjRJQkN6TTFSM1V6VVRaeFJXNDBnZ0VMU205VlpFSnlWWEJDVGpDQ0FRdHNOelp2ZGxkelVFeHBPSUlCQzNwME1VeDRPVXcyTVRsM3NnRUdDZ1FJSnhBRBiB4OgYIgtzZWFyY2gtZmVlZA%3D%3D"), ctoken: Some("EpMDEgpkb29ieWRvYmFwGoQDU0NpQ0FRdE9OVUZMVVdac1N6RlVWWUlCQzA5NlNVWkJURkZmV1hSQmdnRUxjako1WlRaNlZ6QnVZazJDQVF0NldVaENNemhWYkhwRk1JSUJDMGQyZFhSbWJWY3lOa3BSZ2dFTFVuSnZXWEJNZUhoT2FsbUNBUXRzTkRkUmRYVmtjMW96TklJQkMyZExMV3BNYm5aV2MySXdnZ0VMVG5Wa1ZHSnZNa05LVFZtQ0FRdE9ZekJJZW5sRVVtcHRNSUlCQzNCMlUxZEliVFIzYkhoWmdnRUxaa2RSVlZkSk5HOWZYMEdDQVF0UWVFZHRVRFIyWDBFek9JSUJDMGQxZVVkNWVscGpkVzFKZ2dFTE5sWkhSekU1VnpBNFZWR0NBUXR3TTFob2VEWmhVVVZZYjRJQkN6TTFSM1V6VVRaeFJXNDBnZ0VMU205VlpFSnlWWEJDVGpDQ0FRdHNOelp2ZGxkelVFeHBPSUlCQzNwME1VeDRPVXcyTVRsM3NnRUdDZ1FJSnhBRBiB4OgYIgtzZWFyY2gtZmVlZA%3D%3D"),
endpoint: browse,
) )

View file

@ -3110,6 +3110,7 @@ Playlist(
), ),
], ],
ctoken: Some("4qmFsgJhEiRWTFBMNWREeDY4MVQ0YlI3WkYxSXVXek92MW9tbFJiRTdQaUoaFENBRjZCbEJVT2tOSFdRJTNEJTNEmgIiUEw1ZER4NjgxVDRiUjdaRjFJdVd6T3Yxb21sUmJFN1BpSg%3D%3D"), ctoken: Some("4qmFsgJhEiRWTFBMNWREeDY4MVQ0YlI3WkYxSXVXek92MW9tbFJiRTdQaUoaFENBRjZCbEJVT2tOSFdRJTNEJTNEmgIiUEw1ZER4NjgxVDRiUjdaRjFJdVd6T3Yxb21sUmJFN1BpSg%3D%3D"),
endpoint: browse,
), ),
video_count: 495, video_count: 495,
thumbnail: [ thumbnail: [

View file

@ -2056,6 +2056,7 @@ Playlist(
), ),
], ],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
video_count: 66, video_count: 66,
thumbnail: [ thumbnail: [

View file

@ -3017,6 +3017,7 @@ Playlist(
), ),
], ],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
video_count: 97, video_count: 97,
thumbnail: [ thumbnail: [

View file

@ -6,7 +6,7 @@ SearchResult(
items: Paginator( items: Paginator(
count: Some(7499), count: Some(7499),
items: [ items: [
Channel(SearchChannel( Channel(ChannelItem(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -26,7 +26,7 @@ SearchResult(
video_count: 219, video_count: 219,
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}...", 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(SearchVideo( Video(VideoItem(
id: "1VW7iXRIrc8", id: "1VW7iXRIrc8",
title: "Alone, in the City of Love", title: "Alone, in the City of Love",
length: Some(1875), length: Some(1875),
@ -42,7 +42,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -54,15 +54,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("6 months ago"), publish_date_txt: Some("6 months ago"),
view_count: 531580, view_count: Some(531580),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "I know it\'s a little long, but I hope you enjoyed this Paris vlog :} Location Udon Restaurant: Sanukiya 9 Rue d\'Argenteuil, Paris\u{a0}...", is_upcoming: false,
short_description: Some("I know it\'s a little long, but I hope you enjoyed this Paris vlog :} Location Udon Restaurant: Sanukiya 9 Rue d\'Argenteuil, Paris\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "9NuhKCv3crg", id: "9NuhKCv3crg",
title: "the end.", title: "the end.",
length: Some(982), length: Some(982),
@ -78,7 +79,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -90,15 +91,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 days ago"), publish_date_txt: Some("7 days ago"),
view_count: 974475, view_count: Some(974475),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "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}...", 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(SearchVideo( Video(VideoItem(
id: "hGbQ2WM9nOo", id: "hGbQ2WM9nOo",
title: "Why does everything bad for you taste good ㅣ CHILI OIL RAMEN", title: "Why does everything bad for you taste good ㅣ CHILI OIL RAMEN",
length: Some(428), length: Some(428),
@ -114,7 +116,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -126,15 +128,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 1034415, view_count: Some(1034415),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "https://partner.bokksu.com/doobydobap use code DOOBYDOBAP to get $15 off your first bokksu order! Instagram @doobydobap\u{a0}...", is_upcoming: false,
short_description: Some("https://partner.bokksu.com/doobydobap use code DOOBYDOBAP to get $15 off your first bokksu order! Instagram @doobydobap\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "PxGmP4v_A38", id: "PxGmP4v_A38",
title: "Alone and Thriving l late night korean convenience store, muji kitchenware haul, spring cleaning!", title: "Alone and Thriving l late night korean convenience store, muji kitchenware haul, spring cleaning!",
length: Some(1437), length: Some(1437),
@ -150,7 +153,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -162,15 +165,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 831908, view_count: Some(831908),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "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}...", 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(SearchVideo( Video(VideoItem(
id: "38Gd6TdmNVs", id: "38Gd6TdmNVs",
title: "KOREAN BARBECUE l doob gourmand ep.3", title: "KOREAN BARBECUE l doob gourmand ep.3",
length: Some(525), length: Some(525),
@ -186,7 +190,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -198,15 +202,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 weeks ago"), publish_date_txt: Some("2 weeks ago"),
view_count: 354486, view_count: Some(354486),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "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}...", 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(SearchVideo( Video(VideoItem(
id: "CutR_1SDDzY", id: "CutR_1SDDzY",
title: "feels good to be back", title: "feels good to be back",
length: Some(1159), length: Some(1159),
@ -222,7 +227,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -234,15 +239,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("1 month ago"), publish_date_txt: Some("1 month ago"),
view_count: 524950, view_count: Some(524950),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "I missed you guys. Happy to see you guys back. I\'ve really been working on my mental health, educating myself with different food\u{a0}...", is_upcoming: false,
short_description: Some("I missed you guys. Happy to see you guys back. I\'ve really been working on my mental health, educating myself with different food\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "pRVSdUxdsVw", id: "pRVSdUxdsVw",
title: "Repairing...", title: "Repairing...",
length: Some(965), length: Some(965),
@ -258,7 +264,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -270,15 +276,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 weeks ago"), publish_date_txt: Some("4 weeks ago"),
view_count: 528595, view_count: Some(528595),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "The word repair stems from the Latin word reparare, from re- \'back\' and parare \'make ready.\' And I feel that\'s exactly how I feel\u{a0}...", is_upcoming: false,
short_description: Some("The word repair stems from the Latin word reparare, from re- \'back\' and parare \'make ready.\' And I feel that\'s exactly how I feel\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "KUz7oArksR4", id: "KUz7oArksR4",
title: "running away", title: "running away",
length: Some(1023), length: Some(1023),
@ -294,7 +301,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -306,15 +313,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 717515, view_count: Some(717515),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "for now... more adventures to come! Music by Mark Generous - A Summer Day - https://thmatc.co/?l=CF6C5FFF Instagram\u{a0}...", is_upcoming: false,
short_description: Some("for now... more adventures to come! Music by Mark Generous - A Summer Day - https://thmatc.co/?l=CF6C5FFF Instagram\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "sPb2gyN-hnE", id: "sPb2gyN-hnE",
title: "worth fighting for", title: "worth fighting for",
length: Some(1232), length: Some(1232),
@ -330,7 +338,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -342,15 +350,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("2 months ago"), publish_date_txt: Some("2 months ago"),
view_count: 624386, view_count: Some(624386),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Please be respectful in the comments section! I will not be tolerating any hateful/derogatory speech *barking noise* Music\u{a0}...", is_upcoming: false,
short_description: Some("Please be respectful in the comments section! I will not be tolerating any hateful/derogatory speech *barking noise* Music\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "rriwHj8U664", id: "rriwHj8U664",
title: "my seoul apartment tour", title: "my seoul apartment tour",
length: Some(721), length: Some(721),
@ -366,7 +375,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -378,15 +387,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 696942, view_count: Some(696942),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Korea has an interesting rent structure called junseh where you pay a higher security deposit in turn for lower rent! And before\u{a0}...", is_upcoming: false,
short_description: Some("Korea has an interesting rent structure called junseh where you pay a higher security deposit in turn for lower rent! And before\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "PXsK9-CFoH4", id: "PXsK9-CFoH4",
title: "waiting...", title: "waiting...",
length: Some(1455), length: Some(1455),
@ -402,7 +412,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -414,15 +424,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 923749, view_count: Some(923749),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "tuna kimchi jook 2 cups cooked rice 3 cups water 1 cup kimchi 320g canned tuna 1 tbsp perilla seed oil 1 onion 1 tbsp gochujang\u{a0}...", is_upcoming: false,
short_description: Some("tuna kimchi jook 2 cups cooked rice 3 cups water 1 cup kimchi 320g canned tuna 1 tbsp perilla seed oil 1 onion 1 tbsp gochujang\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "bXbmYelTnhw", id: "bXbmYelTnhw",
title: "Doobydobap rates British desserts!", title: "Doobydobap rates British desserts!",
length: Some(865), length: Some(865),
@ -438,7 +449,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCOgGAfSUy5LvEyVS_LF5kdw", id: "UCOgGAfSUy5LvEyVS_LF5kdw",
name: "JOLLY", name: "JOLLY",
avatar: [ avatar: [
@ -450,15 +461,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("6 months ago"), publish_date_txt: Some("6 months ago"),
view_count: 1282467, view_count: Some(1282467),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Today we introduce @Doobydobap to the best of British desserts! Massive thanks to Dooby for joining us for this episode.", is_upcoming: false,
short_description: Some("Today we introduce @Doobydobap to the best of British desserts! Massive thanks to Dooby for joining us for this episode."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "0onVbAuBGWI", id: "0onVbAuBGWI",
title: "Out of Control", title: "Out of Control",
length: Some(1125), length: Some(1125),
@ -474,7 +486,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -486,15 +498,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("8 months ago"), publish_date_txt: Some("8 months ago"),
view_count: 1649656, view_count: Some(1649656),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Hey doobies, I know I promised a cookie recipe in my last vlog, but I haven\'t yet developed one of my own just yet-- still recipe\u{a0}...", is_upcoming: false,
short_description: Some("Hey doobies, I know I promised a cookie recipe in my last vlog, but I haven\'t yet developed one of my own just yet-- still recipe\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "FKJtrUeol3o", id: "FKJtrUeol3o",
title: "with quantity comes quality", title: "with quantity comes quality",
length: Some(1140), length: Some(1140),
@ -510,7 +523,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -522,15 +535,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("4 months ago"), publish_date_txt: Some("4 months ago"),
view_count: 1085725, view_count: Some(1085725),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "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}...", 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(SearchVideo( Video(VideoItem(
id: "dkMtSrjDLO0", id: "dkMtSrjDLO0",
title: "How to make Naruto\'s favorite ramen", title: "How to make Naruto\'s favorite ramen",
length: Some(802), length: Some(802),
@ -546,7 +560,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -558,15 +572,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("10 months ago"), publish_date_txt: Some("10 months ago"),
view_count: 1327833, view_count: Some(1327833),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Broth * 1 large chicken * 1 leek & ½ onion charred * 1 leek & ½ onion * 1 tbsp ginger * 6 garlic cloves Tare * leftover cha shu\u{a0}...", is_upcoming: false,
short_description: Some("Broth * 1 large chicken * 1 leek & ½ onion charred * 1 leek & ½ onion * 1 tbsp ginger * 6 garlic cloves Tare * leftover cha shu\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "r2ye6zW0nbM", id: "r2ye6zW0nbM",
title: "a wedding", title: "a wedding",
length: Some(1207), length: Some(1207),
@ -582,7 +597,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -594,15 +609,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("3 months ago"), publish_date_txt: Some("3 months ago"),
view_count: 1052801, view_count: Some(1052801),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Ginger Pork Recipe! https://doobydobap.com/recipe/ginger-pork-shogayaki - Instagram @doobydobap Join my discord!", is_upcoming: false,
short_description: Some("Ginger Pork Recipe! https://doobydobap.com/recipe/ginger-pork-shogayaki - Instagram @doobydobap Join my discord!"),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "NudTbo2CJMY", id: "NudTbo2CJMY",
title: "Flying to London", title: "Flying to London",
length: Some(1078), length: Some(1078),
@ -618,7 +634,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -630,15 +646,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("7 months ago"), publish_date_txt: Some("7 months ago"),
view_count: 1137136, view_count: Some(1137136),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Tomato Beef Curry 1 packet Japanese Curry Roux 250g thinly sliced beef 2 large onions 2 tbsp butter 2 tbsp neutral oil 1 can\u{a0}...", is_upcoming: false,
short_description: Some("Tomato Beef Curry 1 packet Japanese Curry Roux 250g thinly sliced beef 2 large onions 2 tbsp butter 2 tbsp neutral oil 1 can\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "gK-jLnvVsb0", id: "gK-jLnvVsb0",
title: "Contradicting myself", title: "Contradicting myself",
length: Some(1381), length: Some(1381),
@ -654,7 +671,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -666,15 +683,16 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("8 months ago"), publish_date_txt: Some("8 months ago"),
view_count: 928967, view_count: Some(928967),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Sesame Granola Recipe 2 cups old-fashioned instant oats 2 cups mixture of seeds / nuts of your choice (I used ½ cup each of\u{a0}...", is_upcoming: false,
short_description: Some("Sesame Granola Recipe 2 cups old-fashioned instant oats 2 cups mixture of seeds / nuts of your choice (I used ½ cup each of\u{a0}..."),
)), )),
Video(SearchVideo( Video(VideoItem(
id: "fAFFTOpUNWo", id: "fAFFTOpUNWo",
title: "Come Grocery Shopping with Me", title: "Come Grocery Shopping with Me",
length: Some(1126), length: Some(1126),
@ -690,7 +708,7 @@ SearchResult(
height: 404, height: 404,
), ),
], ],
channel: ChannelTag( channel: Some(ChannelTag(
id: "UCh8gHdtzO2tXd593_bjErWg", id: "UCh8gHdtzO2tXd593_bjErWg",
name: "Doobydobap", name: "Doobydobap",
avatar: [ avatar: [
@ -702,16 +720,18 @@ SearchResult(
], ],
verification: verified, verification: verified,
subscriber_count: None, subscriber_count: None,
), )),
publish_date: "[date]", publish_date: "[date]",
publish_date_txt: Some("8 months ago"), publish_date_txt: Some("8 months ago"),
view_count: 1077297, view_count: Some(1077297),
is_live: false, is_live: false,
is_short: false, is_short: false,
short_description: "Pecan Banana Bread with Coffee Liquor Recipe https://doobydobap.com/recipe/pecan-banana-bread-with-coffee-liquor Music\u{a0}...", is_upcoming: false,
short_description: Some("Pecan Banana Bread with Coffee Liquor Recipe https://doobydobap.com/recipe/pecan-banana-bread-with-coffee-liquor Music\u{a0}..."),
)), )),
], ],
ctoken: Some("EqsDEgpkb29ieWRvYmFwGpwDU0JTQ0FSaFZRMmc0WjBoa2RIcFBNblJZWkRVNU0xOWlha1Z5VjJlQ0FRc3hWbGMzYVZoU1NYSmpPSUlCQ3psT2RXaExRM1l6WTNKbmdnRUxhRWRpVVRKWFRUbHVUMi1DQVF0UWVFZHRVRFIyWDBFek9JSUJDek00UjJRMlZHUnRUbFp6Z2dFTFEzVjBVbDh4VTBSRWVsbUNBUXR3VWxaVFpGVjRaSE5XZDRJQkMwdFZlamR2UVhKcmMxSTBnZ0VMYzFCaU1tZDVUaTFvYmtXQ0FRdHljbWwzU0dvNFZUWTJOSUlCQzFCWWMwczVMVU5HYjBnMGdnRUxZbGhpYlZsbGJGUnVhSGVDQVFzd2IyNVdZa0YxUWtkWFNZSUJDMFpMU25SeVZXVnZiRE52Z2dFTFpHdE5kRk55YWtSTVR6Q0NBUXR5TW5sbE5ucFhNRzVpVFlJQkMwNTFaRlJpYnpKRFNrMVpnZ0VMWjBzdGFreHVkbFp6WWpDQ0FRdG1RVVpHVkU5d1ZVNVhiN0lCQmdvRUNCY1FBZyUzRCUzRBiB4OgYIgtzZWFyY2gtZmVlZA%3D%3D"), ctoken: Some("EqsDEgpkb29ieWRvYmFwGpwDU0JTQ0FSaFZRMmc0WjBoa2RIcFBNblJZWkRVNU0xOWlha1Z5VjJlQ0FRc3hWbGMzYVZoU1NYSmpPSUlCQ3psT2RXaExRM1l6WTNKbmdnRUxhRWRpVVRKWFRUbHVUMi1DQVF0UWVFZHRVRFIyWDBFek9JSUJDek00UjJRMlZHUnRUbFp6Z2dFTFEzVjBVbDh4VTBSRWVsbUNBUXR3VWxaVFpGVjRaSE5XZDRJQkMwdFZlamR2UVhKcmMxSTBnZ0VMYzFCaU1tZDVUaTFvYmtXQ0FRdHljbWwzU0dvNFZUWTJOSUlCQzFCWWMwczVMVU5HYjBnMGdnRUxZbGhpYlZsbGJGUnVhSGVDQVFzd2IyNVdZa0YxUWtkWFNZSUJDMFpMU25SeVZXVnZiRE52Z2dFTFpHdE5kRk55YWtSTVR6Q0NBUXR5TW5sbE5ucFhNRzVpVFlJQkMwNTFaRlJpYnpKRFNrMVpnZ0VMWjBzdGFreHVkbFp6WWpDQ0FRdG1RVVpHVkU5d1ZVNVhiN0lCQmdvRUNCY1FBZyUzRCUzRBiB4OgYIgtzZWFyY2gtZmVlZA%3D%3D"),
endpoint: browse,
), ),
corrected_query: Some("doobydobap"), corrected_query: Some("doobydobap"),
) )

View file

@ -7,6 +7,7 @@ SearchResult(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
corrected_query: None, corrected_query: None,
) )

View file

@ -6,7 +6,7 @@ SearchResult(
items: Paginator( items: Paginator(
count: Some(18932046), count: Some(18932046),
items: [ items: [
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_nmS3YoxSwVVQk9lEQJ0UX4ZCjXsW_psU8", id: "RDCLAK5uy_nmS3YoxSwVVQk9lEQJ0UX4ZCjXsW_psU8",
name: "Pop\'s Biggest Hits", name: "Pop\'s Biggest Hits",
thumbnail: [ thumbnail: [
@ -31,21 +31,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 225, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "XfEMj-z3TtA", avatar: [],
title: "STAY", verification: none,
length: Some(142), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(225),
id: "MozAXGgC1Mc",
title: "Sugar",
length: Some(236),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_mVJ3RRi_YBfUJnZnQxLAedQQcXHujbUcg", id: "RDCLAK5uy_mVJ3RRi_YBfUJnZnQxLAedQQcXHujbUcg",
name: "Pump-Up Pop", name: "Pump-Up Pop",
thumbnail: [ thumbnail: [
@ -70,21 +65,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 100, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "J7p4bzqLvCw", avatar: [],
title: "Blinding Lights", verification: none,
length: Some(202), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(100),
id: "G1ej5up7JG0",
title: "Shivers",
length: Some(208),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_mfdqvCAl8wodlx2P2_Ai2gNkiRDAufkkI", id: "RDCLAK5uy_mfdqvCAl8wodlx2P2_Ai2gNkiRDAufkkI",
name: "Happy Pop Hits", name: "Happy Pop Hits",
thumbnail: [ thumbnail: [
@ -109,21 +99,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 59, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "52QG9C9dnLM", avatar: [],
title: "Better Days", verification: none,
length: Some(161), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(59),
id: "ntG3GQdY_Ok",
title: "Light Switch",
length: Some(186),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_nHSqCJjDrW9HBhCNdF6tWPdnOMngOv0wA", id: "RDCLAK5uy_nHSqCJjDrW9HBhCNdF6tWPdnOMngOv0wA",
name: "Pop Gold", name: "Pop Gold",
thumbnail: [ thumbnail: [
@ -148,21 +133,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 100, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "XqoanTj5pNY", avatar: [],
title: "Someone Like You", verification: none,
length: Some(286), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(100),
id: "th92jw2CFOA",
title: "When I Was Your Man",
length: Some(214),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_lb6CVU6S4uVugLVNTU9WhqfaomWAgnho4", id: "RDCLAK5uy_lb6CVU6S4uVugLVNTU9WhqfaomWAgnho4",
name: "Shout-Out Pop Hits", name: "Shout-Out Pop Hits",
thumbnail: [ thumbnail: [
@ -187,21 +167,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 50, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "cTr-aGK-LpA", avatar: [],
title: "My Head & My Heart", verification: none,
length: Some(175), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(50),
id: "xn0-IZZ6YO4",
title: "abcdefu",
length: Some(169),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_nDL8KeBrUagwyISwNmyEiSfYgz1gVCesg", id: "RDCLAK5uy_nDL8KeBrUagwyISwNmyEiSfYgz1gVCesg",
name: "Mellow Pop Classics", name: "Mellow Pop Classics",
thumbnail: [ thumbnail: [
@ -226,21 +201,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 50, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "fdz_cabS9BU", avatar: [],
title: "Thinking out Loud", verification: none,
length: Some(282), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(50),
id: "BRbTpCrHv4o",
title: "Broken Strings",
length: Some(251),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "PLDIoUOhQQPlVr3qepMVRsDe4T8vNQsvno", id: "PLDIoUOhQQPlVr3qepMVRsDe4T8vNQsvno",
name: "Türkçe Pop Şarkılar 2022 - Yeni Hit Şarkılar 2022", name: "Türkçe Pop Şarkılar 2022 - Yeni Hit Şarkılar 2022",
thumbnail: [ thumbnail: [
@ -265,21 +235,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 220, channel: Some(ChannelTag(
first_videos: [ id: "UCX9oPuvJYZsG8wnHTwOBVPA",
SearchPlaylistVideo( name: "Chillax",
id: "zU2_jPxz9q4", avatar: [],
title: "Ara - Zeynep Bastık (Paro Official ZB Version) | Music Video", verification: none,
length: Some(201), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(220),
id: "vHIf_Gk8GLg",
title: "Mustafa Ceceli & Indira Elemes - İlla",
length: Some(153),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_nfs_t4FUu00E5ED6lveEBBX1VMYe1mFjk", id: "RDCLAK5uy_nfs_t4FUu00E5ED6lveEBBX1VMYe1mFjk",
name: "Dance-Pop Bangers", name: "Dance-Pop Bangers",
thumbnail: [ thumbnail: [
@ -304,21 +269,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 100, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "hJWSZDJb-W4", avatar: [],
title: "Bad Habits", verification: none,
length: Some(231), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(100),
id: "c5l4CGQozWY",
title: "Work from Home",
length: Some(215),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_m_0U5VQNyyzwwH1lRi7cPAAGXqNQnAOqY", id: "RDCLAK5uy_m_0U5VQNyyzwwH1lRi7cPAAGXqNQnAOqY",
name: "Laid-Back Sofa Pop", name: "Laid-Back Sofa Pop",
thumbnail: [ thumbnail: [
@ -343,21 +303,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 67, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "T7iuw9Qx7t4", avatar: [],
title: "Astronomy", verification: none,
length: Some(244), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(67),
id: "p-IXgwqhfmg",
title: "Love Yourself",
length: Some(234),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_mHW5bcduhjB-PkTePAe6EoRMj1xNT8gzY", id: "RDCLAK5uy_mHW5bcduhjB-PkTePAe6EoRMj1xNT8gzY",
name: "K-Pop Girl Crush", name: "K-Pop Girl Crush",
thumbnail: [ thumbnail: [
@ -382,21 +337,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 78, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "18nDrsoii5M", avatar: [],
title: "붐바야 (Boombayah)", verification: none,
length: Some(241), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(78),
id: "miqQAzOXPBo",
title: "달라달라 DALLA DALLA",
length: Some(200),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_kPqJ_FiGk-lbXtgM4IF42uokskSJZiVTI", id: "RDCLAK5uy_kPqJ_FiGk-lbXtgM4IF42uokskSJZiVTI",
name: "Cardio Pop", name: "Cardio Pop",
thumbnail: [ thumbnail: [
@ -421,21 +371,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 80, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "G1ej5up7JG0", avatar: [],
title: "Shivers", verification: none,
length: Some(208), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(80),
id: "vgn-b0ksX4g",
title: "Heaven Takes You Home",
length: Some(215),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "PLI_7Mg2Z_-4Lf7IYeiTEOV8HBn-nMqz5N", id: "PLI_7Mg2Z_-4Lf7IYeiTEOV8HBn-nMqz5N",
name: "Pop 2022 ♫ Mix Pop En Ingles (English Pop Songs 2022)", name: "Pop 2022 ♫ Mix Pop En Ingles (English Pop Songs 2022)",
thumbnail: [ thumbnail: [
@ -460,21 +405,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 70, channel: Some(ChannelTag(
first_videos: [ id: "UC8Ojfs-1VLiAO_MosLwvjpQ",
SearchPlaylistVideo( name: "Redlist - Ultimate Music",
id: "a7GITgqwDVg", avatar: [],
title: "Charlie Puth - Left And Right (feat. Jung Kook of BTS) [Official Video]", verification: none,
length: Some(160), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(70),
id: "H5v3kku4y6Q",
title: "Harry Styles - As It Was (Official Video)",
length: Some(166),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "PLX6L4t7t6ZanfCJ1wBxRdGZ_mk9ygmKqo", id: "PLX6L4t7t6ZanfCJ1wBxRdGZ_mk9ygmKqo",
name: "Deutsch Pop Hits NEU 2022", name: "Deutsch Pop Hits NEU 2022",
thumbnail: [ thumbnail: [
@ -499,21 +439,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 164, channel: Some(ChannelTag(
first_videos: [ id: "UCesP91XKnuZVd6OJN06hokg",
SearchPlaylistVideo( name: "Startup Records",
id: "oE7Fe8QBw1Y", avatar: [],
title: "Johannes Oerding - Kaleidoskop", verification: none,
length: Some(217), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(164),
id: "JvqMO-tWlrU",
title: "Tim Bendzko - DAS LEBEN WIEDER LIEBEN (Offizielles Musikvideo)",
length: Some(169),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "PLMC9KNkIncKtPzgY-5rmhvj7fax8fdxoj", id: "PLMC9KNkIncKtPzgY-5rmhvj7fax8fdxoj",
name: "Pop Music Playlist - Timeless Pop Songs (Updated Weekly 2022)", name: "Pop Music Playlist - Timeless Pop Songs (Updated Weekly 2022)",
thumbnail: [ thumbnail: [
@ -538,21 +473,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 200, channel: Some(ChannelTag(
first_videos: [ id: "UCs72iRpTEuwV3y6pdWYLgiw",
SearchPlaylistVideo( name: "Redlist - Just Hits",
id: "U0CGsw6h60k", avatar: [],
title: "Rihanna - What\'s My Name? ft. Drake", verification: none,
length: Some(265), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(200),
id: "OPf0YbXqDm0",
title: "Mark Ronson - Uptown Funk (Official Video) ft. Bruno Mars",
length: Some(271),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "PLgRdph0qPLy53IhYrQLPpATDDA2TpFey5", id: "PLgRdph0qPLy53IhYrQLPpATDDA2TpFey5",
name: "Teen-Pop 90-2000", name: "Teen-Pop 90-2000",
thumbnail: [ thumbnail: [
@ -577,21 +507,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 50, channel: Some(ChannelTag(
first_videos: [ id: "UCv9O2E_G8U46Paz8828THJw",
SearchPlaylistVideo( name: "Victor Vaz",
id: "4fndeDfaWCg", avatar: [],
title: "Backstreet Boys - I Want It That Way (Official HD Video)", verification: none,
length: Some(220), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(50),
id: "gJLIiF15wjQ",
title: "Spice Girls - Wannabe (Official Music Video)",
length: Some(236),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_nCVF_zUZizzRcojIUuYmaXxMoPgg2WMDo", id: "RDCLAK5uy_nCVF_zUZizzRcojIUuYmaXxMoPgg2WMDo",
name: "Klangfarbe: German Pop Hits", name: "Klangfarbe: German Pop Hits",
thumbnail: [ thumbnail: [
@ -616,21 +541,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 52, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "jBFcbfteBDU", avatar: [],
title: "Ich hass dich", verification: none,
length: Some(194), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(52),
id: "CjV7rkhQ66I",
title: "ROSES",
length: Some(148),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_lY6JFrs7W9yIhFjUN_yxQ_ubkjcrqQaVs", id: "RDCLAK5uy_lY6JFrs7W9yIhFjUN_yxQ_ubkjcrqQaVs",
name: "Bedroom Pop", name: "Bedroom Pop",
thumbnail: [ thumbnail: [
@ -655,21 +575,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 178, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "r23tQvESL7w", avatar: [],
title: "Picture in my mind", verification: none,
length: Some(177), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(178),
id: "4DyV0hWOdQw",
title: "we fell in love in october",
length: Some(185),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_l7K78k4EkjcFojhd1617rmUjY-aet6-t0", id: "RDCLAK5uy_l7K78k4EkjcFojhd1617rmUjY-aet6-t0",
name: "K-Pop Party Hits", name: "K-Pop Party Hits",
thumbnail: [ thumbnail: [
@ -694,21 +609,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 87, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "LCpjdohpuEE", avatar: [],
title: "Permission to Dance", verification: none,
length: Some(188), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(87),
id: "8mA6jIeojnk",
title: "How You Like That",
length: Some(182),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "RDCLAK5uy_lj-zBExVYl7YN_NxXboDIh4A-wKGfgzNY", id: "RDCLAK5uy_lj-zBExVYl7YN_NxXboDIh4A-wKGfgzNY",
name: "I-Pop Hits!", name: "I-Pop Hits!",
thumbnail: [ thumbnail: [
@ -733,21 +643,16 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 50, channel: Some(ChannelTag(
first_videos: [ id: "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
SearchPlaylistVideo( name: "YouTube Music",
id: "g-7u06NK1mo", avatar: [],
title: "Killer Haseena", verification: none,
length: Some(161), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(50),
id: "v0Q56geMlkk",
title: "Kesariyo Rang",
length: Some(194),
),
],
)), )),
Playlist(SearchPlaylist( Playlist(PlaylistItem(
id: "PLDIoUOhQQPlXqz5QZ3dx-lh_p6RcPeKjv", id: "PLDIoUOhQQPlXqz5QZ3dx-lh_p6RcPeKjv",
name: "POP Music Playlist 2022 - New POP Songs - Pop Songs 2022 Playlist", name: "POP Music Playlist 2022 - New POP Songs - Pop Songs 2022 Playlist",
thumbnail: [ thumbnail: [
@ -772,22 +677,18 @@ SearchResult(
height: 188, height: 188,
), ),
], ],
video_count: 100, channel: Some(ChannelTag(
first_videos: [ id: "UCX9oPuvJYZsG8wnHTwOBVPA",
SearchPlaylistVideo( name: "Chillax",
id: "WcIcVapfqXw", avatar: [],
title: "Rema, Selena Gomez - Calm Down (Official Music Video)", verification: none,
length: Some(240), subscriber_count: None,
), )),
SearchPlaylistVideo( video_count: Some(100),
id: "a7GITgqwDVg",
title: "Charlie Puth - Left And Right (feat. Jung Kook of BTS) [Official Video]",
length: Some(160),
),
],
)), )),
], ],
ctoken: Some("EqIJEgNwb3AamglFZ0lRQTBnVWdnRXJVa1JEVEVGTE5YVjVYMjV0VXpOWmIzaFRkMVpXVVdzNWJFVlJTakJWV0RSYVEycFljMWRmY0hOVk9JSUJLMUpFUTB4QlN6VjFlVjl0VmtvelVsSnBYMWxDWmxWS2JscHVVWGhNUVdWa1VWRmpXRWgxYW1KVlkyZUNBU3RTUkVOTVFVczFkWGxmYldaa2NYWkRRV3c0ZDI5a2JIZ3lVREpmUVdreVowNXJhVkpFUVhWbWEydEpnZ0VyVWtSRFRFRkxOWFY1WDI1SVUzRkRTbXBFY2xjNVNFSm9RMDVrUmpaMFYxQmtiazlOYm1kUGRqQjNRWUlCSzFKRVEweEJTelYxZVY5c1lqWkRWbFUyVXpSMVZuVm5URlpPVkZVNVYyaHhabUZ2YlZkQloyNW9ielNDQVN0U1JFTk1RVXMxZFhsZmJrUk1PRXRsUW5KVllXZDNlVWxUZDA1dGVVVnBVMlpaWjNveFoxWkRaWE5uZ2dFaVVFeEVTVzlWVDJoUlVWQnNWbkl6Y1dWd1RWWlNjMFJsTkZRNGRrNVJjM1p1YjRJQksxSkVRMHhCU3pWMWVWOXVabk5mZERSR1ZYVXdNRVUxUlVRMmJIWmxSVUpDV0RGV1RWbGxNVzFHYW11Q0FTdFNSRU5NUVVzMWRYbGZiVjh3VlRWV1VVNTVlWHAzZDBneGJGSnBOMk5RUVVGSFdIRk9VVzVCVDNGWmdnRXJVa1JEVEVGTE5YVjVYMjFJVnpWaVkyUjFhR3BDTFZCclZHVlFRV1UyUlc5U1RXb3hlRTVVT0dkNldZSUJLMUpFUTB4QlN6VjFlVjlyVUhGS1gwWnBSMnN0YkdKWWRHZE5ORWxHTkRKMWIydHphMU5LV21sV1ZFbUNBU0pRVEVsZk4wMW5NbHBmTFRSTVpqZEpXV1ZwVkVWUFZqaElRbTR0YmsxeGVqVk9nZ0VpVUV4WU5rdzBkRGQwTmxwaGJtWkRTakYzUW5oU1pFZGFYMjFyT1hsbmJVdHhiNElCSWxCTVRVTTVTMDVyU1c1alMzUlFlbWRaTFRWeWJXaDJhamRtWVhnNFptUjRiMnFDQVNKUVRHZFNaSEJvTUhGUVRIazFNMGxvV1hKUlRGQndRVlJFUkVFeVZIQkdaWGsxZ2dFclVrUkRURUZMTlhWNVgyNURWa1pmZWxWYWFYcDZVbU52YWtsVmRWbHRZVmg0VFc5UVoyY3lWMDFFYjRJQksxSkVRMHhCU3pWMWVWOXNXVFpLUm5Kek4xYzVlVWxvUm1wVlRsOTVlRkZmZFdKcmFtTnljVkZoVm5PQ0FTdFNSRU5NUVVzMWRYbGZiRGRMTnpock5FVnJhbU5HYjJwb1pERTJNVGR5YlZWcVdTMWhaWFEyTFhRd2dnRXJVa1JEVEVGTE5YVjVYMnhxTFhwQ1JYaFdXV3czV1U1ZlRuaFlZbTlFU1dnMFFTMTNTMGRtWjNwT1dZSUJJbEJNUkVsdlZVOW9VVkZRYkZoeGVqVlJXak5rZUMxc2FGOXdObEpqVUdWTGFuYXlBUVlLQkFnVkVBSSUzRBiB4OgYIgtzZWFyY2gtZmVlZA%3D%3D"), ctoken: Some("EqIJEgNwb3AamglFZ0lRQTBnVWdnRXJVa1JEVEVGTE5YVjVYMjV0VXpOWmIzaFRkMVpXVVdzNWJFVlJTakJWV0RSYVEycFljMWRmY0hOVk9JSUJLMUpFUTB4QlN6VjFlVjl0VmtvelVsSnBYMWxDWmxWS2JscHVVWGhNUVdWa1VWRmpXRWgxYW1KVlkyZUNBU3RTUkVOTVFVczFkWGxmYldaa2NYWkRRV3c0ZDI5a2JIZ3lVREpmUVdreVowNXJhVkpFUVhWbWEydEpnZ0VyVWtSRFRFRkxOWFY1WDI1SVUzRkRTbXBFY2xjNVNFSm9RMDVrUmpaMFYxQmtiazlOYm1kUGRqQjNRWUlCSzFKRVEweEJTelYxZVY5c1lqWkRWbFUyVXpSMVZuVm5URlpPVkZVNVYyaHhabUZ2YlZkQloyNW9ielNDQVN0U1JFTk1RVXMxZFhsZmJrUk1PRXRsUW5KVllXZDNlVWxUZDA1dGVVVnBVMlpaWjNveFoxWkRaWE5uZ2dFaVVFeEVTVzlWVDJoUlVWQnNWbkl6Y1dWd1RWWlNjMFJsTkZRNGRrNVJjM1p1YjRJQksxSkVRMHhCU3pWMWVWOXVabk5mZERSR1ZYVXdNRVUxUlVRMmJIWmxSVUpDV0RGV1RWbGxNVzFHYW11Q0FTdFNSRU5NUVVzMWRYbGZiVjh3VlRWV1VVNTVlWHAzZDBneGJGSnBOMk5RUVVGSFdIRk9VVzVCVDNGWmdnRXJVa1JEVEVGTE5YVjVYMjFJVnpWaVkyUjFhR3BDTFZCclZHVlFRV1UyUlc5U1RXb3hlRTVVT0dkNldZSUJLMUpFUTB4QlN6VjFlVjlyVUhGS1gwWnBSMnN0YkdKWWRHZE5ORWxHTkRKMWIydHphMU5LV21sV1ZFbUNBU0pRVEVsZk4wMW5NbHBmTFRSTVpqZEpXV1ZwVkVWUFZqaElRbTR0YmsxeGVqVk9nZ0VpVUV4WU5rdzBkRGQwTmxwaGJtWkRTakYzUW5oU1pFZGFYMjFyT1hsbmJVdHhiNElCSWxCTVRVTTVTMDVyU1c1alMzUlFlbWRaTFRWeWJXaDJhamRtWVhnNFptUjRiMnFDQVNKUVRHZFNaSEJvTUhGUVRIazFNMGxvV1hKUlRGQndRVlJFUkVFeVZIQkdaWGsxZ2dFclVrUkRURUZMTlhWNVgyNURWa1pmZWxWYWFYcDZVbU52YWtsVmRWbHRZVmg0VFc5UVoyY3lWMDFFYjRJQksxSkVRMHhCU3pWMWVWOXNXVFpLUm5Kek4xYzVlVWxvUm1wVlRsOTVlRkZmZFdKcmFtTnljVkZoVm5PQ0FTdFNSRU5NUVVzMWRYbGZiRGRMTnpock5FVnJhbU5HYjJwb1pERTJNVGR5YlZWcVdTMWhaWFEyTFhRd2dnRXJVa1JEVEVGTE5YVjVYMnhxTFhwQ1JYaFdXV3czV1U1ZlRuaFlZbTlFU1dnMFFTMTNTMGRtWjNwT1dZSUJJbEJNUkVsdlZVOW9VVkZRYkZoeGVqVlJXak5rZUMxc2FGOXdObEpqVUdWTGFuYXlBUVlLQkFnVkVBSSUzRBiB4OgYIgtzZWFyY2gtZmVlZA%3D%3D"),
endpoint: browse,
), ),
corrected_query: None, corrected_query: None,
) )

View file

@ -759,4 +759,5 @@ Paginator(
], ],
ctoken: Some("4qmFsgKbAxIPRkV3aGF0X3RvX3dhdGNoGuoCQ0JoNmlBSk5aMjlKYjB0NmVtOWlTR3hxVFRSdlYyMHdTMkYzYjFwbFdGSm1ZMGRHYmxwV09YcGliVVozWXpKb2RtUkdPWGxhVjJSd1lqSTFhR0pDU1daWFZFSXhUbFpuZDFSV09YSldNRlp0WkRCT1JWTlZPV3BsU0U1WFZHNWtiRXhWY0ZSa1ZrSlRXbmh2ZEVGQlFteGlaMEZDVmxaTlFVRlZVa1pCUVVWQlVtdFdNMkZIUmpCWU0xSjJXRE5rYUdSSFRtOUJRVVZCUVZGRlFVRkJSVUZCVVVGQlFWRkZRVmxyUlVsQlFrbFVZMGRHYmxwV09YcGliVVozWXpKb2RtUkdPVEJpTW5Sc1ltaHZWRU5MVDNJeFpuSjROR1p2UTBaU1YwSm1RVzlrVkZWSlN6RnBTVlJEUzA5eU1XWnllRFJtYjBOR1VsZENaa0Z2WkZSVlNVc3hkbkZqZURjd1NrRm5aMW8lM0SaAhpicm93c2UtZmVlZEZFd2hhdF90b193YXRjaA%3D%3D"), ctoken: Some("4qmFsgKbAxIPRkV3aGF0X3RvX3dhdGNoGuoCQ0JoNmlBSk5aMjlKYjB0NmVtOWlTR3hxVFRSdlYyMHdTMkYzYjFwbFdGSm1ZMGRHYmxwV09YcGliVVozWXpKb2RtUkdPWGxhVjJSd1lqSTFhR0pDU1daWFZFSXhUbFpuZDFSV09YSldNRlp0WkRCT1JWTlZPV3BsU0U1WFZHNWtiRXhWY0ZSa1ZrSlRXbmh2ZEVGQlFteGlaMEZDVmxaTlFVRlZVa1pCUVVWQlVtdFdNMkZIUmpCWU0xSjJXRE5rYUdSSFRtOUJRVVZCUVZGRlFVRkJSVUZCVVVGQlFWRkZRVmxyUlVsQlFrbFVZMGRHYmxwV09YcGliVVozWXpKb2RtUkdPVEJpTW5Sc1ltaHZWRU5MVDNJeFpuSjROR1p2UTBaU1YwSm1RVzlrVkZWSlN6RnBTVlJEUzA5eU1XWnllRFJtYjBOR1VsZENaa0Z2WkZSVlNVc3hkbkZqZURjd1NrRm5aMW8lM0SaAhpicm93c2UtZmVlZEZFd2hhdF90b193YXRjaA%3D%3D"),
visitor_data: Some("CgtjTXNGWnhNcjdORSiq8qmaBg%3D%3D"), visitor_data: Some("CgtjTXNGWnhNcjdORSiq8qmaBg%3D%3D"),
endpoint: browse,
) )

View file

@ -856,4 +856,5 @@ Paginator(
), ),
], ],
ctoken: Some("4qmFsgKxAxIPRkV3aGF0X3RvX3dhdGNoGoADQ0RCNmxnSkhUWFpRYzJOVU1UUm1iME5OWjNOSmQzWjZOM0JPWlZWMldqZDFRVlp3ZEVOdGMwdEhXR3d3V0ROQ2FGb3lWbVpqTWpWb1kwaE9iMkl6VW1aamJWWnVZVmM1ZFZsWGQxTklNVlUwVDFSU1dXUXhUbXhXTTBaeVdsaGtSRkpGYkZCWk0yaDZWbXMxTlV4VmVGbE1XRnBSVlcxallVeFJRVUZhVnpSQlFWWldWRUZCUmtWU1VVRkNRVVZhUm1ReWFHaGtSamt3WWpFNU0xbFlVbXBoUVVGQ1FVRkZRa0ZCUVVKQlFVVkJRVUZGUWtGSFNrSkRRVUZUUlROQ2FGb3lWbVpqTWpWb1kwaE9iMkl6VW1aa1J6bHlXbGMwWVVWM2Ftb3hPRkJGT1dWSU5rRm9WVlpZWlVGTFNGaHVSMEp2ZDJsRmQycERObkZmUlRsbFNEWkJhRmRIZG1RMFMwaGxaMGhDTlZnMmJrMWxPVU5SU1VsTlVRJTNEJTNEmgIaYnJvd3NlLWZlZWRGRXdoYXRfdG9fd2F0Y2g%3D"), ctoken: Some("4qmFsgKxAxIPRkV3aGF0X3RvX3dhdGNoGoADQ0RCNmxnSkhUWFpRYzJOVU1UUm1iME5OWjNOSmQzWjZOM0JPWlZWMldqZDFRVlp3ZEVOdGMwdEhXR3d3V0ROQ2FGb3lWbVpqTWpWb1kwaE9iMkl6VW1aamJWWnVZVmM1ZFZsWGQxTklNVlUwVDFSU1dXUXhUbXhXTTBaeVdsaGtSRkpGYkZCWk0yaDZWbXMxTlV4VmVGbE1XRnBSVlcxallVeFJRVUZhVnpSQlFWWldWRUZCUmtWU1VVRkNRVVZhUm1ReWFHaGtSamt3WWpFNU0xbFlVbXBoUVVGQ1FVRkZRa0ZCUVVKQlFVVkJRVUZGUWtGSFNrSkRRVUZUUlROQ2FGb3lWbVpqTWpWb1kwaE9iMkl6VW1aa1J6bHlXbGMwWVVWM2Ftb3hPRkJGT1dWSU5rRm9WVlpZWlVGTFNGaHVSMEp2ZDJsRmQycERObkZmUlRsbFNEWkJhRmRIZG1RMFMwaGxaMGhDTlZnMmJrMWxPVU5SU1VsTlVRJTNEJTNEmgIaYnJvd3NlLWZlZWRGRXdoYXRfdG9fd2F0Y2g%3D"),
endpoint: browse,
) )

View file

@ -45,6 +45,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -86,6 +87,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -128,6 +130,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -173,6 +176,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -214,6 +218,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -255,6 +260,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -296,6 +302,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -337,6 +344,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -378,6 +386,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -419,6 +428,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -460,6 +470,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -501,6 +512,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -542,6 +554,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -583,6 +596,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -624,6 +638,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -665,6 +680,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -706,6 +722,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -747,6 +764,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -754,4 +772,5 @@ Paginator(
), ),
], ],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyiwEKT0FEU0pfaTBhMTViQk5vTE9UTHFhUTBoZHB4VTN5SUdfYmhQTzhzM1pGQXQybzdnaVMwajVoSkRNSTl5MGs5M2l4SkM5VGdSbHBVa0xxQ0EiESILWmVlcnJudUxpNUUwAXgBKBIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyiwEKT0FEU0pfaTBhMTViQk5vTE9UTHFhUTBoZHB4VTN5SUdfYmhQTzhzM1pGQXQybzdnaVMwajVoSkRNSTl5MGs5M2l4SkM5VGdSbHBVa0xxQ0EiESILWmVlcnJudUxpNUUwAXgBKBIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"),
endpoint: browse,
) )

View file

@ -44,6 +44,7 @@ Paginator(
count: Some(3), count: Some(3),
items: [], items: [],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3djVTczT0JWOE9tU0JPS3J0NEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3djVTczT0JWOE9tU0JPS3J0NEFhQUJBZw%3D%3D"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3djVTczT0JWOE9tU0JPS3J0NEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3djVTczT0JWOE9tU0JPS3J0NEFhQUJBZw%3D%3D"),
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -85,6 +86,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -126,6 +128,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -167,6 +170,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -208,6 +212,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -254,6 +259,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -301,6 +307,7 @@ Paginator(
count: Some(2), count: Some(2),
items: [], items: [],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3puZDRLcVU1azhBN2F4QjdWNEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3puZDRLcVU1azhBN2F4QjdWNEFhQUJBZw%3D%3D"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3puZDRLcVU1azhBN2F4QjdWNEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3puZDRLcVU1azhBN2F4QjdWNEFhQUJBZw%3D%3D"),
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -342,6 +349,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -383,6 +391,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -424,6 +433,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -467,6 +477,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -508,6 +519,7 @@ Paginator(
count: Some(2), count: Some(2),
items: [], items: [],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3lUbFpfa2tYNnJydDV3S0VwNEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3lUbFpfa2tYNnJydDV3S0VwNEFhQUJBZw%3D%3D"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3lUbFpfa2tYNnJydDV3S0VwNEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3lUbFpfa2tYNnJydDV3S0VwNEFhQUJBZw%3D%3D"),
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -549,6 +561,7 @@ Paginator(
count: Some(2), count: Some(2),
items: [], items: [],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3lnM0Q5ZFVJRXJKNHlfTDJsNEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3lnM0Q5ZFVJRXJKNHlfTDJsNEFhQUJBZw%3D%3D"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3lnM0Q5ZFVJRXJKNHlfTDJsNEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3lnM0Q5ZFVJRXJKNHlfTDJsNEFhQUJBZw%3D%3D"),
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -590,6 +603,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -631,6 +645,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -672,6 +687,7 @@ Paginator(
count: Some(1), count: Some(1),
items: [], items: [],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3hZcVlrRkFnV2IzSmFUSFl0NEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3hZcVlrRkFnV2IzSmFUSFl0NEFhQUJBZw%3D%3D"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3hZcVlrRkFnV2IzSmFUSFl0NEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3hZcVlrRkFnV2IzSmFUSFl0NEFhQUJBZw%3D%3D"),
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -713,6 +729,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -754,6 +771,7 @@ Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -795,6 +813,7 @@ Paginator(
count: Some(4), count: Some(4),
items: [], items: [],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3pvWmY5bkc3VkJOaGNETFJGNEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3pvWmY5bkc3VkJOaGNETFJGNEFhQUJBZw%3D%3D"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3pvWmY5bkc3VkJOaGNETFJGNEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3pvWmY5bkc3VkJOaGNETFJGNEFhQUJBZw%3D%3D"),
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -838,6 +857,7 @@ Paginator(
count: Some(1), count: Some(1),
items: [], items: [],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3lNZXExV0RoU1lBSUozSlFoNEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3lNZXExV0RoU1lBSUozSlFoNEFhQUJBZw%3D%3D"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyfhpLEhpVZ3lNZXExV0RoU1lBSUozSlFoNEFhQUJBZyICCAAqGFVDRWZfQmMtS1ZkN29uU2VpZlMzcHk5ZzILWmVlcnJudUxpNUVAAUgKQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3lNZXExV0RoU1lBSUozSlFoNEFhQUJBZw%3D%3D"),
endpoint: browse,
), ),
by_owner: false, by_owner: false,
pinned: false, pinned: false,
@ -845,4 +865,5 @@ Paginator(
), ),
], ],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYy7QIKwwJnZXRfcmFua2VkX3N0cmVhbXMtLUNxY0JDSUFFRlJlMzBUZ2FuQUVLbHdFSTJGOFFnQVFZQnlLTUFidGhsd05sb1pHVEg0ZWRnUlVOc2dUX2pFRFYxOThSRmxGZFJTMVJiQ1hBUl9CTFNGREZKZ2FuS2FoMUVyeERGQU1xY1lnMThmSGdVSnBtZklqV2tER0FscUN1QzJLdU1FQjJYT25sVTZrd3ZBUjY5OHA2a2VGV3hLckxscGdtalZtelg4RHdPaDk1cGlMLVROOTl5YTZ1TDlpb0Y1LWc2Q3dqellGS1RPbnduRTF4V3lVSVdOUjlsRllZRUJRU0JRaUpJQmdBRWdVSWhpQVlBQklIQ0pjZ0VBOFlBUklGQ0lnZ0dBQVNCUWlISUJnQUVnY0loU0FRQnhnQkVnY0loQ0FRQkJnQkdBQSIRIgtaZWVycm51TGk1RTAAeAEoFEIQY29tbWVudHMtc2VjdGlvbg%3D%3D"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYy7QIKwwJnZXRfcmFua2VkX3N0cmVhbXMtLUNxY0JDSUFFRlJlMzBUZ2FuQUVLbHdFSTJGOFFnQVFZQnlLTUFidGhsd05sb1pHVEg0ZWRnUlVOc2dUX2pFRFYxOThSRmxGZFJTMVJiQ1hBUl9CTFNGREZKZ2FuS2FoMUVyeERGQU1xY1lnMThmSGdVSnBtZklqV2tER0FscUN1QzJLdU1FQjJYT25sVTZrd3ZBUjY5OHA2a2VGV3hLckxscGdtalZtelg4RHdPaDk1cGlMLVROOTl5YTZ1TDlpb0Y1LWc2Q3dqellGS1RPbnduRTF4V3lVSVdOUjlsRllZRUJRU0JRaUpJQmdBRWdVSWhpQVlBQklIQ0pjZ0VBOFlBUklGQ0lnZ0dBQVNCUWlISUJnQUVnY0loU0FRQnhnQkVnY0loQ0FRQkJnQkdBQSIRIgtaZWVycm51TGk1RTAAeAEoFEIQY29tbWVudHMtc2VjdGlvbg%3D%3D"),
endpoint: browse,
) )

View file

@ -672,4 +672,5 @@ Paginator(
), ),
], ],
ctoken: Some("CCgSExILWmVlcnJudUxpNUXAAQHIAQEYACrLDDJzNkw2d3l4Q1FxdUNRb0Q4ajRBQ2czQ1Bnb0l4LUM1djltdnBwZ3lDZ1B5UGdBS0RjSS1DZ2pxM0xYRXpkNk00VUVLQV9JLUFBb093ajRMQ1Bqc19JLUVsWTI5MWdFS0FfSS1BQW93MGo0dENpdFNSRU5NUVVzMWRYbGZhekkzZFhVdFJYUlJYMkkxVlRKeU1qWkVUa1JhVDIxT2NVZGtZMk5WU1VkUkNnUHlQZ0FLRHNJLUN3amZ2czJMbjRUcG5iUUJDZ1B5UGdBS0V0SS1Ed29OVWtSYVpXVnljbTUxVEdrMVJRb0Q4ajRBQ2c3Q1Bnc0kzYmJTdThMRy1wS1VBUW9EOGo0QUNnN0NQZ3NJX2JYd2lmQzJ0WlczQVFvRDhqNEFDZzdDUGdzSXpZckE3b0RHbzlMUUFRb0Q4ajRBQ2czQ1Bnb0l0N212dk9fUjVJUnZDZ1B5UGdBS0RjSS1DZ2lBcDdMWDBlYWxyaW9LQV9JLUFBb053ajRLQ0luanlmalZ0dUwxWHdvRDhqNEFDZzNDUGdvSXBKZmozYVR5X2MwZkNnUHlQZ0FLRGNJLUNnamJtNW1MbGRLQTV3Z0tBX0ktQUFvT3dqNExDTFRhOF9UNjE3U3UyQUVLQV9JLUFBb053ajRLQ05xMHBhdXZzS1BDZEFvRDhqNEFDZzdDUGdzSTVQR3E5WTIybWNXZ0FRb0Q4ajRBQ2c3Q1Bnc0lnNkdPN3JidzJjR0tBUW9EOGo0QUNnN0NQZ3NJenEtbWxQUy01SnJoQVFvRDhqNEFDZzdDUGdzSXZNbnBqSUtUeXBYX0FRb0Q4ajRBQ2czQ1Bnb0l1UFdDZ09mWDFmdFlDZ1B5UGdBS0g5SS1IQW9hVWtSRlRWUnVTbmxSZDJsamFHMW5lbm96VGxKSlVIVmxWMUVLQV9JLUFBb053ajRLQ0xxb251clN1SkhoWXdvRDhqNEFDZzNDUGdvSXFzYU90Y0RBZ3NNMkNnUHlQZ0FLRHNJLUN3amU2TUNidlp2Rmdza0JDZ1B5UGdBS0RjSS1DZ2oxa1p2aTM3cXRwelVLQV9JLUFBb053ajRLQ00tdHNlQ2lpOHpWRVFvRDhqNEFDZzNDUGdvSXJjU3kxYV9RdjV0U0NnUHlQZ0FLRHNJLUN3akw4ZXI0ZzRiVGhJRUJDZ1B5UGdBS0RjSS1DZ2oxdEsyRXFjVG0zd1FLQV9JLUFBb053ajRLQ012dG1aX2Fnb1NQSmdvRDhqNEFDZzNDUGdvSTVfYUJ1THJ0NS1jVkNnUHlQZ0FLRGNJLUNnaWUyWlhTNW9tU3duVUtBX0ktQUFvT3dqNExDSnFqbnFUcDY4LS1tQUVLQV9JLUFBb093ajRMQ1BqS291cnRsY09QdVFFS0FfSS1BQW9Od2o0S0NPT00tOHo4a196UGZ3b0Q4ajRBQ2czQ1Bnb0l6SWFhMFBtcGxKY3JDZ1B5UGdBS0RzSS1Dd2pMaXJmd2pfWGhwb0VCQ2dQeVBnQUtEY0ktQ2dpRG52dUVtdEczaWlvS0FfSS1BQW9Pd2o0TENPYWw2LXliX09PTXV3RVNLQUFDQkFZSUNnd09FQklVRmhnYUhCNGdJaVFtS0Nvc0xqQXlORFk0T2p3LVFFSkVSa2hLVEU0YUJBZ0FFQUVhQkFnQ0VBTWFCQWdFRUFVYUJBZ0dFQWNhQkFnSUVBa2FCQWdLRUFzYUJBZ01FQTBhQkFnT0VBOGFCQWdRRUJFYUJBZ1NFQk1hQkFnVUVCVWFCQWdXRUJjYUJBZ1lFQmthQkFnYUVCc2FCQWdjRUIwYUJBZ2VFQjhhQkFnZ0VDRWFCQWdpRUNNYUJBZ2tFQ1VhQkFnbUVDY2FCQWdvRUNrYUJBZ3FFQ3NhQkFnc0VDMGFCQWd1RUM4YUJBZ3dFREVhQkFneUVETWFCQWcwRURVYUJBZzJFRGNhQkFnNEVEa2FCQWc2RURzYUJBZzhFRDBhQkFnLUVEOGFCQWhBRUVFYUJBaENFRU1hQkFoRUVFVWFCQWhHRUVjYUJBaElFRWthQkFoS0VFc2FCQWhNRUUwYUJBaE9FRThxS0FBQ0JBWUlDZ3dPRUJJVUZoZ2FIQjRnSWlRbUtDb3NMakF5TkRZNE9qdy1RRUpFUmtoS1RFNGoPd2F0Y2gtbmV4dC1mZWVkcgA%3D"), ctoken: Some("CCgSExILWmVlcnJudUxpNUXAAQHIAQEYACrLDDJzNkw2d3l4Q1FxdUNRb0Q4ajRBQ2czQ1Bnb0l4LUM1djltdnBwZ3lDZ1B5UGdBS0RjSS1DZ2pxM0xYRXpkNk00VUVLQV9JLUFBb093ajRMQ1Bqc19JLUVsWTI5MWdFS0FfSS1BQW93MGo0dENpdFNSRU5NUVVzMWRYbGZhekkzZFhVdFJYUlJYMkkxVlRKeU1qWkVUa1JhVDIxT2NVZGtZMk5WU1VkUkNnUHlQZ0FLRHNJLUN3amZ2czJMbjRUcG5iUUJDZ1B5UGdBS0V0SS1Ed29OVWtSYVpXVnljbTUxVEdrMVJRb0Q4ajRBQ2c3Q1Bnc0kzYmJTdThMRy1wS1VBUW9EOGo0QUNnN0NQZ3NJX2JYd2lmQzJ0WlczQVFvRDhqNEFDZzdDUGdzSXpZckE3b0RHbzlMUUFRb0Q4ajRBQ2czQ1Bnb0l0N212dk9fUjVJUnZDZ1B5UGdBS0RjSS1DZ2lBcDdMWDBlYWxyaW9LQV9JLUFBb053ajRLQ0luanlmalZ0dUwxWHdvRDhqNEFDZzNDUGdvSXBKZmozYVR5X2MwZkNnUHlQZ0FLRGNJLUNnamJtNW1MbGRLQTV3Z0tBX0ktQUFvT3dqNExDTFRhOF9UNjE3U3UyQUVLQV9JLUFBb053ajRLQ05xMHBhdXZzS1BDZEFvRDhqNEFDZzdDUGdzSTVQR3E5WTIybWNXZ0FRb0Q4ajRBQ2c3Q1Bnc0lnNkdPN3JidzJjR0tBUW9EOGo0QUNnN0NQZ3NJenEtbWxQUy01SnJoQVFvRDhqNEFDZzdDUGdzSXZNbnBqSUtUeXBYX0FRb0Q4ajRBQ2czQ1Bnb0l1UFdDZ09mWDFmdFlDZ1B5UGdBS0g5SS1IQW9hVWtSRlRWUnVTbmxSZDJsamFHMW5lbm96VGxKSlVIVmxWMUVLQV9JLUFBb053ajRLQ0xxb251clN1SkhoWXdvRDhqNEFDZzNDUGdvSXFzYU90Y0RBZ3NNMkNnUHlQZ0FLRHNJLUN3amU2TUNidlp2Rmdza0JDZ1B5UGdBS0RjSS1DZ2oxa1p2aTM3cXRwelVLQV9JLUFBb053ajRLQ00tdHNlQ2lpOHpWRVFvRDhqNEFDZzNDUGdvSXJjU3kxYV9RdjV0U0NnUHlQZ0FLRHNJLUN3akw4ZXI0ZzRiVGhJRUJDZ1B5UGdBS0RjSS1DZ2oxdEsyRXFjVG0zd1FLQV9JLUFBb053ajRLQ012dG1aX2Fnb1NQSmdvRDhqNEFDZzNDUGdvSTVfYUJ1THJ0NS1jVkNnUHlQZ0FLRGNJLUNnaWUyWlhTNW9tU3duVUtBX0ktQUFvT3dqNExDSnFqbnFUcDY4LS1tQUVLQV9JLUFBb093ajRMQ1BqS291cnRsY09QdVFFS0FfSS1BQW9Od2o0S0NPT00tOHo4a196UGZ3b0Q4ajRBQ2czQ1Bnb0l6SWFhMFBtcGxKY3JDZ1B5UGdBS0RzSS1Dd2pMaXJmd2pfWGhwb0VCQ2dQeVBnQUtEY0ktQ2dpRG52dUVtdEczaWlvS0FfSS1BQW9Pd2o0TENPYWw2LXliX09PTXV3RVNLQUFDQkFZSUNnd09FQklVRmhnYUhCNGdJaVFtS0Nvc0xqQXlORFk0T2p3LVFFSkVSa2hLVEU0YUJBZ0FFQUVhQkFnQ0VBTWFCQWdFRUFVYUJBZ0dFQWNhQkFnSUVBa2FCQWdLRUFzYUJBZ01FQTBhQkFnT0VBOGFCQWdRRUJFYUJBZ1NFQk1hQkFnVUVCVWFCQWdXRUJjYUJBZ1lFQmthQkFnYUVCc2FCQWdjRUIwYUJBZ2VFQjhhQkFnZ0VDRWFCQWdpRUNNYUJBZ2tFQ1VhQkFnbUVDY2FCQWdvRUNrYUJBZ3FFQ3NhQkFnc0VDMGFCQWd1RUM4YUJBZ3dFREVhQkFneUVETWFCQWcwRURVYUJBZzJFRGNhQkFnNEVEa2FCQWc2RURzYUJBZzhFRDBhQkFnLUVEOGFCQWhBRUVFYUJBaENFRU1hQkFoRUVFVWFCQWhHRUVjYUJBaElFRWthQkFoS0VFc2FCQWhNRUUwYUJBaE9FRThxS0FBQ0JBWUlDZ3dPRUJJVUZoZ2FIQjRnSWlRbUtDb3NMakF5TkRZNE9qdy1RRUpFUmtoS1RFNGoPd2F0Y2gtbmV4dC1mZWVkcgA%3D"),
endpoint: browse,
) )

View file

@ -701,15 +701,18 @@ VideoDetails(
), ),
], ],
ctoken: Some("CBQSExILWmVlcnJudUxpNUXAAQHIAQEYACreBjJzNkw2d3pfQkFyOEJBb0Q4ajRBQ2czQ1Bnb0l5dFdIekt5Tm1ZMXBDZ1B5UGdBS0o5SS1KQW9pVUV4eU1UUldiR05sYkRKVE16UlpSMmw1WlZkRU1rOW9jbU4wVGt4Q1psVk9PUW9EOGo0QUNoTFNQZzhLRFZKRVdtVmxjbkp1ZFV4cE5VVUtBX0ktQUFvT3dqNExDTjIyMHJ2Q3h2cVNsQUVLQV9JLUFBb3cwajR0Q2l0U1JFTk1RVXMxZFhsZmF6STNkWFV0UlhSUlgySTFWVEp5TWpaRVRrUmFUMjFPY1Vka1kyTlZTVWRSQ2dQeVBnQUtEc0ktQ3dqZnZzMkxuNFRwbmJRQkNnUHlQZ0FLRGNJLUNnallxdldKeExEazhYc0tBX0ktQUFvT3dqNExDTlNUMDZfUXlOdjZxUUVLQV9JLUFBb093ajRMQ1AyMThJbnd0cldWdHdFS0FfSS1BQW9Od2o0S0NJbmp5ZmpWdHVMMVh3b0Q4ajRBQ2czQ1Bnb0l4LUM1djltdnBwZ3lDZ1B5UGdBS0RzSS1Dd2kwMnZQMC10ZTBydGdCQ2dQeVBnQUtEY0ktQ2dqUDNLU2s3Nno4OVFrS0FfSS1BQW9Od2o0S0NMZTVyN3p2MGVTRWJ3b0Q4ajRBQ2czQ1Bnb0kyNXVaaTVYU2dPY0lDZ1B5UGdBS0RzSS1Dd2lEb1k3dXR2RFp3WW9CQ2dQeVBnQUtEY0ktQ2dqMXRLMkVxY1RtM3dRS0FfSS1BQW9Od2o0S0NNdnRtWl9hZ29TUEpnb0Q4ajRBQ2czQ1Bnb0l1UFdDZ09mWDFmdFlDZ1B5UGdBS0RjSS1DZ2k0dHNfbnpMZWozbWNTRkFBQ0JBWUlDZ3dPRUJJVUZoZ2FIQjRnSWlRbUdnUUlBQkFCR2dRSUFoQURHZ1FJQkJBRkdnUUlCaEFIR2dRSUNCQUpHZ1FJQ2hBTEdnUUlEQkFOR2dRSURoQVBHZ1FJRUJBUkdnUUlFaEFUR2dRSUZCQVZHZ1FJRmhBWEdnUUlHQkFaR2dRSUdoQWJHZ1FJSEJBZEdnUUlIaEFmR2dRSUlCQWhHZ1FJSWhBakdnUUlKQkFsR2dRSUpoQW5LaFFBQWdRR0NBb01EaEFTRkJZWUdod2VJQ0lrSmdqD3dhdGNoLW5leHQtZmVlZA%3D%3D"), ctoken: Some("CBQSExILWmVlcnJudUxpNUXAAQHIAQEYACreBjJzNkw2d3pfQkFyOEJBb0Q4ajRBQ2czQ1Bnb0l5dFdIekt5Tm1ZMXBDZ1B5UGdBS0o5SS1KQW9pVUV4eU1UUldiR05sYkRKVE16UlpSMmw1WlZkRU1rOW9jbU4wVGt4Q1psVk9PUW9EOGo0QUNoTFNQZzhLRFZKRVdtVmxjbkp1ZFV4cE5VVUtBX0ktQUFvT3dqNExDTjIyMHJ2Q3h2cVNsQUVLQV9JLUFBb3cwajR0Q2l0U1JFTk1RVXMxZFhsZmF6STNkWFV0UlhSUlgySTFWVEp5TWpaRVRrUmFUMjFPY1Vka1kyTlZTVWRSQ2dQeVBnQUtEc0ktQ3dqZnZzMkxuNFRwbmJRQkNnUHlQZ0FLRGNJLUNnallxdldKeExEazhYc0tBX0ktQUFvT3dqNExDTlNUMDZfUXlOdjZxUUVLQV9JLUFBb093ajRMQ1AyMThJbnd0cldWdHdFS0FfSS1BQW9Od2o0S0NJbmp5ZmpWdHVMMVh3b0Q4ajRBQ2czQ1Bnb0l4LUM1djltdnBwZ3lDZ1B5UGdBS0RzSS1Dd2kwMnZQMC10ZTBydGdCQ2dQeVBnQUtEY0ktQ2dqUDNLU2s3Nno4OVFrS0FfSS1BQW9Od2o0S0NMZTVyN3p2MGVTRWJ3b0Q4ajRBQ2czQ1Bnb0kyNXVaaTVYU2dPY0lDZ1B5UGdBS0RzSS1Dd2lEb1k3dXR2RFp3WW9CQ2dQeVBnQUtEY0ktQ2dqMXRLMkVxY1RtM3dRS0FfSS1BQW9Od2o0S0NNdnRtWl9hZ29TUEpnb0Q4ajRBQ2czQ1Bnb0l1UFdDZ09mWDFmdFlDZ1B5UGdBS0RjSS1DZ2k0dHNfbnpMZWozbWNTRkFBQ0JBWUlDZ3dPRUJJVUZoZ2FIQjRnSWlRbUdnUUlBQkFCR2dRSUFoQURHZ1FJQkJBRkdnUUlCaEFIR2dRSUNCQUpHZ1FJQ2hBTEdnUUlEQkFOR2dRSURoQVBHZ1FJRUJBUkdnUUlFaEFUR2dRSUZCQVZHZ1FJRmhBWEdnUUlHQkFaR2dRSUdoQWJHZ1FJSEJBZEdnUUlIaEFmR2dRSUlCQWhHZ1FJSWhBakdnUUlKQkFsR2dRSUpoQW5LaFFBQWdRR0NBb01EaEFTRkJZWUdod2VJQ0lrSmdqD3dhdGNoLW5leHQtZmVlZA%3D%3D"),
endpoint: browse,
), ),
top_comments: Paginator( top_comments: Paginator(
count: Some(705000), count: Some(705000),
items: [], items: [],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyJSIRIgtaZWVycm51TGk1RTAAeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyJSIRIgtaZWVycm51TGk1RTAAeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"),
endpoint: browse,
), ),
latest_comments: Paginator( latest_comments: Paginator(
count: Some(705000), count: Some(705000),
items: [], items: [],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyOCIRIgtaZWVycm51TGk1RTABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyOCIRIgtaZWVycm51TGk1RTABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"),
endpoint: browse,
), ),
) )

View file

@ -771,15 +771,18 @@ VideoDetails(
), ),
], ],
ctoken: Some("CBQSExILWmVlcnJudUxpNUXAAQHIAQEYACqiDDJzNkw2d3lTQ1FxUENRb0Q4ajRBQ2czQ1Bnb0l1UFdDZ09mWDFmdFlDZ1B5UGdBS0RzSS1Dd2pPcjZhVTlMN2ttdUVCQ2dQeVBnQUtFdEktRHdvTlVrUmFaV1Z5Y201MVRHazFSUW9EOGo0QUNnN0NQZ3NJLU1xaTZ1MlZ3NC01QVFvRDhqNEFDZzNDUGdvSXNZamU0NGJFeGFKUkNnUHlQZ0FLRGNJLUNnaXF4bzYxd01DQ3d6WUtBX0ktQUFvT3dqNExDTmVSckxfYzNNaTEzd0VLQV9JLUFBb053ajRLQ051Ym1ZdVYwb0RuQ0FvRDhqNEFDZzNDUGdvSTE2YTg4NTI1OXNsUkNnUHlQZ0FLRGNJLUNnamJqcXVGb2V1YjB3Z0tBX0ktQUFvTndqNEtDTW4xbEkzbHUtaW1mQW9EOGo0QUNnM0NQZ29JdXFpZTZ0SzRrZUZqQ2dQeVBnQUtEY0ktQ2dqUGdaejB2OC1sNkhRS0FfSS1BQW9Pd2o0TENQMjE4SW53dHJXVnR3RUtBX0ktQUFvT3dqNExDTXVLdF9DUDllR21nUUVLQV9JLUFBb053ajRLQ0szRXN0V3YwTC1iVWdvRDhqNEFDZzNDUGdvSWc1NzdoSnJSdDRvcUNnUHlQZ0FLRGNJLUNnaVJ1c1BtemZtenlGd0tBX0ktQUFvT3dqNExDTlRBcHMtZGh2eXEwZ0VLQV9JLUFBb053ajRLQ0p2aDhzV0g1OXk1SUFvRDhqNEFDaF9TUGh3S0dsSkVRVTk2ZFZaM1JWbDNZMUZFTkhWMmNHZEJUbU5JU0ZWM0NoX1NQaHdLR2xKRVFVOWZjQzFWYmpCSGVUbHVXRlZ0Wm1kaE0xTlNYMXAzQ2hfU1Bod0tHbEpFUVU5cFEwaENhR3R1VTBSd09HcFZWekJPUzFoWU9FMVJDaF9TUGh3S0dsSkVRVTlYWjBsd1lVbDZha1p6UVhkeE5GOXhWR2hyTlROQkNoX1NQaHdLR2xKRVFVOXFNVkpuZEhkZmVtZHJibWxSWkdkTU5XTnlVRmxCQ2hfU1Bod0tHbEpFUVU4NWExbHRhMU5KVG5CVGFYVldTalEzUjNkT1RWSm5DaF9TUGh3S0dsSkVRVTlGYjNOTlVtbHlhM1ZKTjNvNE1tSmZia0oyUjNoQkNoX1NQaHdLR2xKRVFVOW1PRlExTURaUVZGcFVWRmxDWm01RVRVNURiR0ZSQ2hfU1Bod0tHbEpFUVU5UllqSlhRWGxLYTBwMlRURmhaMGRYZEhkRkxVOUJDaF9TUGh3S0dsSkVRVTlNWDFGNk1scFJRbUZNUkROTFExTnFWalpYZG5wM0NoX1NQaHdLR2xKRVFVOXpjeTFGWVdSRFpHZzBUVmxYV0hsMGFtWkpabFYzQ2hfU1Bod0tHbEpFUVU4MVRraFVXblJGV0ROSGJIWlhRMjgyYTJOdGFrdDNDaF9TUGh3S0dsSkVRVTlMWDBjMVRVZzFaM0ZJUTNRd1VXdENZVlZJTjJwUkNoX1NQaHdLR2xKRVFVOVpUWEZhWlV4U1RXMXhaRW8zZGs5b09UQXRhME5CQ2hfU1Bod0tHbEpFUVU4eVNGbEJhMFpIYzBGSmFWVmthRE5NVUhGRE5UZG5FaFVBQWdRR0NBb01EaEFTRkJZWUdod2VJQ0lrSmlnYUJBZ0FFQUVhQkFnQ0VBTWFCQWdFRUFVYUJBZ0dFQWNhQkFnSUVBa2FCQWdLRUFzYUJBZ01FQTBhQkFnT0VBOGFCQWdRRUJFYUJBZ1NFQk1hQkFnVUVCVWFCQWdXRUJjYUJBZ1lFQmthQkFnYUVCc2FCQWdjRUIwYUJBZ2VFQjhhQkFnZ0VDRWFCQWdpRUNNYUJBZ2tFQ1VhQkFnbUVDY2FCQWdvRUNrYUJBZ29FQ29hQkFnb0VDc2FCQWdvRUN3YUJBZ29FQzBhQkFnb0VDNGFCQWdvRUM4YUJBZ29FREFhQkFnb0VERWFCQWdvRURJYUJBZ29FRE1hQkFnb0VEUWFCQWdvRURVYUJBZ29FRFlhQkFnb0VEY3FGUUFDQkFZSUNnd09FQklVRmhnYUhCNGdJaVFtS0FqD3dhdGNoLW5leHQtZmVlZA%3D%3D"), ctoken: Some("CBQSExILWmVlcnJudUxpNUXAAQHIAQEYACqiDDJzNkw2d3lTQ1FxUENRb0Q4ajRBQ2czQ1Bnb0l1UFdDZ09mWDFmdFlDZ1B5UGdBS0RzSS1Dd2pPcjZhVTlMN2ttdUVCQ2dQeVBnQUtFdEktRHdvTlVrUmFaV1Z5Y201MVRHazFSUW9EOGo0QUNnN0NQZ3NJLU1xaTZ1MlZ3NC01QVFvRDhqNEFDZzNDUGdvSXNZamU0NGJFeGFKUkNnUHlQZ0FLRGNJLUNnaXF4bzYxd01DQ3d6WUtBX0ktQUFvT3dqNExDTmVSckxfYzNNaTEzd0VLQV9JLUFBb053ajRLQ051Ym1ZdVYwb0RuQ0FvRDhqNEFDZzNDUGdvSTE2YTg4NTI1OXNsUkNnUHlQZ0FLRGNJLUNnamJqcXVGb2V1YjB3Z0tBX0ktQUFvTndqNEtDTW4xbEkzbHUtaW1mQW9EOGo0QUNnM0NQZ29JdXFpZTZ0SzRrZUZqQ2dQeVBnQUtEY0ktQ2dqUGdaejB2OC1sNkhRS0FfSS1BQW9Pd2o0TENQMjE4SW53dHJXVnR3RUtBX0ktQUFvT3dqNExDTXVLdF9DUDllR21nUUVLQV9JLUFBb053ajRLQ0szRXN0V3YwTC1iVWdvRDhqNEFDZzNDUGdvSWc1NzdoSnJSdDRvcUNnUHlQZ0FLRGNJLUNnaVJ1c1BtemZtenlGd0tBX0ktQUFvT3dqNExDTlRBcHMtZGh2eXEwZ0VLQV9JLUFBb053ajRLQ0p2aDhzV0g1OXk1SUFvRDhqNEFDaF9TUGh3S0dsSkVRVTk2ZFZaM1JWbDNZMUZFTkhWMmNHZEJUbU5JU0ZWM0NoX1NQaHdLR2xKRVFVOWZjQzFWYmpCSGVUbHVXRlZ0Wm1kaE0xTlNYMXAzQ2hfU1Bod0tHbEpFUVU5cFEwaENhR3R1VTBSd09HcFZWekJPUzFoWU9FMVJDaF9TUGh3S0dsSkVRVTlYWjBsd1lVbDZha1p6UVhkeE5GOXhWR2hyTlROQkNoX1NQaHdLR2xKRVFVOXFNVkpuZEhkZmVtZHJibWxSWkdkTU5XTnlVRmxCQ2hfU1Bod0tHbEpFUVU4NWExbHRhMU5KVG5CVGFYVldTalEzUjNkT1RWSm5DaF9TUGh3S0dsSkVRVTlGYjNOTlVtbHlhM1ZKTjNvNE1tSmZia0oyUjNoQkNoX1NQaHdLR2xKRVFVOW1PRlExTURaUVZGcFVWRmxDWm01RVRVNURiR0ZSQ2hfU1Bod0tHbEpFUVU5UllqSlhRWGxLYTBwMlRURmhaMGRYZEhkRkxVOUJDaF9TUGh3S0dsSkVRVTlNWDFGNk1scFJRbUZNUkROTFExTnFWalpYZG5wM0NoX1NQaHdLR2xKRVFVOXpjeTFGWVdSRFpHZzBUVmxYV0hsMGFtWkpabFYzQ2hfU1Bod0tHbEpFUVU4MVRraFVXblJGV0ROSGJIWlhRMjgyYTJOdGFrdDNDaF9TUGh3S0dsSkVRVTlMWDBjMVRVZzFaM0ZJUTNRd1VXdENZVlZJTjJwUkNoX1NQaHdLR2xKRVFVOVpUWEZhWlV4U1RXMXhaRW8zZGs5b09UQXRhME5CQ2hfU1Bod0tHbEpFUVU4eVNGbEJhMFpIYzBGSmFWVmthRE5NVUhGRE5UZG5FaFVBQWdRR0NBb01EaEFTRkJZWUdod2VJQ0lrSmlnYUJBZ0FFQUVhQkFnQ0VBTWFCQWdFRUFVYUJBZ0dFQWNhQkFnSUVBa2FCQWdLRUFzYUJBZ01FQTBhQkFnT0VBOGFCQWdRRUJFYUJBZ1NFQk1hQkFnVUVCVWFCQWdXRUJjYUJBZ1lFQmthQkFnYUVCc2FCQWdjRUIwYUJBZ2VFQjhhQkFnZ0VDRWFCQWdpRUNNYUJBZ2tFQ1VhQkFnbUVDY2FCQWdvRUNrYUJBZ29FQ29hQkFnb0VDc2FCQWdvRUN3YUJBZ29FQzBhQkFnb0VDNGFCQWdvRUM4YUJBZ29FREFhQkFnb0VERWFCQWdvRURJYUJBZ29FRE1hQkFnb0VEUWFCQWdvRURVYUJBZ29FRFlhQkFnb0VEY3FGUUFDQkFZSUNnd09FQklVRmhnYUhCNGdJaVFtS0FqD3dhdGNoLW5leHQtZmVlZA%3D%3D"),
endpoint: browse,
), ),
top_comments: Paginator( top_comments: Paginator(
count: Some(705000), count: Some(705000),
items: [], items: [],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyJSIRIgtaZWVycm51TGk1RTAAeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyJSIRIgtaZWVycm51TGk1RTAAeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"),
endpoint: browse,
), ),
latest_comments: Paginator( latest_comments: Paginator(
count: Some(705000), count: Some(705000),
items: [], items: [],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyOCIRIgtaZWVycm51TGk1RTABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyOCIRIgtaZWVycm51TGk1RTABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"),
endpoint: browse,
), ),
) )

View file

@ -1227,15 +1227,18 @@ VideoDetails(
), ),
], ],
ctoken: Some("CBQSExILbkZEQnhCVWZFNzTAAQHIAQEYACqIBjJzNkw2d3lfQkFxOEJBb0Q4ajRBQ2c3Q1Bnc0ltdG1tX1p6ei1xYTNBUW9EOGo0QUNnN0NQZ3NJcThTNW5lQ1N0c2JpQVFvRDhqNEFDZzNDUGdvSXlvel8tN21NbWI1TUNnUHlQZ0FLRGNJLUNnaTFyOUdxODh6aXoxQUtBX0ktQUFvT3dqNExDS0c4MVlXQWlLRFd5UUVLQV9JLUFBb093ajRMQ0xMUnRJMzRfYjNDeXdFS0FfSS1BQW9Od2o0S0NQZlcxdldzM3AyLWJ3b0Q4ajRBQ2czQ1Bnb0loOVhCZ2NtcjNvY3RDZ1B5UGdBS0RjSS1DZ2oxMHFycnU2VzdyRmtLQV9JLUFBb093ajRMQ05McHBmckhxdkh0dmdFS0FfSS1BQW9Od2o0S0NPbUdpTG13M09iUUp3b0Q4ajRBQ2czQ1Bnb0lySjc1czZ6TGd1VUtDZ1B5UGdBS0RzSS1Dd2lLdmZ1WTdJcmZuX1VCQ2dQeVBnQUtEc0ktQ3dqTzY5WHk1UDZhdnVRQkNnUHlQZ0FLRHNJLUN3aS1pOTN2OFkzM3NOY0JDZ1B5UGdBS0RjSS1DZ2pIbmNQR2dwakp2QkFLQV9JLUFBb013ajRKQ0tlSTRxUzl1dHB6Q2dQeVBnQUtEY0ktQ2dqVXJkbU83YWFLbVFrS0FfSS1BQW9Pd2o0TENPQ0xrT0hDdllxSjNRRUtBX0ktQUFvTndqNEtDUFRwazh6RXc2Yk1IUklVQUFJRUJnZ0tEQTRRRWhRV0dCb2NIaUFpSkNZYUJBZ0FFQUVhQkFnQ0VBTWFCQWdFRUFVYUJBZ0dFQWNhQkFnSUVBa2FCQWdLRUFzYUJBZ01FQTBhQkFnT0VBOGFCQWdRRUJFYUJBZ1NFQk1hQkFnVUVCVWFCQWdXRUJjYUJBZ1lFQmthQkFnYUVCc2FCQWdjRUIwYUJBZ2VFQjhhQkFnZ0VDRWFCQWdpRUNNYUJBZ2tFQ1VhQkFnbUVDY3FGQUFDQkFZSUNnd09FQklVRmhnYUhCNGdJaVFtag93YXRjaC1uZXh0LWZlZWQ%3D"), ctoken: Some("CBQSExILbkZEQnhCVWZFNzTAAQHIAQEYACqIBjJzNkw2d3lfQkFxOEJBb0Q4ajRBQ2c3Q1Bnc0ltdG1tX1p6ei1xYTNBUW9EOGo0QUNnN0NQZ3NJcThTNW5lQ1N0c2JpQVFvRDhqNEFDZzNDUGdvSXlvel8tN21NbWI1TUNnUHlQZ0FLRGNJLUNnaTFyOUdxODh6aXoxQUtBX0ktQUFvT3dqNExDS0c4MVlXQWlLRFd5UUVLQV9JLUFBb093ajRMQ0xMUnRJMzRfYjNDeXdFS0FfSS1BQW9Od2o0S0NQZlcxdldzM3AyLWJ3b0Q4ajRBQ2czQ1Bnb0loOVhCZ2NtcjNvY3RDZ1B5UGdBS0RjSS1DZ2oxMHFycnU2VzdyRmtLQV9JLUFBb093ajRMQ05McHBmckhxdkh0dmdFS0FfSS1BQW9Od2o0S0NPbUdpTG13M09iUUp3b0Q4ajRBQ2czQ1Bnb0lySjc1czZ6TGd1VUtDZ1B5UGdBS0RzSS1Dd2lLdmZ1WTdJcmZuX1VCQ2dQeVBnQUtEc0ktQ3dqTzY5WHk1UDZhdnVRQkNnUHlQZ0FLRHNJLUN3aS1pOTN2OFkzM3NOY0JDZ1B5UGdBS0RjSS1DZ2pIbmNQR2dwakp2QkFLQV9JLUFBb013ajRKQ0tlSTRxUzl1dHB6Q2dQeVBnQUtEY0ktQ2dqVXJkbU83YWFLbVFrS0FfSS1BQW9Pd2o0TENPQ0xrT0hDdllxSjNRRUtBX0ktQUFvTndqNEtDUFRwazh6RXc2Yk1IUklVQUFJRUJnZ0tEQTRRRWhRV0dCb2NIaUFpSkNZYUJBZ0FFQUVhQkFnQ0VBTWFCQWdFRUFVYUJBZ0dFQWNhQkFnSUVBa2FCQWdLRUFzYUJBZ01FQTBhQkFnT0VBOGFCQWdRRUJFYUJBZ1NFQk1hQkFnVUVCVWFCQWdXRUJjYUJBZ1lFQmthQkFnYUVCc2FCQWdjRUIwYUJBZ2VFQjhhQkFnZ0VDRWFCQWdpRUNNYUJBZ2tFQ1VhQkFnbUVDY3FGQUFDQkFZSUNnd09FQklVRmhnYUhCNGdJaVFtag93YXRjaC1uZXh0LWZlZWQ%3D"),
endpoint: browse,
), ),
top_comments: Paginator( top_comments: Paginator(
count: Some(3200), count: Some(3200),
items: [], items: [],
ctoken: Some("Eg0SC25GREJ4QlVmRTc0GAYyJSIRIgtuRkRCeEJVZkU3NDAAeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"), ctoken: Some("Eg0SC25GREJ4QlVmRTc0GAYyJSIRIgtuRkRCeEJVZkU3NDAAeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"),
endpoint: browse,
), ),
latest_comments: Paginator( latest_comments: Paginator(
count: Some(3200), count: Some(3200),
items: [], items: [],
ctoken: Some("Eg0SC25GREJ4QlVmRTc0GAYyOCIRIgtuRkRCeEJVZkU3NDABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"), ctoken: Some("Eg0SC25GREJ4QlVmRTc0GAYyOCIRIgtuRkRCeEJVZkU3NDABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"),
endpoint: browse,
), ),
) )

View file

@ -40,15 +40,18 @@ VideoDetails(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
top_comments: Paginator( top_comments: Paginator(
count: None, count: None,
items: [], items: [],
ctoken: Some("Eg0SC0hSS3UwY3Zycl9vGAYyJSIRIgtIUkt1MGN2cnJfbzABeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"), ctoken: Some("Eg0SC0hSS3UwY3Zycl9vGAYyJSIRIgtIUkt1MGN2cnJfbzABeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"),
endpoint: browse,
), ),
latest_comments: Paginator( latest_comments: Paginator(
count: None, count: None,
items: [], items: [],
ctoken: Some("Eg0SC0hSS3UwY3Zycl9vGAYyOCIRIgtIUkt1MGN2cnJfbzABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"), ctoken: Some("Eg0SC0hSS3UwY3Zycl9vGAYyOCIRIgtIUkt1MGN2cnJfbzABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"),
endpoint: browse,
), ),
) )

View file

@ -718,15 +718,18 @@ VideoDetails(
), ),
], ],
ctoken: Some("CBQSExILMHJiOUNmT3ZvamvAAQHIAQEYACqrBjJzNkw2d3paQkFyV0JBb0Q4ajRBQ2c3Q1Bnc0l4Ty1xb3AyV25NWDVBUW9EOGo0QUNnN0NQZ3NJZ29uTDc3clgtWjdqQVFvRDhqNEFDZzNDUGdvSTU5N2RnZW1vaEl4YUNnUHlQZ0FLSWRJLUhnb2NVa1JEVFZWRE1sUlljVjkwTURaSWFtUnlNbWRmUzJSTGNFaFJad29EOGo0QUNnN0NQZ3NJMDlqVG05MzIwZEhtQVFvRDhqNEFDZzdDUGdzSWphem5fUFhDNnF2c0FRb0Q4ajRBQ2c3Q1Bnc0lrckN0cmRULXdfdldBUW9EOGo0QUNnN0NQZ3NJdGZfQnJ0NjNuYjJPQVFvRDhqNEFDZzdDUGdzSW1wYnF5SkdsNmRudkFRb0Q4ajRBQ2c3Q1Bnc0lxT2FZbXBqZjM3ZTdBUW9EOGo0QUNnN0NQZ3NJMEtfcWhNRGYzZDI2QVFvRDhqNEFDZzNDUGdvSW45N1lqLWllbTdnLUNnUHlQZ0FLRHNJLUN3aVg5by1DNzhxbzBNa0JDZ1B5UGdBS0RzSS1Dd2o2a3BYUXNPS1otZFFCQ2dQeVBnQUtEc0ktQ3dpUTI2aVNxYjYyd0lnQkNnUHlQZ0FLRGNJLUNnanV5ZmUtLW9iRWlqNEtBX0ktQUFvTndqNEtDSWVGemRXOGpyMmRid29EOGo0QUNnM0NQZ29JMGRlT2tfNmlfZkloQ2dQeVBnQUtEc0ktQ3dpajRPenpwdnp5NUlJQkNnUHlQZ0FLRHNJLUN3akRqZkdfdXZYQm9MZ0JFaFFBQWdRR0NBb01EaEFTRkJZWUdod2VJQ0lrSmhvRUNBQVFBUm9FQ0FJUUF4b0VDQVFRQlJvRUNBWVFCeG9FQ0FnUUNSb0VDQW9RQ3hvRUNBd1FEUm9FQ0E0UUR4b0VDQkFRRVJvRUNCSVFFeG9FQ0JRUUZSb0VDQllRRnhvRUNCZ1FHUm9FQ0JvUUd4b0VDQndRSFJvRUNCNFFIeG9FQ0NBUUlSb0VDQ0lRSXhvRUNDUVFKUm9FQ0NZUUp5b1VBQUlFQmdnS0RBNFFFaFFXR0JvY0hpQWlKQ1lqD3dhdGNoLW5leHQtZmVlZA%3D%3D"), ctoken: Some("CBQSExILMHJiOUNmT3ZvamvAAQHIAQEYACqrBjJzNkw2d3paQkFyV0JBb0Q4ajRBQ2c3Q1Bnc0l4Ty1xb3AyV25NWDVBUW9EOGo0QUNnN0NQZ3NJZ29uTDc3clgtWjdqQVFvRDhqNEFDZzNDUGdvSTU5N2RnZW1vaEl4YUNnUHlQZ0FLSWRJLUhnb2NVa1JEVFZWRE1sUlljVjkwTURaSWFtUnlNbWRmUzJSTGNFaFJad29EOGo0QUNnN0NQZ3NJMDlqVG05MzIwZEhtQVFvRDhqNEFDZzdDUGdzSWphem5fUFhDNnF2c0FRb0Q4ajRBQ2c3Q1Bnc0lrckN0cmRULXdfdldBUW9EOGo0QUNnN0NQZ3NJdGZfQnJ0NjNuYjJPQVFvRDhqNEFDZzdDUGdzSW1wYnF5SkdsNmRudkFRb0Q4ajRBQ2c3Q1Bnc0lxT2FZbXBqZjM3ZTdBUW9EOGo0QUNnN0NQZ3NJMEtfcWhNRGYzZDI2QVFvRDhqNEFDZzNDUGdvSW45N1lqLWllbTdnLUNnUHlQZ0FLRHNJLUN3aVg5by1DNzhxbzBNa0JDZ1B5UGdBS0RzSS1Dd2o2a3BYUXNPS1otZFFCQ2dQeVBnQUtEc0ktQ3dpUTI2aVNxYjYyd0lnQkNnUHlQZ0FLRGNJLUNnanV5ZmUtLW9iRWlqNEtBX0ktQUFvTndqNEtDSWVGemRXOGpyMmRid29EOGo0QUNnM0NQZ29JMGRlT2tfNmlfZkloQ2dQeVBnQUtEc0ktQ3dpajRPenpwdnp5NUlJQkNnUHlQZ0FLRHNJLUN3akRqZkdfdXZYQm9MZ0JFaFFBQWdRR0NBb01EaEFTRkJZWUdod2VJQ0lrSmhvRUNBQVFBUm9FQ0FJUUF4b0VDQVFRQlJvRUNBWVFCeG9FQ0FnUUNSb0VDQW9RQ3hvRUNBd1FEUm9FQ0E0UUR4b0VDQkFRRVJvRUNCSVFFeG9FQ0JRUUZSb0VDQllRRnhvRUNCZ1FHUm9FQ0JvUUd4b0VDQndRSFJvRUNCNFFIeG9FQ0NBUUlSb0VDQ0lRSXhvRUNDUVFKUm9FQ0NZUUp5b1VBQUlFQmdnS0RBNFFFaFFXR0JvY0hpQWlKQ1lqD3dhdGNoLW5leHQtZmVlZA%3D%3D"),
endpoint: browse,
), ),
top_comments: Paginator( top_comments: Paginator(
count: Some(2200), count: Some(2200),
items: [], items: [],
ctoken: Some("Eg0SCzByYjlDZk92b2prGAYyJSIRIgswcmI5Q2ZPdm9qazAAeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"), ctoken: Some("Eg0SCzByYjlDZk92b2prGAYyJSIRIgswcmI5Q2ZPdm9qazAAeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"),
endpoint: browse,
), ),
latest_comments: Paginator( latest_comments: Paginator(
count: Some(2200), count: Some(2200),
items: [], items: [],
ctoken: Some("Eg0SCzByYjlDZk92b2prGAYyOCIRIgswcmI5Q2ZPdm9qazABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"), ctoken: Some("Eg0SCzByYjlDZk92b2prGAYyOCIRIgswcmI5Q2ZPdm9qazABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"),
endpoint: browse,
), ),
) )

View file

@ -1186,15 +1186,18 @@ VideoDetails(
), ),
], ],
ctoken: Some("CBQSExILbkZEQnhCVWZFNzTAAQHIAQEYACqkBjJzNkw2d3pVQkFyUkJBb0Q4ajRBQ2d6Q1Bna0lwNGppcEwyNjJuTUtBX0ktQUFvTndqNEtDSW1CN18yaHlQUEdDUW9EOGo0QUNnM0NQZ29JaDlYQmdjbXIzb2N0Q2dQeVBnQUtEc0ktQ3dpZHRjTHlpWV9FaVpvQkNnUHlQZ0FLRHNJLUN3aW4wN2ZZbWZIVjVkVUJDZ1B5UGdBS0RjSS1DZ2pqNEstdl9ibWY0Z2dLQV9JLUFBb053ajRLQ0tqeDJfakowT0tlZlFvRDhqNEFDZzdDUGdzSXZvdmQ3X0dOOTdEWEFRb0Q4ajRBQ2czQ1Bnb0k0Y1hvektyVzFMWkJDZ1B5UGdBS0RjSS1DZ2pndWNfcXk4YkVneVFLQV9JLUFBb053ajRLQ1B2ZjAtcXMxdE90WlFvRDhqNEFDaUhTUGg0S0hGSkVRMDFWUTFoMWNWTkNiRWhCUlRaWWR5MTVaVXBCTUZSMWJuY0tBX0ktQUFvT3dqNExDTDZsdFl2ejZaQ2gyZ0VLQV9JLUFBb093ajRMQ0l6cnFkenM3NmJZMGdFS0FfSS1BQW9Pd2o0TENJUFNuOGpBbmRYYnNRRUtBX0ktQUFvT3dqNExDSXZEcXZidW9jamp6UUVLQV9JLUFBb093ajRMQ05HSXFzZVM5cUR2cFFFS0FfSS1BQW9Pd2o0TENNT2o4T3FwMVpIWDJBRUtBX0ktQUFvT3dqNExDSnJacHYyYzhfcW10d0VLQV9JLUFBb053ajRLQ1BmRGpKaTZzXy1ZUVJJVUFBSUVCZ2dLREE0UUVoUVdHQm9jSGlBaUpDWWFCQWdBRUFFYUJBZ0NFQU1hQkFnRUVBVWFCQWdHRUFjYUJBZ0lFQWthQkFnS0VBc2FCQWdNRUEwYUJBZ09FQThhQkFnUUVCRWFCQWdTRUJNYUJBZ1VFQlVhQkFnV0VCY2FCQWdZRUJrYUJBZ2FFQnNhQkFnY0VCMGFCQWdlRUI4YUJBZ2dFQ0VhQkFnaUVDTWFCQWdrRUNVYUJBZ21FQ2NxRkFBQ0JBWUlDZ3dPRUJJVUZoZ2FIQjRnSWlRbWoPd2F0Y2gtbmV4dC1mZWVk"), ctoken: Some("CBQSExILbkZEQnhCVWZFNzTAAQHIAQEYACqkBjJzNkw2d3pVQkFyUkJBb0Q4ajRBQ2d6Q1Bna0lwNGppcEwyNjJuTUtBX0ktQUFvTndqNEtDSW1CN18yaHlQUEdDUW9EOGo0QUNnM0NQZ29JaDlYQmdjbXIzb2N0Q2dQeVBnQUtEc0ktQ3dpZHRjTHlpWV9FaVpvQkNnUHlQZ0FLRHNJLUN3aW4wN2ZZbWZIVjVkVUJDZ1B5UGdBS0RjSS1DZ2pqNEstdl9ibWY0Z2dLQV9JLUFBb053ajRLQ0tqeDJfakowT0tlZlFvRDhqNEFDZzdDUGdzSXZvdmQ3X0dOOTdEWEFRb0Q4ajRBQ2czQ1Bnb0k0Y1hvektyVzFMWkJDZ1B5UGdBS0RjSS1DZ2pndWNfcXk4YkVneVFLQV9JLUFBb053ajRLQ1B2ZjAtcXMxdE90WlFvRDhqNEFDaUhTUGg0S0hGSkVRMDFWUTFoMWNWTkNiRWhCUlRaWWR5MTVaVXBCTUZSMWJuY0tBX0ktQUFvT3dqNExDTDZsdFl2ejZaQ2gyZ0VLQV9JLUFBb093ajRMQ0l6cnFkenM3NmJZMGdFS0FfSS1BQW9Pd2o0TENJUFNuOGpBbmRYYnNRRUtBX0ktQUFvT3dqNExDSXZEcXZidW9jamp6UUVLQV9JLUFBb093ajRMQ05HSXFzZVM5cUR2cFFFS0FfSS1BQW9Pd2o0TENNT2o4T3FwMVpIWDJBRUtBX0ktQUFvT3dqNExDSnJacHYyYzhfcW10d0VLQV9JLUFBb053ajRLQ1BmRGpKaTZzXy1ZUVJJVUFBSUVCZ2dLREE0UUVoUVdHQm9jSGlBaUpDWWFCQWdBRUFFYUJBZ0NFQU1hQkFnRUVBVWFCQWdHRUFjYUJBZ0lFQWthQkFnS0VBc2FCQWdNRUEwYUJBZ09FQThhQkFnUUVCRWFCQWdTRUJNYUJBZ1VFQlVhQkFnV0VCY2FCQWdZRUJrYUJBZ2FFQnNhQkFnY0VCMGFCQWdlRUI4YUJBZ2dFQ0VhQkFnaUVDTWFCQWdrRUNVYUJBZ21FQ2NxRkFBQ0JBWUlDZ3dPRUJJVUZoZ2FIQjRnSWlRbWoPd2F0Y2gtbmV4dC1mZWVk"),
endpoint: browse,
), ),
top_comments: Paginator( top_comments: Paginator(
count: Some(2900), count: Some(2900),
items: [], items: [],
ctoken: Some("Eg0SC25GREJ4QlVmRTc0GAYyJSIRIgtuRkRCeEJVZkU3NDAAeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"), ctoken: Some("Eg0SC25GREJ4QlVmRTc0GAYyJSIRIgtuRkRCeEJVZkU3NDAAeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"),
endpoint: browse,
), ),
latest_comments: Paginator( latest_comments: Paginator(
count: Some(2900), count: Some(2900),
items: [], items: [],
ctoken: Some("Eg0SC25GREJ4QlVmRTc0GAYyOCIRIgtuRkRCeEJVZkU3NDABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"), ctoken: Some("Eg0SC25GREJ4QlVmRTc0GAYyOCIRIgtuRkRCeEJVZkU3NDABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"),
endpoint: browse,
), ),
) )

View file

@ -775,15 +775,18 @@ VideoDetails(
), ),
], ],
ctoken: Some("CBQSExILODZZTEZPb2c0R03AAQHIAQEYACrgBzJzNkw2d3poQlFyZUJRb0Q4ajRBQ2czQ1Bnb0k3b3VlbjdUTV9yRklDZ1B5UGdBS0RjSS1DZ2lIaU55ejlkLWI2M1VLQV9JLUFBb093ajRMQ0tXNTlNR2pwdkNhb0FFS0FfSS1BQW9Od2o0S0NLLTduYXJ2NXN1bWFRb0Q4ajRBQ2c3Q1Bnc0l2ZV9nLVBfQ3dPUHFBUW9EOGo0QUNnN0NQZ3NJdDRDUW1aS2hpTUdmQVFvRDhqNEFDZzNDUGdvSWpZQ1lnWVg4c1lOdUNnUHlQZ0FLRHNJLUN3aUFvckdHN3RtSW43Z0JDZ1B5UGdBS0RjSS1DZ2k0NmNINDBLZTYwR2NLQV9JLUFBb093ajRMQ0xLaHc5M1d1OUdKMWdFS0FfSS1BQW9Od2o0S0NJQ18ySnEzbHFDbVpBb0Q4ajRBQ2czQ1Bnb0l1SWlsckpyb2dxODBDZ1B5UGdBS0RzSS1Dd2lQN1lqano5X25pYW9CQ2dQeVBnQUtEc0ktQ3dqWG9ZVzc2ZUgyX3MwQkNnUHlQZ0FLRHNJLUN3ajU4ZmZxLVpHYnpwZ0JDZ1B5UGdBS0RjSS1DZ2pfNXEyR3k2djQzMzRLQV9JLUFBb053ajRLQ09hQWlMdncyZXFQSmdvRDhqNEFDZzNDUGdvSWhPMjJ3TXU2cWY0UUNnUHlQZ0FLRHNJLUN3ajluTnVJd016eDB1d0JDZ1B5UGdBS0RjSS1DZ2lLNU5PTjY5N0dtaWtLQV9JLUFBb2FtajhYQ2hWUGZEazRNek0xTXpjMU5ERTJOVGMzT0RnMk1UY0tHNW9fR0FvV1Qzd3hNekF5TXpnek9UY3hPREk0TXpVMU9EUTFNd29ibWo4WUNoWlBmREUxT0RVek5Ua3dPRGczTURVeE1qVTBOemcwQ2dQeVBnQUtBX0ktQUJJWEFBSUVCZ2dLREE0UUVoUVdHQm9jSGlBaUpDWW9MQzBhQkFnQUVBRWFCQWdDRUFNYUJBZ0VFQVVhQkFnR0VBY2FCQWdJRUFrYUJBZ0tFQXNhQkFnTUVBMGFCQWdPRUE4YUJBZ1FFQkVhQkFnU0VCTWFCQWdVRUJVYUJBZ1dFQmNhQkFnWUVCa2FCQWdhRUJzYUJBZ2NFQjBhQkFnZUVCOGFCQWdnRUNFYUJBZ2lFQ01hQkFna0VDVWFCQWdtRUNjYUJBZ29FQ2thQkFnb0VDb2FCQWdvRUNzYUJBZ3NFQ2thQkFnc0VDb2FCQWdzRUNzYUJBZ3RFQ2thQkFndEVDb2FCQWd0RUNzcUZ3QUNCQVlJQ2d3T0VCSVVGaGdhSEI0Z0lpUW1LQ3d0ag93YXRjaC1uZXh0LWZlZWQ%3D"), ctoken: Some("CBQSExILODZZTEZPb2c0R03AAQHIAQEYACrgBzJzNkw2d3poQlFyZUJRb0Q4ajRBQ2czQ1Bnb0k3b3VlbjdUTV9yRklDZ1B5UGdBS0RjSS1DZ2lIaU55ejlkLWI2M1VLQV9JLUFBb093ajRMQ0tXNTlNR2pwdkNhb0FFS0FfSS1BQW9Od2o0S0NLLTduYXJ2NXN1bWFRb0Q4ajRBQ2c3Q1Bnc0l2ZV9nLVBfQ3dPUHFBUW9EOGo0QUNnN0NQZ3NJdDRDUW1aS2hpTUdmQVFvRDhqNEFDZzNDUGdvSWpZQ1lnWVg4c1lOdUNnUHlQZ0FLRHNJLUN3aUFvckdHN3RtSW43Z0JDZ1B5UGdBS0RjSS1DZ2k0NmNINDBLZTYwR2NLQV9JLUFBb093ajRMQ0xLaHc5M1d1OUdKMWdFS0FfSS1BQW9Od2o0S0NJQ18ySnEzbHFDbVpBb0Q4ajRBQ2czQ1Bnb0l1SWlsckpyb2dxODBDZ1B5UGdBS0RzSS1Dd2lQN1lqano5X25pYW9CQ2dQeVBnQUtEc0ktQ3dqWG9ZVzc2ZUgyX3MwQkNnUHlQZ0FLRHNJLUN3ajU4ZmZxLVpHYnpwZ0JDZ1B5UGdBS0RjSS1DZ2pfNXEyR3k2djQzMzRLQV9JLUFBb053ajRLQ09hQWlMdncyZXFQSmdvRDhqNEFDZzNDUGdvSWhPMjJ3TXU2cWY0UUNnUHlQZ0FLRHNJLUN3ajluTnVJd016eDB1d0JDZ1B5UGdBS0RjSS1DZ2lLNU5PTjY5N0dtaWtLQV9JLUFBb2FtajhYQ2hWUGZEazRNek0xTXpjMU5ERTJOVGMzT0RnMk1UY0tHNW9fR0FvV1Qzd3hNekF5TXpnek9UY3hPREk0TXpVMU9EUTFNd29ibWo4WUNoWlBmREUxT0RVek5Ua3dPRGczTURVeE1qVTBOemcwQ2dQeVBnQUtBX0ktQUJJWEFBSUVCZ2dLREE0UUVoUVdHQm9jSGlBaUpDWW9MQzBhQkFnQUVBRWFCQWdDRUFNYUJBZ0VFQVVhQkFnR0VBY2FCQWdJRUFrYUJBZ0tFQXNhQkFnTUVBMGFCQWdPRUE4YUJBZ1FFQkVhQkFnU0VCTWFCQWdVRUJVYUJBZ1dFQmNhQkFnWUVCa2FCQWdhRUJzYUJBZ2NFQjBhQkFnZUVCOGFCQWdnRUNFYUJBZ2lFQ01hQkFna0VDVWFCQWdtRUNjYUJBZ29FQ2thQkFnb0VDb2FCQWdvRUNzYUJBZ3NFQ2thQkFnc0VDb2FCQWdzRUNzYUJBZ3RFQ2thQkFndEVDb2FCQWd0RUNzcUZ3QUNCQVlJQ2d3T0VCSVVGaGdhSEI0Z0lpUW1LQ3d0ag93YXRjaC1uZXh0LWZlZWQ%3D"),
endpoint: browse,
), ),
top_comments: Paginator( top_comments: Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
latest_comments: Paginator( latest_comments: Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
) )

View file

@ -533,15 +533,18 @@ VideoDetails(
), ),
], ],
ctoken: Some("CBQSExILWHVNMm9uTUd2VEnAAQHIAQEYACqsBzJzNkw2d3k2QlFxM0JRb0Q4ajRBQ2czQ1Bnb0lvSmVsMDhiajMtcGVDZ1B5UGdBS0o5SS1KQW9pVUV4aGFGSktXRWczV0ZCSWJWZE9TemMwVm5wM1NVWXljWFZYY1dSR1NWZDJjZ29EOGo0QUNpZlNQaVFLSWxCTU5pMTRZV3hIWVZaRmRYQjJlVGxHUVVoZlJYZ3pTRlYxWHpGaFVrRXlialFLQV9JLUFBb1MwajRQQ2cxU1JGaDFUVEp2YmsxSGRsUkpDZ1B5UGdBS0RjSS1DZ2kxajRmWmtKNmo1UVVLQV9JLUFBb053ajRLQ0l6bHViS2doTldnSVFvRDhqNEFDZzNDUGdvSWpaeW4tUHlrXy1sU0NnUHlQZ0FLRHNJLUN3andyOUMtc18tb2g3SUJDZ1B5UGdBS0o5SS1KQW9pVUV3d1dqSlNSVFZsY1dGWlRWRXhiRnBaZGtWalRrOW1UVmx3VFVvelkyTktRd29EOGo0QUNnN0NQZ3NJM1lxcjFyWEI4TEs3QVFvRDhqNEFDZzdDUGdzSWhaYl83dVdna1BDZ0FRb0Q4ajRBQ2c3Q1Bnc0l2YjdxdUtldHhNYWtBUW9EOGo0QUNnM0NQZ29JblpEVXc5akYtT1VPQ2dQeVBnQUtIOUktSEFvYVVrUkZUV1E0VUZwSmRqbERVSE4yZGtWRVltOWZjRlZFTkhjS0FfSS1BQW9Od2o0S0NMLV9fclRrM3BmdENnb0Q4ajRBQ2c3Q1Bnc0lpZG5aNkxmZG5iZkxBUW9EOGo0QUNnM0NQZ29JdlB5dmw4UzJ4b0ppQ2dQeVBnQUtETUktQ1FpdHdOTzB0TmFrQ1FvRDhqNEFDaWZTUGlRS0lsQk1NazR6TjFoVWQxaG5jRlZpYWxSemNXVjFNbEZFZVRCTGIyRnpkMDlZTVZvS0FfSS1BQW9Od2o0S0NNQ1VudGpKOVkyaE94SVVBQUlFQmdnS0RBNFFFaFFXR0JvY0hpQWlKQ1lhQkFnQUVBRWFCQWdDRUFNYUJBZ0VFQVVhQkFnR0VBY2FCQWdJRUFrYUJBZ0tFQXNhQkFnTUVBMGFCQWdPRUE4YUJBZ1FFQkVhQkFnU0VCTWFCQWdVRUJVYUJBZ1dFQmNhQkFnWUVCa2FCQWdhRUJzYUJBZ2NFQjBhQkFnZUVCOGFCQWdnRUNFYUJBZ2lFQ01hQkFna0VDVWFCQWdtRUNjcUZBQUNCQVlJQ2d3T0VCSVVGaGdhSEI0Z0lpUW1qD3dhdGNoLW5leHQtZmVlZA%3D%3D"), ctoken: Some("CBQSExILWHVNMm9uTUd2VEnAAQHIAQEYACqsBzJzNkw2d3k2QlFxM0JRb0Q4ajRBQ2czQ1Bnb0lvSmVsMDhiajMtcGVDZ1B5UGdBS0o5SS1KQW9pVUV4aGFGSktXRWczV0ZCSWJWZE9TemMwVm5wM1NVWXljWFZYY1dSR1NWZDJjZ29EOGo0QUNpZlNQaVFLSWxCTU5pMTRZV3hIWVZaRmRYQjJlVGxHUVVoZlJYZ3pTRlYxWHpGaFVrRXlialFLQV9JLUFBb1MwajRQQ2cxU1JGaDFUVEp2YmsxSGRsUkpDZ1B5UGdBS0RjSS1DZ2kxajRmWmtKNmo1UVVLQV9JLUFBb053ajRLQ0l6bHViS2doTldnSVFvRDhqNEFDZzNDUGdvSWpaeW4tUHlrXy1sU0NnUHlQZ0FLRHNJLUN3andyOUMtc18tb2g3SUJDZ1B5UGdBS0o5SS1KQW9pVUV3d1dqSlNSVFZsY1dGWlRWRXhiRnBaZGtWalRrOW1UVmx3VFVvelkyTktRd29EOGo0QUNnN0NQZ3NJM1lxcjFyWEI4TEs3QVFvRDhqNEFDZzdDUGdzSWhaYl83dVdna1BDZ0FRb0Q4ajRBQ2c3Q1Bnc0l2YjdxdUtldHhNYWtBUW9EOGo0QUNnM0NQZ29JblpEVXc5akYtT1VPQ2dQeVBnQUtIOUktSEFvYVVrUkZUV1E0VUZwSmRqbERVSE4yZGtWRVltOWZjRlZFTkhjS0FfSS1BQW9Od2o0S0NMLV9fclRrM3BmdENnb0Q4ajRBQ2c3Q1Bnc0lpZG5aNkxmZG5iZkxBUW9EOGo0QUNnM0NQZ29JdlB5dmw4UzJ4b0ppQ2dQeVBnQUtETUktQ1FpdHdOTzB0TmFrQ1FvRDhqNEFDaWZTUGlRS0lsQk1NazR6TjFoVWQxaG5jRlZpYWxSemNXVjFNbEZFZVRCTGIyRnpkMDlZTVZvS0FfSS1BQW9Od2o0S0NNQ1VudGpKOVkyaE94SVVBQUlFQmdnS0RBNFFFaFFXR0JvY0hpQWlKQ1lhQkFnQUVBRWFCQWdDRUFNYUJBZ0VFQVVhQkFnR0VBY2FCQWdJRUFrYUJBZ0tFQXNhQkFnTUVBMGFCQWdPRUE4YUJBZ1FFQkVhQkFnU0VCTWFCQWdVRUJVYUJBZ1dFQmNhQkFnWUVCa2FCQWdhRUJzYUJBZ2NFQjBhQkFnZUVCOGFCQWdnRUNFYUJBZ2lFQ01hQkFna0VDVWFCQWdtRUNjcUZBQUNCQVlJQ2d3T0VCSVVGaGdhSEI0Z0lpUW1qD3dhdGNoLW5leHQtZmVlZA%3D%3D"),
endpoint: browse,
), ),
top_comments: Paginator( top_comments: Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
latest_comments: Paginator( latest_comments: Paginator(
count: Some(0), count: Some(0),
items: [], items: [],
ctoken: None, ctoken: None,
endpoint: browse,
), ),
) )

View file

@ -736,15 +736,18 @@ VideoDetails(
), ),
], ],
ctoken: Some("CBQSExILWmVlcnJudUxpNUXAAQHIAQEYACq7BjJzNkw2d3psQkFyaUJBb0Q4ajRBQ2c3Q1Bnc0l6cS1tbFBTLTVKcmhBUW9EOGo0QUNoTFNQZzhLRFZKRVdtVmxjbkp1ZFV4cE5VVUtBX0ktQUFvdzBqNHRDaXRTUkVOTVFVczFkWGxmYXpJM2RYVXRSWFJSWDJJMVZUSnlNalpFVGtSYVQyMU9jVWRrWTJOVlNVZFJDZ1B5UGdBS0RjSS1DZ2k0OVlLQTU5ZlYtMWdLQV9JLUFBb053ajRLQ0tyR2pyWEF3SUxETmdvRDhqNEFDZzNDUGdvSWc1NzdoSnJSdDRvcUNnUHlQZ0FLRGNJLUNnakw3Wm1mMm9LRWp5WUtBX0ktQUFvTndqNEtDTnVibVl1VjBvRG5DQW9EOGo0QUNnN0NQZ3NJLU1xaTZ1MlZ3NC01QVFvRDhqNEFDZzNDUGdvSXk4ZmVyNE9zMHVSQ0NnUHlQZ0FLRGNJLUNnalByYkhnb292TTFSRUtBX0ktQUFvT3dqNExDSlhQa191MzVmVHJwQUVLQV9JLUFBb053ajRLQ0o3WmxkTG1pWkxDZFFvRDhqNEFDZzdDUGdzSWc2R083cmJ3MmNHS0FRb0Q4ajRBQ2czQ1Bnb0lyY1N5MWFfUXY1dFNDZ1B5UGdBS0RjSS1DZ2kzdWEtODc5SGtoRzhLQV9JLUFBb093ajRMQ0pfTTJhZUktNWZ4NmdFS0FfSS1BQW9Od2o0S0NMcW9udXJTdUpIaFl3b0Q4ajRBQ2c3Q1Bnc0l0TnJ6OVByWHRLN1lBUW9EOGo0QUNnM0NQZ29JOVpHYjR0LTZyYWMxRWhRQUFnUUdDQW9NRGhBU0ZCWVlHaHdlSUNJa0pob0VDQUFRQVJvRUNBSVFBeG9FQ0FRUUJSb0VDQVlRQnhvRUNBZ1FDUm9FQ0FvUUN4b0VDQXdRRFJvRUNBNFFEeG9FQ0JBUUVSb0VDQklRRXhvRUNCUVFGUm9FQ0JZUUZ4b0VDQmdRR1JvRUNCb1FHeG9FQ0J3UUhSb0VDQjRRSHhvRUNDQVFJUm9FQ0NJUUl4b0VDQ1FRSlJvRUNDWVFKeW9VQUFJRUJnZ0tEQTRRRWhRV0dCb2NIaUFpSkNZag93YXRjaC1uZXh0LWZlZWQ%3D"), ctoken: Some("CBQSExILWmVlcnJudUxpNUXAAQHIAQEYACq7BjJzNkw2d3psQkFyaUJBb0Q4ajRBQ2c3Q1Bnc0l6cS1tbFBTLTVKcmhBUW9EOGo0QUNoTFNQZzhLRFZKRVdtVmxjbkp1ZFV4cE5VVUtBX0ktQUFvdzBqNHRDaXRTUkVOTVFVczFkWGxmYXpJM2RYVXRSWFJSWDJJMVZUSnlNalpFVGtSYVQyMU9jVWRrWTJOVlNVZFJDZ1B5UGdBS0RjSS1DZ2k0OVlLQTU5ZlYtMWdLQV9JLUFBb053ajRLQ0tyR2pyWEF3SUxETmdvRDhqNEFDZzNDUGdvSWc1NzdoSnJSdDRvcUNnUHlQZ0FLRGNJLUNnakw3Wm1mMm9LRWp5WUtBX0ktQUFvTndqNEtDTnVibVl1VjBvRG5DQW9EOGo0QUNnN0NQZ3NJLU1xaTZ1MlZ3NC01QVFvRDhqNEFDZzNDUGdvSXk4ZmVyNE9zMHVSQ0NnUHlQZ0FLRGNJLUNnalByYkhnb292TTFSRUtBX0ktQUFvT3dqNExDSlhQa191MzVmVHJwQUVLQV9JLUFBb053ajRLQ0o3WmxkTG1pWkxDZFFvRDhqNEFDZzdDUGdzSWc2R083cmJ3MmNHS0FRb0Q4ajRBQ2czQ1Bnb0lyY1N5MWFfUXY1dFNDZ1B5UGdBS0RjSS1DZ2kzdWEtODc5SGtoRzhLQV9JLUFBb093ajRMQ0pfTTJhZUktNWZ4NmdFS0FfSS1BQW9Od2o0S0NMcW9udXJTdUpIaFl3b0Q4ajRBQ2c3Q1Bnc0l0TnJ6OVByWHRLN1lBUW9EOGo0QUNnM0NQZ29JOVpHYjR0LTZyYWMxRWhRQUFnUUdDQW9NRGhBU0ZCWVlHaHdlSUNJa0pob0VDQUFRQVJvRUNBSVFBeG9FQ0FRUUJSb0VDQVlRQnhvRUNBZ1FDUm9FQ0FvUUN4b0VDQXdRRFJvRUNBNFFEeG9FQ0JBUUVSb0VDQklRRXhvRUNCUVFGUm9FQ0JZUUZ4b0VDQmdRR1JvRUNCb1FHeG9FQ0J3UUhSb0VDQjRRSHhvRUNDQVFJUm9FQ0NJUUl4b0VDQ1FRSlJvRUNDWVFKeW9VQUFJRUJnZ0tEQTRRRWhRV0dCb2NIaUFpSkNZag93YXRjaC1uZXh0LWZlZWQ%3D"),
endpoint: browse,
), ),
top_comments: Paginator( top_comments: Paginator(
count: Some(705000), count: Some(705000),
items: [], items: [],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyJSIRIgtaZWVycm51TGk1RTAAeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyJSIRIgtaZWVycm51TGk1RTAAeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"),
endpoint: browse,
), ),
latest_comments: Paginator( latest_comments: Paginator(
count: Some(705000), count: Some(705000),
items: [], items: [],
ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyOCIRIgtaZWVycm51TGk1RTABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"), ctoken: Some("Eg0SC1plZXJybnVMaTVFGAYyOCIRIgtaZWVycm51TGk1RTABeAIwAUIhZW5nYWdlbWVudC1wYW5lbC1jb21tZW50cy1zZWN0aW9u"),
endpoint: browse,
), ),
) )

View file

@ -4,6 +4,7 @@ mod ordering;
mod paginator; mod paginator;
pub mod richtext; pub mod richtext;
pub use paginator::ContinuationEndpoint;
pub use paginator::Paginator; pub use paginator::Paginator;
use std::ops::Range; use std::ops::Range;
@ -810,7 +811,7 @@ pub struct ChannelRssVideo {
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct SearchResult { pub struct SearchResult {
pub items: Paginator<SearchItem>, pub items: Paginator<YouTubeItem>,
pub corrected_query: Option<String>, pub corrected_query: Option<String>,
} }
@ -902,3 +903,119 @@ pub struct SearchChannel {
/// Abbreviated channel description /// Abbreviated channel description
pub short_description: String, pub short_description: String,
} }
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum YouTubeItem {
Video(VideoItem),
Playlist(PlaylistItem),
Channel(ChannelItem),
}
/// YouTube video list item
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct VideoItem {
/// Unique YouTube video ID
pub id: String,
/// Video title
pub title: String,
/// Video length in seconds.
///
/// Is [`None`] for livestreams.
pub length: Option<u32>,
/// Video thumbnail
pub thumbnail: Vec<Thumbnail>,
/// Channel of the video
pub channel: Option<ChannelTag>,
/// Video publishing date.
///
/// [`None`] if the date could not be parsed.
pub publish_date: Option<DateTime<Local>>,
/// Textual video publish date (e.g. `11 months ago`, depends on language)
///
/// Is [`None`] for livestreams.
pub publish_date_txt: Option<String>,
/// View count
///
/// [`None`] if it could not be extracted.
pub view_count: Option<u64>,
/// Is the video an active livestream?
pub is_live: bool,
/// Is the video a YouTube Short video (vertical and <60s)?
pub is_short: bool,
/// Is the video announced, but not released yet (YouTube Premiere)?
pub is_upcoming: bool,
/// Abbreviated video description
pub short_description: Option<String>,
}
/// YouTube channel list item
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct ChannelItem {
/// Unique YouTube channel ID
pub id: String,
/// Channel name
pub name: String,
/// Channel avatar/profile picture
pub avatar: Vec<Thumbnail>,
/// Channel verification mark
pub verification: Verification,
/// Approximate number of subscribers
///
/// [`None`] if hidden by the owner or not present.
pub subscriber_count: Option<u64>,
/// Number of videos from the channel
pub video_count: u64,
/// Abbreviated channel description
pub short_description: String,
}
/// YouTube playlist list item
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct PlaylistItem {
/// Unique YouTube Playlist-ID (e.g. `PL5dDx681T4bR7ZF1IuWzOv1omlRbE7PiJ`)
pub id: String,
/// Playlist name
pub name: String,
/// Playlist thumbnail
pub thumbnail: Vec<Thumbnail>,
/// Channel of the playlist
pub channel: Option<ChannelTag>,
/// Number of playlist videos
pub video_count: Option<u64>,
}
impl TryFrom<YouTubeItem> for VideoItem {
type Error = ();
fn try_from(value: YouTubeItem) -> Result<Self, Self::Error> {
match value {
YouTubeItem::Video(video) => Ok(video),
_ => Err(()),
}
}
}
impl TryFrom<YouTubeItem> for PlaylistItem {
type Error = ();
fn try_from(value: YouTubeItem) -> Result<Self, Self::Error> {
match value {
YouTubeItem::Playlist(playlist) => Ok(playlist),
_ => Err(()),
}
}
}
impl TryFrom<YouTubeItem> for ChannelItem {
type Error = ();
fn try_from(value: YouTubeItem) -> Result<Self, Self::Error> {
match value {
YouTubeItem::Channel(channel) => Ok(channel),
_ => Err(()),
}
}
}

View file

@ -31,6 +31,26 @@ pub struct Paginator<T> {
/// YouTube visitor data. Required for fetching the startpage /// YouTube visitor data. Required for fetching the startpage
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub visitor_data: Option<String>, pub visitor_data: Option<String>,
/// YouTube API endpoint to fetch continuations from
pub endpoint: ContinuationEndpoint,
}
#[derive(Debug, Copy, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum ContinuationEndpoint {
Browse,
Search,
Next,
}
impl ContinuationEndpoint {
pub(crate) fn as_str(self) -> &'static str {
match self {
ContinuationEndpoint::Browse => "browse",
ContinuationEndpoint::Search => "search",
ContinuationEndpoint::Next => "next",
}
}
} }
impl<T> Default for Paginator<T> { impl<T> Default for Paginator<T> {
@ -40,6 +60,7 @@ impl<T> Default for Paginator<T> {
items: Vec::new(), items: Vec::new(),
ctoken: None, ctoken: None,
visitor_data: None, visitor_data: None,
endpoint: ContinuationEndpoint::Browse,
} }
} }
} }
@ -63,6 +84,25 @@ impl<T> Paginator<T> {
items, items,
ctoken, ctoken,
visitor_data, visitor_data,
endpoint: ContinuationEndpoint::Browse,
}
}
pub(crate) fn new_with_endpoint(
count: Option<u64>,
items: Vec<T>,
ctoken: Option<String>,
endpoint: ContinuationEndpoint,
) -> Self {
Self {
count: match ctoken {
Some(_) => count,
None => items.len().try_into().ok(),
},
items,
ctoken,
visitor_data: None,
endpoint,
} }
} }

View file

@ -7,7 +7,7 @@ use rustypipe::client::{ClientType, RustyPipe};
use rustypipe::error::{Error, ExtractionError}; use rustypipe::error::{Error, ExtractionError};
use rustypipe::model::richtext::ToPlaintext; use rustypipe::model::richtext::ToPlaintext;
use rustypipe::model::{ use rustypipe::model::{
AudioCodec, AudioFormat, Channel, SearchItem, UrlTarget, Verification, VideoCodec, VideoFormat, AudioCodec, AudioFormat, Channel, UrlTarget, Verification, VideoCodec, VideoFormat, YouTubeItem,
}; };
use rustypipe::param::{ use rustypipe::param::{
search_filter::{self, SearchFilter}, search_filter::{self, SearchFilter},
@ -75,7 +75,7 @@ async fn get_player_from_client(#[case] client_type: ClientType) {
assert_eq!(video.codec, VideoCodec::Vp9); assert_eq!(video.codec, VideoCodec::Vp9);
assert_approx(audio.bitrate as f64, 130685.0); assert_approx(audio.bitrate as f64, 130685.0);
assert_eq!(audio.average_bitrate, 129496); assert_approx(audio.average_bitrate as f64, 129496.0);
assert_eq!(audio.size, 4193863); assert_eq!(audio.size, 4193863);
assert_eq!(audio.mime, "audio/mp4; codecs=\"mp4a.40.2\""); assert_eq!(audio.mime, "audio/mp4; codecs=\"mp4a.40.2\"");
assert_eq!(audio.format, AudioFormat::M4a); assert_eq!(audio.format, AudioFormat::M4a);
@ -154,7 +154,7 @@ async fn get_player_from_client(#[case] client_type: ClientType) {
#[case::live( #[case::live(
"86YLFOog4GM", "86YLFOog4GM",
"🌎 Nasa Live Stream - Earth From Space : Live Views from the ISS", "🌎 Nasa Live Stream - Earth From Space : Live Views from the ISS",
"Live NASA - Views Of Earth from Space", "The station is crewed by NASA astronauts as well as Russian Cosmonauts",
0, 0,
"UCakgsb0w7QB0VHdnCc-OVEA", "UCakgsb0w7QB0VHdnCc-OVEA",
"Space Videos", "Space Videos",
@ -701,7 +701,7 @@ async fn get_video_details_live() {
); );
let desc = details.description.to_plaintext(); let desc = details.description.to_plaintext();
assert!( assert!(
desc.contains("Live NASA - Views Of Earth from Space"), desc.contains("The station is crewed by NASA astronauts as well as Russian Cosmonauts"),
"bad description: {}", "bad description: {}",
desc desc
); );
@ -896,7 +896,7 @@ async fn channel_videos(#[case] order: ChannelOrder) {
} }
ChannelOrder::Popular => { ChannelOrder::Popular => {
assert!( assert!(
first_video.view_count > 2300000, first_video.view_count.unwrap() > 2300000,
"most popular video < 2.3M views" "most popular video < 2.3M views"
) )
} }
@ -1156,13 +1156,13 @@ async fn search_filter_entity(#[case] entity: search_filter::Entity) {
assert!(!result.items.is_exhausted()); assert!(!result.items.is_exhausted());
result.items.items.iter().for_each(|item| match item { result.items.items.iter().for_each(|item| match item {
SearchItem::Video(_) => { YouTubeItem::Video(_) => {
assert_eq!(entity, search_filter::Entity::Video); assert_eq!(entity, search_filter::Entity::Video);
} }
SearchItem::Channel(_) => { YouTubeItem::Channel(_) => {
assert_eq!(entity, search_filter::Entity::Channel); assert_eq!(entity, search_filter::Entity::Channel);
} }
SearchItem::Playlist(_) => { YouTubeItem::Playlist(_) => {
assert_eq!(entity, search_filter::Entity::Playlist); assert_eq!(entity, search_filter::Entity::Playlist);
} }
}); });