diff --git a/codegen/src/abtest.rs b/codegen/src/abtest.rs index 9d6a4ce..a87873f 100644 --- a/codegen/src/abtest.rs +++ b/codegen/src/abtest.rs @@ -26,6 +26,7 @@ pub enum ABTest { ShortDateFormat = 7, TrackViewcount = 8, PlaylistsForShorts = 9, + ChannelAboutModal = 10, } const TESTS_TO_RUN: [ABTest; 3] = [ @@ -98,6 +99,7 @@ pub async fn run_test( ABTest::ShortDateFormat => short_date_format(&query).await, ABTest::PlaylistsForShorts => playlists_for_shorts(&query).await, ABTest::TrackViewcount => track_viewcount(&query).await, + ABTest::ChannelAboutModal => channel_about_modal(&query).await, } .unwrap(); pb.inc(1); @@ -259,6 +261,16 @@ pub async fn short_date_format(rp: &RustyPipeQuery) -> Result { })) } +pub async fn playlists_for_shorts(rp: &RustyPipeQuery) -> Result { + let playlist = rp.playlist("UUSHh8gHdtzO2tXd593_bjErWg").await?; + let v1 = playlist + .videos + .items + .first() + .ok_or_else(|| anyhow::anyhow!("no videos"))?; + Ok(v1.publish_date_txt.is_none()) +} + pub async fn track_viewcount(rp: &RustyPipeQuery) -> Result { let res = rp.music_search("lieblingsmensch namika").await?; @@ -273,12 +285,19 @@ pub async fn track_viewcount(rp: &RustyPipeQuery) -> Result { Ok(track.view_count.is_some()) } -pub async fn playlists_for_shorts(rp: &RustyPipeQuery) -> Result { - let playlist = rp.playlist("UUSHh8gHdtzO2tXd593_bjErWg").await?; - let v1 = playlist - .videos - .items - .first() - .ok_or_else(|| anyhow::anyhow!("no videos"))?; - Ok(v1.publish_date_txt.is_none()) +pub async fn channel_about_modal(rp: &RustyPipeQuery) -> Result { + let id = "UC2DjFE7Xf11URZqWBigcVOQ"; + let res = rp + .raw( + ClientType::Desktop, + "browse", + &QBrowse { + context: rp.get_context(ClientType::Desktop, true, None).await, + browse_id: id, + params: None, + }, + ) + .await + .unwrap(); + Ok(!res.contains("\"EgVhYm91dPIGBAoCEgA%3D\"")) } diff --git a/codegen/src/download_testfiles.rs b/codegen/src/download_testfiles.rs index 147db3e..239dabb 100644 --- a/codegen/src/download_testfiles.rs +++ b/codegen/src/download_testfiles.rs @@ -339,7 +339,7 @@ async fn channel_playlists() { } async fn channel_info() { - let json_path = path!(*TESTFILES_DIR / "channel" / "channel_info.json"); + let json_path = path!(*TESTFILES_DIR / "channel" / "channel_info2.json"); if json_path.exists() { return; } diff --git a/codegen/src/gen_locales.rs b/codegen/src/gen_locales.rs index 0f4ad48..fdd0410 100644 --- a/codegen/src/gen_locales.rs +++ b/codegen/src/gen_locales.rs @@ -202,11 +202,20 @@ pub enum Country { .to_owned(); let mut code_lang_array = format!( - "/// Array of all available languages\npub const LANGUAGES: [Language; {}] = [\n", + r#"/// Array of all available languages +/// The languages are sorted by their native names. This array can be used to display +/// a language selection or to get the language code from a language name using binary search. +pub const LANGUAGES: [Language; {}] = [ +"#, languages.len() ); let mut code_country_array = format!( - "/// Array of all available countries\npub const COUNTRIES: [Country; {}] = [\n", + r#"/// Array of all available countries +/// +/// The countries are sorted by their english names. This array can be used to display +/// a country selection or to get the country code from a country name using binary search. +pub const COUNTRIES: [Country; {}] = [ +"#, countries.len() ); @@ -252,9 +261,6 @@ pub enum Country { code_langs += &enum_name; code_langs += ",\n"; - // Language array - writeln!(code_lang_array, " Language::{enum_name},").unwrap(); - // Language names writeln!( code_lang_names, @@ -264,6 +270,24 @@ pub enum Country { } code_langs += "}\n"; + // Language array + let languages_by_name = languages + .iter() + .map(|(k, v)| (v, k)) + .collect::>(); + for code in languages_by_name.values() { + let enum_name = code.split('-').fold(String::new(), |mut output, c| { + let _ = write!( + output, + "{}{}", + c[0..1].to_owned().to_uppercase(), + c[1..].to_owned().to_lowercase() + ); + output + }); + writeln!(code_lang_array, " Language::{enum_name},").unwrap(); + } + for (c, n) in &countries { let enum_name = c[0..1].to_owned().to_uppercase() + &c[1..].to_owned().to_lowercase(); @@ -271,9 +295,6 @@ pub enum Country { writeln!(code_countries, " /// {n}").unwrap(); writeln!(code_countries, " {enum_name},").unwrap(); - // Country array - writeln!(code_country_array, " Country::{enum_name},").unwrap(); - // Country names writeln!( code_country_names, @@ -282,6 +303,16 @@ pub enum Country { .unwrap(); } + // Country array + let countries_by_name = countries + .iter() + .map(|(k, v)| (v, k)) + .collect::>(); + for c in countries_by_name.values() { + let enum_name = c[0..1].to_owned().to_uppercase() + &c[1..].to_owned().to_lowercase(); + writeln!(code_country_array, " Country::{enum_name},").unwrap(); + } + // Add Country::Zz / Global code_countries += " /// Global (can only be used for music charts)\n"; code_countries += " Zz,\n"; diff --git a/notes/AB_Tests.md b/notes/AB_Tests.md index 745b1e1..20efb3b 100644 --- a/notes/AB_Tests.md +++ b/notes/AB_Tests.md @@ -417,3 +417,18 @@ tab. Since the reel items dont include upload date information you can circumvent this new UI by using the mobile client. But that may change in the future. + +## [10] Channel About modal + +- **Encountered on:** 03.11.2023 +- **Impact:** 🟡 Medium +- **Endpoint:** browse (channel info) + +![A/B test 10 screenshot](./_img/ab_10.png) + +YouTube replaced the *About* channel tab with a modal. This changes the way additional +channel metadata has to be fetched. + +The new modal uses a continuation request with a token which can be easily generated. +Attempts to fetch the old about tab with the A/B test enabled will lead to a redirect to +the main tab. diff --git a/notes/_img/ab_10.png b/notes/_img/ab_10.png new file mode 100644 index 0000000..21101dd Binary files /dev/null and b/notes/_img/ab_10.png differ diff --git a/src/client/channel.rs b/src/client/channel.rs index 3116348..4af14ee 100644 --- a/src/client/channel.rs +++ b/src/client/channel.rs @@ -1,20 +1,21 @@ use std::fmt::Debug; use serde::Serialize; +use time::OffsetDateTime; use url::Url; use crate::{ error::{Error, ExtractionError}, model::{ paginator::{ContinuationEndpoint, Paginator}, - Channel, ChannelInfo, PlaylistItem, VideoItem, YouTubeItem, + Channel, ChannelInfo, PlaylistItem, VideoItem, }, param::{ChannelOrder, ChannelVideoTab, Language}, - serializer::MapResult, - util::{self, ProtoBuilder}, + serializer::{text::TextComponent, MapResult}, + util::{self, timeago, ProtoBuilder}, }; -use super::{response, ClientType, MapResponse, RustyPipeQuery, YTContext}; +use super::{response, ClientType, MapResponse, QContinuation, RustyPipeQuery, YTContext}; #[derive(Debug, Serialize)] #[serde(rename_all = "camelCase")] @@ -36,8 +37,6 @@ enum ChannelTab { Live, #[serde(rename = "EglwbGF5bGlzdHMgAQ%3D%3D")] Playlists, - #[serde(rename = "EgVhYm91dPIGBAoCEgA%3D")] - Info, #[serde(rename = "EgZzZWFyY2jyBgQKAloA")] Search, } @@ -126,7 +125,7 @@ impl RustyPipeQuery { let visitor_data = Some(self.get_visitor_data().await?); self.continuation( - order_ctoken(channel_id.as_ref(), tab, order), + order_ctoken(channel_id.as_ref(), tab, order, &random_target()), ContinuationEndpoint::Browse, visitor_data.as_deref(), ) @@ -179,19 +178,17 @@ impl RustyPipeQuery { pub async fn channel_info + Debug>( &self, channel_id: S, - ) -> Result, Error> { + ) -> Result { let channel_id = channel_id.as_ref(); - let context = self.get_context(ClientType::Desktop, true, None).await; - let request_body = QChannel { + let context = self.get_context(ClientType::Desktop, false, None).await; + let request_body = QContinuation { context, - browse_id: channel_id, - params: ChannelTab::Info, - query: None, + continuation: &channel_info_ctoken(channel_id, &random_target()), }; - self.execute_request::( + self.execute_request::( ClientType::Desktop, - "channel_info", + "channel_info2", channel_id, "browse", &request_body, @@ -290,46 +287,64 @@ impl MapResponse>> for response::Channel { } } -impl MapResponse> for response::Channel { +impl MapResponse for response::ChannelAbout { fn map_response( self, - id: &str, + _id: &str, lang: Language, _deobf: Option<&crate::deobfuscate::DeobfData>, - vdata: Option<&str>, - ) -> Result>, ExtractionError> { - let content = map_channel_content(id, self.contents, self.alerts)?; - let channel_data = map_channel( - MapChannelData { - header: self.header, - metadata: self.metadata, - microformat: self.microformat, - visitor_data: self - .response_context - .visitor_data - .or_else(|| vdata.map(str::to_owned)), - has_shorts: content.has_shorts, - has_live: content.has_live, - }, - id, - lang, - )?; + _visitor_data: Option<&str>, + ) -> Result, ExtractionError> { + let ep = self + .on_response_received_endpoints + .into_iter() + .next() + .ok_or(ExtractionError::InvalidData("no received endpoint".into()))?; + let continuations = ep.append_continuation_items_action.continuation_items; + let about = continuations + .c + .into_iter() + .next() + .ok_or(ExtractionError::InvalidData("no aboutChannel data".into()))? + .about_channel_renderer + .metadata + .about_channel_view_model; + let mut warnings = continuations.warnings; - let mut mapper = response::YouTubeListMapper::::new(lang); - mapper.map_response(content.content); - let mut warnings = mapper.warnings; - - let cinfo = mapper.channel_info.unwrap_or_else(|| { - warnings.push("no aboutFullMetadata".to_owned()); - ChannelInfo { - create_date: None, - view_count: None, - links: Vec::new(), - } - }); + let links = about + .links + .into_iter() + .filter_map(|l| { + let lv = l.channel_external_link_view_model; + if let TextComponent::Web { url, .. } = lv.link { + Some((String::from(lv.title), util::sanitize_yt_url(&url))) + } else { + None + } + }) + .collect::>(); Ok(MapResult { - c: combine_channel_data(channel_data.c, cinfo), + c: ChannelInfo { + id: about.channel_id, + url: about.canonical_channel_url, + description: about.description, + subscriber_count: about + .subscriber_count_text + .and_then(|txt| util::parse_large_numstr_or_warn(&txt, lang, &mut warnings)), + video_count: about + .video_count_text + .and_then(|txt| util::parse_numeric_or_warn(&txt, &mut warnings)), + create_date: about.joined_date_text.and_then(|txt| { + timeago::parse_textual_date_or_warn(lang, &txt, &mut warnings) + .map(OffsetDateTime::date) + }), + view_count: about + .view_count_text + .and_then(|txt| util::parse_numeric_or_warn(&txt, &mut warnings)), + country: about.country.and_then(|c| util::country_from_name(&c)), + links, + }, warnings, }) } @@ -549,18 +564,7 @@ fn combine_channel_data(channel_data: Channel<()>, content: T) -> Channel } /// Get the continuation token to fetch channel videos in the given order -fn order_ctoken(channel_id: &str, tab: ChannelVideoTab, order: ChannelOrder) -> String { - _order_ctoken( - channel_id, - tab, - order, - &format!("\n${}", util::random_uuid()), - ) -} - -/// Get the continuation token to fetch channel videos in the given order -/// (fixed targetId for testing) -fn _order_ctoken( +fn order_ctoken( channel_id: &str, tab: ChannelVideoTab, order: ChannelOrder, @@ -589,6 +593,32 @@ fn _order_ctoken( pb.to_base64() } +/// Get the continuation token to fetch channel +fn channel_info_ctoken(channel_id: &str, target_id: &str) -> String { + let mut pb_3 = ProtoBuilder::new(); + pb_3.string(19, target_id); + + let mut pb_110 = ProtoBuilder::new(); + pb_110.embedded(3, pb_3); + + let mut pbi = ProtoBuilder::new(); + pbi.embedded(110, pb_110); + + let mut pb_80226972 = ProtoBuilder::new(); + pb_80226972.string(2, channel_id); + pb_80226972.string(3, &pbi.to_base64()); + + let mut pb = ProtoBuilder::new(); + pb.embedded(80_226_972, pb_80226972); + + pb.to_base64() +} + +/// Create a random UUId to build continuation tokens +fn random_target() -> String { + format!("\n${}", util::random_uuid()) +} + #[cfg(test)] mod tests { use std::{fs::File, io::BufReader}; @@ -604,7 +634,7 @@ mod tests { util::tests::TESTFILES, }; - use super::_order_ctoken; + use super::{channel_info_ctoken, order_ctoken}; #[rstest] #[case::base("videos_base", "UC2DjFE7Xf11URZqWBigcVOQ")] @@ -668,10 +698,10 @@ mod tests { let json_path = path!(*TESTFILES / "channel" / "channel_info.json"); let json_file = File::open(json_path).unwrap(); - let channel: response::Channel = + let channel: response::ChannelAbout = serde_json::from_reader(BufReader::new(json_file)).unwrap(); - let map_res: MapResult> = channel - .map_response("UC2DjFE7Xf11URZqWBigcVOQ", Language::En, None, None) + let map_res: MapResult = channel + .map_response("UC2DjFE7Xf11U-RZqWBigcVOQ", Language::En, None, None) .unwrap(); assert!( @@ -683,10 +713,10 @@ mod tests { } #[test] - fn order_ctoken() { + fn t_order_ctoken() { let channel_id = "UCXuqSBlHAE6Xw-yeJA0Tunw"; - let videos_popular_token = _order_ctoken( + let videos_popular_token = order_ctoken( channel_id, ChannelVideoTab::Videos, ChannelOrder::Popular, @@ -694,7 +724,7 @@ mod tests { ); assert_eq!(videos_popular_token, "4qmFsgJkEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaSDhnWXVHaXg2S2hJbUNpUTJORFl4WkRkak9DMHdNREF3TFRJd05EQXRPRGRoWVMwd09EbGxNRGd5TjJVME1qQVlBZyUzRCUzRA%3D%3D"); - let shorts_popular_token = _order_ctoken( + let shorts_popular_token = order_ctoken( channel_id, ChannelVideoTab::Shorts, ChannelOrder::Popular, @@ -702,7 +732,7 @@ mod tests { ); assert_eq!(shorts_popular_token, "4qmFsgJkEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaSDhnWXVHaXhTS2hJbUNpUTJORFkzT1dabVlpMHdNREF3TFRJMllqTXRZVEZpWkMwMU9ESTBNamxrTW1NM09UUVlBZyUzRCUzRA%3D%3D"); - let live_popular_token = _order_ctoken( + let live_popular_token = order_ctoken( channel_id, ChannelVideoTab::Live, ChannelOrder::Popular, @@ -710,4 +740,12 @@ mod tests { ); assert_eq!(live_popular_token, "4qmFsgJkEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaSDhnWXVHaXh5S2hJbUNpUTJORFk1TXpBMk9TMHdNREF3TFRKaE1XVXRPR00zWkMwMU9ESTBNamxpWkRWaVlUZ1lBZyUzRCUzRA%3D%3D"); } + + #[test] + fn t_channel_info_ctoken() { + let channel_id = "UCh8gHdtzO2tXd593_bjErWg"; + + let token = channel_info_ctoken(channel_id, "\n$655b339a-0000-20b9-92dc-582429d254b4"); + assert_eq!(token, "4qmFsgJgEhhVQ2g4Z0hkdHpPMnRYZDU5M19iakVyV2caRDhnWXJHaW1hQVNZS0pEWTFOV0l6TXpsaExUQXdNREF0TWpCaU9TMDVNbVJqTFRVNE1qUXlPV1F5TlRSaU5BJTNEJTNE"); + } } diff --git a/src/client/response/channel.rs b/src/client/response/channel.rs index 826a663..b6a9259 100644 --- a/src/client/response/channel.rs +++ b/src/client/response/channel.rs @@ -2,10 +2,10 @@ use serde::Deserialize; use serde_with::{rust::deserialize_ignore_any, serde_as, DefaultOnError, VecSkipError}; use super::{ - video_item::YouTubeListRenderer, Alert, ChannelBadge, ContentsRenderer, ResponseContext, - Thumbnails, TwoColumnBrowseResults, + video_item::YouTubeListRenderer, Alert, ChannelBadge, ContentsRenderer, ContinuationActionWrap, + ResponseContext, Thumbnails, TwoColumnBrowseResults, }; -use crate::serializer::text::Text; +use crate::serializer::text::{AttributedText, Text, TextComponent}; #[serde_as] #[derive(Debug, Deserialize)] @@ -145,3 +145,66 @@ pub(crate) struct MicroformatDataRenderer { #[serde(default)] pub tags: Vec, } + +#[serde_as] +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct ChannelAbout { + #[serde_as(as = "VecSkipError<_>")] + pub on_response_received_endpoints: Vec>, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct AboutChannelRendererWrap { + pub about_channel_renderer: AboutChannelRenderer, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct AboutChannelRenderer { + pub metadata: ChannelMetadata, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct ChannelMetadata { + pub about_channel_view_model: ChannelMetadataView, +} + +#[serde_as] +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct ChannelMetadataView { + pub channel_id: String, + pub canonical_channel_url: String, + pub country: Option, + #[serde(default)] + pub description: String, + #[serde_as(as = "Option")] + pub joined_date_text: Option, + #[serde_as(as = "Option")] + pub subscriber_count_text: Option, + #[serde_as(as = "Option")] + pub video_count_text: Option, + #[serde_as(as = "Option")] + pub view_count_text: Option, + #[serde(default)] + pub links: Vec, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct ExternalLink { + pub channel_external_link_view_model: ExternalLinkInner, +} + +#[serde_as] +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct ExternalLinkInner { + #[serde_as(as = "AttributedText")] + pub title: TextComponent, + #[serde_as(as = "AttributedText")] + pub link: TextComponent, +} diff --git a/src/client/response/mod.rs b/src/client/response/mod.rs index 2538963..e914998 100644 --- a/src/client/response/mod.rs +++ b/src/client/response/mod.rs @@ -16,6 +16,7 @@ pub(crate) mod video_details; pub(crate) mod video_item; pub(crate) use channel::Channel; +pub(crate) use channel::ChannelAbout; pub(crate) use music_artist::MusicArtist; pub(crate) use music_artist::MusicArtistAlbums; pub(crate) use music_charts::MusicCharts; @@ -208,7 +209,7 @@ pub(crate) struct Continuation { alias = "onResponseReceivedEndpoints" )] #[serde_as(as = "Option>")] - pub on_response_received_actions: Option>, + pub on_response_received_actions: Option>>, /// Used for channel video rich grid renderer /// /// A/B test seen on 19.10.2022 @@ -217,15 +218,15 @@ pub(crate) struct Continuation { #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] -pub(crate) struct ContinuationActionWrap { +pub(crate) struct ContinuationActionWrap { #[serde(alias = "reloadContinuationItemsCommand")] - pub append_continuation_items_action: ContinuationAction, + pub append_continuation_items_action: ContinuationAction, } #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] -pub(crate) struct ContinuationAction { - pub continuation_items: MapResult>, +pub(crate) struct ContinuationAction { + pub continuation_items: MapResult>, } #[derive(Debug, Deserialize)] diff --git a/src/client/response/url_endpoint.rs b/src/client/response/url_endpoint.rs index bbdee34..fb629fb 100644 --- a/src/client/response/url_endpoint.rs +++ b/src/client/response/url_endpoint.rs @@ -1,7 +1,7 @@ use serde::Deserialize; use serde_with::{serde_as, DefaultOnError}; -use crate::{model::UrlTarget, util}; +use crate::model::UrlTarget; /// navigation/resolve_url response model #[derive(Debug, Deserialize)] @@ -280,14 +280,4 @@ impl NavigationEndpoint { None } } - - /// Get the sanitized URL from a url endpoint - pub(crate) fn url(&self) -> Option { - match self { - NavigationEndpoint::Url { url_endpoint } => { - Some(util::sanitize_yt_url(&url_endpoint.url)) - } - _ => None, - } - } } diff --git a/src/client/response/video_item.rs b/src/client/response/video_item.rs index 3283f42..d25fe40 100644 --- a/src/client/response/video_item.rs +++ b/src/client/response/video_item.rs @@ -6,15 +6,15 @@ use serde_with::{ }; use time::OffsetDateTime; -use super::{url_endpoint::NavigationEndpoint, ChannelBadge, ContinuationEndpoint, Thumbnails}; +use super::{ChannelBadge, ContinuationEndpoint, Thumbnails}; use crate::{ model::{ - Channel, ChannelId, ChannelInfo, ChannelItem, ChannelTag, PlaylistItem, Verification, - VideoItem, YouTubeItem, + Channel, ChannelId, ChannelItem, ChannelTag, PlaylistItem, Verification, VideoItem, + YouTubeItem, }, param::Language, serializer::{ - text::{AccessibilityText, AttributedText, Text, TextComponent}, + text::{AccessibilityText, Text, TextComponent}, MapResult, }, util::{self, timeago, TryRemove}, @@ -48,9 +48,6 @@ pub(crate) enum YouTubeListItem { corrected_query: String, }, - /// Channel metadata (about tab) - ChannelAboutFullMetadataRenderer(ChannelFullMetadata), - /// Contains video on startpage /// /// Seems to be currently A/B tested on the channel page, @@ -358,47 +355,6 @@ pub(crate) struct ReelPlayerHeaderRenderer { pub timestamp_text: String, } -#[serde_as] -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct ChannelFullMetadata { - #[serde_as(as = "Text")] - pub joined_date_text: String, - #[serde_as(as = "Option")] - pub view_count_text: Option, - #[serde(default)] - #[serde_as(as = "VecSkipError<_>")] - pub primary_links: Vec, - #[serde(default)] - // #[serde_as(as = "VecSkipError<_>")] - pub links: Vec, -} - -#[serde_as] -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct PrimaryLink { - #[serde_as(as = "Text")] - pub title: String, - pub navigation_endpoint: NavigationEndpoint, -} - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct ExternalLink { - pub channel_external_link_view_model: ExternalLinkInner, -} - -#[serde_as] -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct ExternalLinkInner { - #[serde_as(as = "AttributedText")] - pub title: TextComponent, - #[serde_as(as = "AttributedText")] - pub link: TextComponent, -} - trait IsLive { fn is_live(&self) -> bool; } @@ -446,7 +402,6 @@ pub(crate) struct YouTubeListMapper { pub warnings: Vec, pub ctoken: Option, pub corrected_query: Option, - pub channel_info: Option, } impl YouTubeListMapper { @@ -458,7 +413,6 @@ impl YouTubeListMapper { warnings: Vec::new(), ctoken: None, corrected_query: None, - channel_info: None, } } @@ -476,7 +430,6 @@ impl YouTubeListMapper { warnings, ctoken: None, corrected_query: None, - channel_info: None, } } @@ -744,32 +697,6 @@ impl YouTubeListMapper { YouTubeListItem::ShowingResultsForRenderer { corrected_query } => { self.corrected_query = Some(corrected_query); } - YouTubeListItem::ChannelAboutFullMetadataRenderer(meta) => { - let mut links = meta - .primary_links - .into_iter() - .filter_map(|l| l.navigation_endpoint.url().map(|url| (l.title, url))) - .collect::>(); - for l in meta.links { - let l = l.channel_external_link_view_model; - if let TextComponent::Web { url, .. } = l.link { - links.push((l.title.into(), util::sanitize_yt_url(&url))); - } - } - - self.channel_info = Some(ChannelInfo { - create_date: timeago::parse_textual_date_or_warn( - self.lang, - &meta.joined_date_text, - &mut self.warnings, - ) - .map(OffsetDateTime::date), - view_count: meta - .view_count_text - .and_then(|txt| util::parse_numeric_or_warn(&txt, &mut self.warnings)), - links, - }); - } YouTubeListItem::RichItemRenderer { content } => { self.map_item(*content); } diff --git a/src/client/snapshots/rustypipe__client__channel__tests__map_channel_info.snap b/src/client/snapshots/rustypipe__client__channel__tests__map_channel_info.snap index 4bb2028..43b8e24 100644 --- a/src/client/snapshots/rustypipe__client__channel__tests__map_channel_info.snap +++ b/src/client/snapshots/rustypipe__client__channel__tests__map_channel_info.snap @@ -2,166 +2,28 @@ source: src/client/channel.rs expression: map_res.c --- -Channel( +ChannelInfo( id: "UC2DjFE7Xf11URZqWBigcVOQ", - name: "EEVblog", - subscriber_count: Some(881000), - avatar: [ - Thumbnail( - url: "https://yt3.ggpht.com/ytc/AMLnZu9eKk4Nd16fX4Rn1TF1G7ReluwOl6M5558FTYAM=s48-c-k-c0x00ffffff-no-rj", - width: 48, - height: 48, - ), - Thumbnail( - url: "https://yt3.ggpht.com/ytc/AMLnZu9eKk4Nd16fX4Rn1TF1G7ReluwOl6M5558FTYAM=s88-c-k-c0x00ffffff-no-rj", - width: 88, - height: 88, - ), - Thumbnail( - url: "https://yt3.ggpht.com/ytc/AMLnZu9eKk4Nd16fX4Rn1TF1G7ReluwOl6M5558FTYAM=s176-c-k-c0x00ffffff-no-rj", - width: 176, - height: 176, - ), - ], - verification: Verified, + url: "http://www.youtube.com/@EEVblog", description: "NO SCRIPT, NO FEAR, ALL OPINION\nAn off-the-cuff Video Blog about Electronics Engineering, for engineers, hobbyists, enthusiasts, hackers and Makers\nHosted by Dave Jones from Sydney Australia\n\nDONATIONS:\nBitcoin: 3KqyH1U3qrMPnkLufM2oHDU7YB4zVZeFyZ\nEthereum: 0x99ccc4d2654ba40744a1f678d9868ecb15e91206\nPayPal: david@alternatezone.com\n\nPatreon: https://www.patreon.com/eevblog\n\nEEVblog2: http://www.youtube.com/EEVblog2\nEEVdiscover: https://www.youtube.com/channel/UCkGvUEt8iQLmq3aJIMjT2qQ\n\nEMAIL:\nAdvertising/Commercial: eevblog+business@gmail.com\nFan mail: eevblog+fan@gmail.com\nHate Mail: eevblog+hate@gmail.com\n\nI DON\'T DO PAID VIDEO SPONSORSHIPS, DON\'T ASK!\n\nPLEASE:\nDo NOT ask for personal advice on something, post it in the EEVblog forum.\nI read ALL email, but please don\'t be offended if I don\'t have time to reply, I get a LOT of email.\n\nMailbag\nPO Box 7949\nBaulkham Hills NSW 2153\nAUSTRALIA", - tags: [ - "electronics", - "engineering", - "maker", - "hacker", - "design", - "circuit", - "hardware", - "pic", - "atmel", - "oscilloscope", - "multimeter", - "diy", - "hobby", - "review", - "teardown", - "microcontroller", - "arduino", - "video", - "blog", - "tutorial", - "how-to", - "interview", - "rant", - "industry", - "news", - "mailbag", - "dumpster diving", - "debunking", + subscriber_count: Some(920000), + video_count: Some(1920), + create_date: Some("2009-04-04"), + view_count: Some(199087682), + country: Some(AU), + links: [ + ("EEVblog Web Site", "http://www.eevblog.com/"), + ("Twitter", "http://www.twitter.com/eevblog"), + ("Facebook", "http://www.facebook.com/EEVblog"), + ("EEVdiscover", "https://www.youtube.com/channel/UCkGvUEt8iQLmq3aJIMjT2qQ"), + ("The EEVblog Forum", "http://www.eevblog.com/forum"), + ("EEVblog Merchandise (T-Shirts)", "http://www.eevblog.com/merch"), + ("EEVblog Donations", "http://www.eevblog.com/donations/"), + ("Patreon", "https://www.patreon.com/eevblog"), + ("SubscribeStar", "https://www.subscribestar.com/eevblog"), + ("The AmpHour Radio Show", "http://www.theamphour.com/"), + ("Flickr", "http://www.flickr.com/photos/eevblog"), + ("EEVblog AMAZON Store", "http://www.amazon.com/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.amazon.com%2F&tag=ee04-20&linkCode=ur2&camp=1789&creative=390957"), + ("2nd EEVblog Channel", "http://www.youtube.com/EEVblog2"), ], - vanity_url: Some("https://www.youtube.com/c/EevblogDave"), - banner: [ - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1060-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj", - width: 1060, - height: 175, - ), - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1138-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj", - width: 1138, - height: 188, - ), - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1707-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj", - width: 1707, - height: 283, - ), - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w2120-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj", - width: 2120, - height: 351, - ), - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w2276-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj", - width: 2276, - height: 377, - ), - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj", - width: 2560, - height: 424, - ), - ], - mobile_banner: [ - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w320-fcrop64=1,32b75a57cd48a5a8-k-c0xffffffff-no-nd-rj", - width: 320, - height: 88, - ), - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w640-fcrop64=1,32b75a57cd48a5a8-k-c0xffffffff-no-nd-rj", - width: 640, - height: 175, - ), - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w960-fcrop64=1,32b75a57cd48a5a8-k-c0xffffffff-no-nd-rj", - width: 960, - height: 263, - ), - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1280-fcrop64=1,32b75a57cd48a5a8-k-c0xffffffff-no-nd-rj", - width: 1280, - height: 351, - ), - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1440-fcrop64=1,32b75a57cd48a5a8-k-c0xffffffff-no-nd-rj", - width: 1440, - height: 395, - ), - ], - tv_banner: [ - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w320-fcrop64=1,00000000ffffffff-k-c0xffffffff-no-nd-rj", - width: 320, - height: 180, - ), - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w854-fcrop64=1,00000000ffffffff-k-c0xffffffff-no-nd-rj", - width: 854, - height: 480, - ), - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1280-fcrop64=1,00000000ffffffff-k-c0xffffffff-no-nd-rj", - width: 1280, - height: 720, - ), - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1920-fcrop64=1,00000000ffffffff-k-c0xffffffff-no-nd-rj", - width: 1920, - height: 1080, - ), - Thumbnail( - url: "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w2120-fcrop64=1,00000000ffffffff-k-c0xffffffff-no-nd-rj", - width: 2120, - height: 1192, - ), - ], - has_shorts: false, - has_live: false, - visitor_data: Some("CgszMUUzZDlGLWxiRSipqr2ZBg%3D%3D"), - content: ChannelInfo( - create_date: Some("2009-04-04"), - view_count: Some(186854342), - links: [ - ("EEVblog Web Site", "http://www.eevblog.com/"), - ("Twitter", "http://www.twitter.com/eevblog"), - ("Facebook", "http://www.facebook.com/EEVblog"), - ("EEVdiscover", "https://www.youtube.com/channel/UCkGvUEt8iQLmq3aJIMjT2qQ"), - ("The EEVblog Forum", "http://www.eevblog.com/forum"), - ("EEVblog Merchandise (T-Shirts)", "http://www.eevblog.com/merch"), - ("EEVblog Donations", "http://www.eevblog.com/donations/"), - ("Patreon", "https://www.patreon.com/eevblog"), - ("SubscribeStar", "https://www.subscribestar.com/eevblog"), - ("The AmpHour Radio Show", "http://www.theamphour.com/"), - ("Flickr", "http://www.flickr.com/photos/eevblog"), - ("EEVblog AMAZON Store", "http://www.amazon.com/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.amazon.com%2F&tag=ee04-20&linkCode=ur2&camp=1789&creative=390957"), - ("2nd EEVblog Channel", "http://www.youtube.com/EEVblog2"), - ], - ), ) diff --git a/src/model/mod.rs b/src/model/mod.rs index ffbf652..4bf7b37 100644 --- a/src/model/mod.rs +++ b/src/model/mod.rs @@ -738,16 +738,31 @@ pub struct Channel { pub content: T, } -/// Additional channel metadata fetched from the "About" tab. +/// Detailed channel information #[serde_as] #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] #[non_exhaustive] pub struct ChannelInfo { + /// Unique YouTube Channel-ID (e.g. `UC-lHJZR3Gqxm24_Vd_AJ5Yw`) + pub id: String, + /// Channel URL + pub url: String, + /// Channel description text + pub description: String, + /// Channel subscriber count + /// + /// [`None`] if the subscriber count was hidden by the owner + /// or could not be parsed. + pub subscriber_count: Option, + /// Channel video count + pub video_count: Option, /// Channel creation date #[serde_as(as = "Option")] pub create_date: Option, /// Channel view count pub view_count: Option, + /// Channel origin country + pub country: Option, /// Links to other websites or social media profiles pub links: Vec<(String, String)>, } diff --git a/src/param/locale.rs b/src/param/locale.rs index 21f049d..e886666 100644 --- a/src/param/locale.rs +++ b/src/param/locale.rs @@ -419,202 +419,207 @@ pub enum Country { } /// Array of all available languages +/// The languages are sorted by their native names. This array can be used to display +/// a language selection or to get the language code from a language name using binary search. pub const LANGUAGES: [Language; 83] = [ Language::Af, - Language::Am, - Language::Ar, - Language::As, Language::Az, - Language::Be, - Language::Bg, - Language::Bn, + Language::Id, + Language::Ms, Language::Bs, Language::Ca, - Language::Cs, Language::Da, Language::De, - Language::El, - Language::En, - Language::EnGb, + Language::Et, Language::EnIn, + Language::EnGb, + Language::En, Language::Es, Language::Es419, Language::EsUs, - Language::Et, Language::Eu, - Language::Fa, - Language::Fi, Language::Fil, Language::Fr, Language::FrCa, Language::Gl, - Language::Gu, - Language::Hi, Language::Hr, - Language::Hu, - Language::Hy, - Language::Id, - Language::Is, + Language::Zu, Language::It, - Language::Iw, - Language::Ja, - Language::Ka, - Language::Kk, - Language::Km, - Language::Kn, - Language::Ko, - Language::Ky, - Language::Lo, - Language::Lt, + Language::Sw, Language::Lv, - Language::Mk, - Language::Ml, - Language::Mn, - Language::Mr, - Language::Ms, - Language::My, - Language::Ne, + Language::Lt, + Language::Hu, Language::Nl, Language::No, - Language::Or, - Language::Pa, + Language::Uz, Language::Pl, - Language::Pt, Language::PtPt, + Language::Pt, Language::Ro, - Language::Ru, - Language::Si, + Language::Sq, Language::Sk, Language::Sl, - Language::Sq, - Language::Sr, Language::SrLatn, + Language::Fi, Language::Sv, - Language::Sw, + Language::Vi, + Language::Tr, + Language::Is, + Language::Cs, + Language::El, + Language::Be, + Language::Bg, + Language::Ky, + Language::Mk, + Language::Mn, + Language::Ru, + Language::Sr, + Language::Uk, + Language::Kk, + Language::Hy, + Language::Iw, + Language::Ur, + Language::Ar, + Language::Fa, + Language::Ne, + Language::Mr, + Language::Hi, + Language::As, + Language::Bn, + Language::Pa, + Language::Gu, + Language::Or, Language::Ta, Language::Te, + Language::Kn, + Language::Ml, + Language::Si, Language::Th, - Language::Tr, - Language::Uk, - Language::Ur, - Language::Uz, - Language::Vi, + Language::Lo, + Language::My, + Language::Ka, + Language::Am, + Language::Km, Language::ZhCn, - Language::ZhHk, Language::ZhTw, - Language::Zu, + Language::ZhHk, + Language::Ja, + Language::Ko, ]; /// Array of all available countries +/// +/// The countries are sorted by their english names. This array can be used to display +/// a country selection or to get the country code from a country name using binary search. pub const COUNTRIES: [Country; 109] = [ - Country::Ae, + Country::Dz, Country::Ar, - Country::At, Country::Au, + Country::At, Country::Az, - Country::Ba, - Country::Bd, - Country::Be, - Country::Bg, Country::Bh, - Country::Bo, - Country::Br, + Country::Bd, Country::By, + Country::Be, + Country::Bo, + Country::Ba, + Country::Br, + Country::Bg, + Country::Kh, Country::Ca, - Country::Ch, Country::Cl, Country::Co, Country::Cr, + Country::Hr, Country::Cy, Country::Cz, - Country::De, Country::Dk, Country::Do, - Country::Dz, Country::Ec, - Country::Ee, Country::Eg, - Country::Es, + Country::Sv, + Country::Ee, Country::Fi, Country::Fr, - Country::Gb, Country::Ge, + Country::De, Country::Gh, Country::Gr, Country::Gt, - Country::Hk, Country::Hn, - Country::Hr, + Country::Hk, Country::Hu, + Country::Is, + Country::In, Country::Id, + Country::Iq, Country::Ie, Country::Il, - Country::In, - Country::Iq, - Country::Is, Country::It, Country::Jm, - Country::Jo, Country::Jp, - Country::Ke, - Country::Kh, - Country::Kr, - Country::Kw, + Country::Jo, Country::Kz, + Country::Ke, + Country::Kw, Country::La, + Country::Lv, Country::Lb, + Country::Ly, Country::Li, - Country::Lk, Country::Lt, Country::Lu, - Country::Lv, - Country::Ly, - Country::Ma, - Country::Me, - Country::Mk, + Country::My, Country::Mt, Country::Mx, - Country::My, - Country::Ng, - Country::Ni, - Country::Nl, - Country::No, + Country::Me, + Country::Ma, Country::Np, + Country::Nl, Country::Nz, + Country::Ni, + Country::Ng, + Country::Mk, + Country::No, Country::Om, - Country::Pa, - Country::Pe, - Country::Pg, - Country::Ph, Country::Pk, - Country::Pl, - Country::Pr, - Country::Pt, + Country::Pa, + Country::Pg, Country::Py, + Country::Pe, + Country::Ph, + Country::Pl, + Country::Pt, + Country::Pr, Country::Qa, Country::Ro, - Country::Rs, Country::Ru, Country::Sa, - Country::Se, - Country::Sg, - Country::Si, - Country::Sk, Country::Sn, - Country::Sv, + Country::Rs, + Country::Sg, + Country::Sk, + Country::Si, + Country::Za, + Country::Kr, + Country::Es, + Country::Lk, + Country::Se, + Country::Ch, + Country::Tw, + Country::Tz, Country::Th, Country::Tn, Country::Tr, - Country::Tw, - Country::Tz, - Country::Ua, Country::Ug, + Country::Ua, + Country::Ae, + Country::Gb, Country::Us, Country::Uy, Country::Ve, Country::Vn, Country::Ye, - Country::Za, Country::Zw, ]; @@ -844,11 +849,7 @@ impl FromStr for Language { Some(pos) => { sub = &sub[..pos]; } - None => { - return Err(Error::Other( - format!("could not parse language `{s}`").into(), - )) - } + None => return Err(Error::Other("could not parse language `{s}`".into())), } } } diff --git a/src/serializer/text.rs b/src/serializer/text.rs index 6b0d877..4d628af 100644 --- a/src/serializer/text.rs +++ b/src/serializer/text.rs @@ -44,13 +44,14 @@ use crate::{ #[serde(untagged)] pub(crate) enum Text { Simple { - #[serde(alias = "simpleText")] + #[serde(alias = "simpleText", alias = "content")] text: String, }, Multiple { #[serde_as(as = "Vec")] runs: Vec, }, + Str(String), } impl<'de> DeserializeAs<'de, String> for Text { @@ -60,7 +61,7 @@ impl<'de> DeserializeAs<'de, String> for Text { { let text = Text::deserialize(deserializer)?; match text { - Text::Simple { text } => Ok(text), + Text::Simple { text } | Text::Str(text) => Ok(text), Text::Multiple { runs } => Ok(runs.join("")), } } @@ -73,7 +74,7 @@ impl<'de> DeserializeAs<'de, Vec> for Text { { let text = Text::deserialize(deserializer)?; match text { - Text::Simple { text } => Ok(vec![text]), + Text::Simple { text } | Text::Str(text) => Ok(vec![text]), Text::Multiple { runs } => Ok(runs), } } @@ -542,6 +543,7 @@ mod tests { }"#, vec!["Abo für ", "MBCkpop", " beenden?"] )] + #[case(r#"{"txt":"Hello World"}"#, vec!["Hello World"])] fn t_deserialize_text(#[case] test_json: &str, #[case] exp: Vec<&str>) { #[serde_as] #[derive(Deserialize)] diff --git a/src/util/mod.rs b/src/util/mod.rs index a29a6d2..be7c50c 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -19,7 +19,11 @@ use rand::Rng; use regex::Regex; use url::Url; -use crate::{error::Error, param::Language, serializer::text::TextComponent}; +use crate::{ + error::Error, + param::{Country, Language, COUNTRIES}, + serializer::text::TextComponent, +}; pub static VIDEO_ID_REGEX: Lazy = Lazy::new(|| Regex::new(r"^[A-Za-z0-9_-]{11}$").unwrap()); pub static CHANNEL_ID_REGEX: Lazy = @@ -462,6 +466,14 @@ pub fn b64_decode>(input: T) -> Result, base64::DecodeErr base64::engine::general_purpose::STANDARD.decode(input) } +/// Get the country from its English name +pub fn country_from_name(name: &str) -> Option { + COUNTRIES + .binary_search_by_key(&name, Country::name) + .ok() + .map(|i| COUNTRIES[i]) +} + /// An iterator over the chars in a string (in str format) pub struct SplitChar<'a> { txt: &'a str, @@ -685,4 +697,13 @@ pub(crate) mod tests { let res = Language::from_str(s).ok(); assert_eq!(res, expect); } + + #[rstest] + #[case("United States", Some(Country::Us))] + #[case("Zimbabwe", Some(Country::Zw))] + #[case("foobar", None)] + fn t_country_from_name(#[case] name: &str, #[case] expect: Option) { + let res = country_from_name(name); + assert_eq!(res, expect); + } } diff --git a/testfiles/channel/channel_info.json b/testfiles/channel/channel_info.json index 939ca6e..d771f46 100644 --- a/testfiles/channel/channel_info.json +++ b/testfiles/channel/channel_info.json @@ -1,321 +1,391 @@ { - "contents": { - "twoColumnBrowseResultsRenderer": { - "tabs": [ - { - "tabRenderer": { - "endpoint": { - "browseEndpoint": { - "browseId": "UC2DjFE7Xf11URZqWBigcVOQ", - "canonicalBaseUrl": "/c/EevblogDave", - "params": "EghmZWF0dXJlZPIGBAoCMgA%3D" - }, - "clickTrackingParams": "CCsQ8JMBGAUiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "apiUrl": "/youtubei/v1/browse", - "rootVe": 3611, - "url": "/c/EevblogDave/featured", - "webPageType": "WEB_PAGE_TYPE_CHANNEL" - } - } - }, - "title": "Home", - "trackingParams": "CCsQ8JMBGAUiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - { - "tabRenderer": { - "endpoint": { - "browseEndpoint": { - "browseId": "UC2DjFE7Xf11URZqWBigcVOQ", - "canonicalBaseUrl": "/c/EevblogDave", - "params": "EgZ2aWRlb3PyBgQKAjoA" - }, - "clickTrackingParams": "CCoQ8JMBGAYiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "apiUrl": "/youtubei/v1/browse", - "rootVe": 3611, - "url": "/c/EevblogDave/videos", - "webPageType": "WEB_PAGE_TYPE_CHANNEL" - } - } - }, - "title": "Videos", - "trackingParams": "CCoQ8JMBGAYiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - { - "tabRenderer": { - "endpoint": { - "browseEndpoint": { - "browseId": "UC2DjFE7Xf11URZqWBigcVOQ", - "canonicalBaseUrl": "/c/EevblogDave", - "params": "EglwbGF5bGlzdHPyBgQKAkIA" - }, - "clickTrackingParams": "CCkQ8JMBGAciEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "apiUrl": "/youtubei/v1/browse", - "rootVe": 3611, - "url": "/c/EevblogDave/playlists", - "webPageType": "WEB_PAGE_TYPE_CHANNEL" - } - } - }, - "title": "Playlists", - "trackingParams": "CCkQ8JMBGAciEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - { - "tabRenderer": { - "endpoint": { - "browseEndpoint": { - "browseId": "UC2DjFE7Xf11URZqWBigcVOQ", - "canonicalBaseUrl": "/c/EevblogDave", - "params": "Egljb21tdW5pdHnyBgQKAkoA" - }, - "clickTrackingParams": "CCgQ8JMBGAgiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "apiUrl": "/youtubei/v1/browse", - "rootVe": 3611, - "url": "/c/EevblogDave/community", - "webPageType": "WEB_PAGE_TYPE_CHANNEL" - } - } - }, - "title": "Community", - "trackingParams": "CCgQ8JMBGAgiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - { - "tabRenderer": { - "endpoint": { - "browseEndpoint": { - "browseId": "UC2DjFE7Xf11URZqWBigcVOQ", - "canonicalBaseUrl": "/c/EevblogDave", - "params": "EgVzdG9yZfIGBAoCGgA%3D" - }, - "clickTrackingParams": "CCcQ8JMBGAkiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "apiUrl": "/youtubei/v1/browse", - "rootVe": 3611, - "url": "/c/EevblogDave/store", - "webPageType": "WEB_PAGE_TYPE_CHANNEL" - } - } - }, - "title": "Store", - "trackingParams": "CCcQ8JMBGAkiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - { - "tabRenderer": { - "endpoint": { - "browseEndpoint": { - "browseId": "UC2DjFE7Xf11URZqWBigcVOQ", - "canonicalBaseUrl": "/c/EevblogDave", - "params": "EghjaGFubmVsc_IGBAoCUgA%3D" - }, - "clickTrackingParams": "CCYQ8JMBGAoiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "apiUrl": "/youtubei/v1/browse", - "rootVe": 3611, - "url": "/c/EevblogDave/channels", - "webPageType": "WEB_PAGE_TYPE_CHANNEL" - } - } - }, - "title": "Channels", - "trackingParams": "CCYQ8JMBGAoiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - { - "tabRenderer": { - "content": { - "sectionListRenderer": { - "contents": [ - { - "itemSectionRenderer": { - "contents": [ - { - "channelAboutFullMetadataRenderer": { - "avatar": { - "thumbnails": [ - { - "height": 48, - "url": "https://yt3.ggpht.com/ytc/AMLnZu9eKk4Nd16fX4Rn1TF1G7ReluwOl6M5558FTYAM=s48-c-k-c0x00ffffff-no-rj", - "width": 48 - }, - { - "height": 88, - "url": "https://yt3.ggpht.com/ytc/AMLnZu9eKk4Nd16fX4Rn1TF1G7ReluwOl6M5558FTYAM=s88-c-k-c0x00ffffff-no-rj", - "width": 88 - }, - { - "height": 176, - "url": "https://yt3.ggpht.com/ytc/AMLnZu9eKk4Nd16fX4Rn1TF1G7ReluwOl6M5558FTYAM=s176-c-k-c0x00ffffff-no-rj", - "width": 176 - } - ] + "onResponseReceivedEndpoints": [ + { + "appendContinuationItemsAction": { + "continuationItems": [ + { + "aboutChannelRenderer": { + "metadata": { + "aboutChannelViewModel": { + "additionalInfoLabel": { + "content": "Channel details", + "styleRuns": [ + { + "length": 15, + "startIndex": 0 + } + ] + }, + "canonicalChannelUrl": "http://www.youtube.com/@EEVblog", + "channelId": "UC2DjFE7Xf11URZqWBigcVOQ", + "country": "Australia", + "customLinksLabel": { + "content": "Links", + "styleRuns": [ + { + "length": 5, + "startIndex": 0 + } + ] + }, + "customUrlOnTap": { + "innertubeCommand": { + "clickTrackingParams": "CAAQhGciEwis363HrqiCAxWfHwYAHc0nDmw=", + "commandMetadata": { + "webCommandMetadata": { + "ignoreNavigation": true + } + }, + "shareEntityEndpoint": { + "serializedShareEntity": "GhhVQzJEakZFN1hmMTFVUlpxV0JpZ2NWT1E%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + } + }, + "description": "NO SCRIPT, NO FEAR, ALL OPINION\nAn off-the-cuff Video Blog about Electronics Engineering, for engineers, hobbyists, enthusiasts, hackers and Makers\nHosted by Dave Jones from Sydney Australia\n\nDONATIONS:\nBitcoin: 3KqyH1U3qrMPnkLufM2oHDU7YB4zVZeFyZ\nEthereum: 0x99ccc4d2654ba40744a1f678d9868ecb15e91206\nPayPal: david@alternatezone.com\n\nPatreon: https://www.patreon.com/eevblog\n\nEEVblog2: http://www.youtube.com/EEVblog2\nEEVdiscover: https://www.youtube.com/channel/UCkGvUEt8iQLmq3aJIMjT2qQ\n\nEMAIL:\nAdvertising/Commercial: eevblog+business@gmail.com\nFan mail: eevblog+fan@gmail.com\nHate Mail: eevblog+hate@gmail.com\n\nI DON'T DO PAID VIDEO SPONSORSHIPS, DON'T ASK!\n\nPLEASE:\nDo NOT ask for personal advice on something, post it in the EEVblog forum.\nI read ALL email, but please don't be offended if I don't have time to reply, I get a LOT of email.\n\nMailbag\nPO Box 7949\nBaulkham Hills NSW 2153\nAUSTRALIA", + "descriptionLabel": { + "content": "Description", + "styleRuns": [ + { + "length": 11, + "startIndex": 0 + } + ] + }, + "joinedDateText": { + "content": "Joined Apr 4, 2009", + "styleRuns": [ + { + "length": 18, + "startIndex": 0 + } + ] + }, + "links": [ + { + "channelExternalLinkViewModel": { + "favicon": { + "sources": [ + { + "height": 16, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSeeYHqSanvu-1kS8-j8snFjPciLtknpI1FBXBB6ChDhHFlCRCjevwoP5AOW1u3m9HaeGexWOI4DJeisvRR1YK_jsARgDOrkbO3qWsfWQFxBaEkSQ", + "width": 16 }, - "businessEmailLabel": { - "runs": [ - { - "text": "For business inquiries:" - } - ] + { + "height": 24, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSRO3yoShMv5k2DaoKeuCUuLO7tqU2tq_5dmjuYm6jI5FVUVzAR3hzAYKXBLihGwpLTHHwvZytTudtTbT5BcynVneVmScYFWQD5YeySuJdm44lkuA", + "width": 24 }, - "bypassBusinessEmailCaptcha": false, - "canonicalChannelUrl": "http://www.youtube.com/c/EevblogDave", - "channelId": "UC2DjFE7Xf11URZqWBigcVOQ", - "country": { - "simpleText": "Australia" + { + "height": 32, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRIUJbfp6w0pB_u9CGjMzaTsTI7tiSAdSGBA8Hf6zMS5vjmNxUZEU01jHbVZSLbD05OQVHJDuqOf3H2kubCIp5bt4C73Y3H4zbT64CPQBojEE0HKw", + "width": 32 }, - "countryLabel": { - "runs": [ - { - "deemphasize": true, - "text": "\nLocation:\n " - } - ] + { + "height": 48, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSjc0VmcVmJs-FQFvHFOGGfCa1T2yvy_37_qvLeaEenpYij0Awawk3H_89y3FUOMQfYYoJgGEWOUeqSNiuP2HhWCepbiORY3nOV4rirtii6ZK0Okw", + "width": 48 }, - "description": { - "simpleText": "NO SCRIPT, NO FEAR, ALL OPINION\nAn off-the-cuff Video Blog about Electronics Engineering, for engineers, hobbyists, enthusiasts, hackers and Makers\nHosted by Dave Jones from Sydney Australia\n\nDONATIONS:\nBitcoin: 3KqyH1U3qrMPnkLufM2oHDU7YB4zVZeFyZ\nEthereum: 0x99ccc4d2654ba40744a1f678d9868ecb15e91206\nPayPal: david@alternatezone.com\n\nPatreon: https://www.patreon.com/eevblog\n\nEEVblog2: http://www.youtube.com/EEVblog2\nEEVdiscover: https://www.youtube.com/channel/UCkGvUEt8iQLmq3aJIMjT2qQ\n\nEMAIL:\nAdvertising/Commercial: eevblog+business@gmail.com\nFan mail: eevblog+fan@gmail.com\nHate Mail: eevblog+hate@gmail.com\n\nI DON'T DO PAID VIDEO SPONSORSHIPS, DON'T ASK!\n\nPLEASE:\nDo NOT ask for personal advice on something, post it in the EEVblog forum.\nI read ALL email, but please don't be offended if I don't have time to reply, I get a LOT of email.\n\nMailbag\nPO Box 7949\nBaulkham Hills NSW 2153\nAUSTRALIA" + { + "height": 50, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcT69ZCUPz_NCxzzBSTaa3UsDtYstRJkHNQDosDuc6opuZoSNQyfeH7q70magR_sCmcOXrhlVt90kJaYfuaxaMinr4NvcvyxLvkxablKlWLUz3dNwQ", + "width": 50 }, - "descriptionLabel": { - "runs": [ - { - "text": "Description" - } - ] + { + "height": 64, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRVbUVWS0NUsck5BjE03J5DCtX6Pddc7dbdTW-UfOYeh68FLygzZKr7m7aCt0gSW7BW1mNleXfBXdT3F2wLroI4OJCX2_hTEvzhpf7N4Vskdn_DvA", + "width": 64 }, - "detailsLabel": { - "runs": [ - { - "text": "Details" - } - ] + { + "height": 96, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTIioE30qOAuAgsby1zHK_3DQ4OM1dudwAsAJeGgsL_t1-VgVsL325ZVzk6jUiMsAUCEIpoGeDm9dCRs6b0G1HTJ-TwMVsZ9TZh5sk0hyuaoUS-PQ", + "width": 96 }, - "joinedDateText": { - "runs": [ - { - "text": "Joined " - }, - { - "text": "Apr 4, 2009" - } - ] + { + "height": 128, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcR4jzSwbUFOQnTnk8rdJjrsB83EHczjKxbbKin2Tzvn0-b-aphjcZNP6_ymFrDzQLic_m2agRA6_JWVrfZTRtmaEU2p9hUr-jy9ON_XmhCSm-8VBus", + "width": 128 }, - "onBusinessEmailRevealClickCommand": { - "clickTrackingParams": "CBgQuy8YACITCNCX8umPrvoCFcXoUQodyk0HAw==", - "commandMetadata": { - "webCommandMetadata": { - "apiUrl": "/youtubei/v1/channel/reveal_business_email", - "sendPost": true - } - }, - "revealBusinessEmailCommand": {} + { + "height": 180, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTj0M93LmbNQ3X0LfHkLbS80j63DGUfWfQe-HjX-TgO0_h-ff1as0nlf11EZ2OLGra-LaVc4tuO_BR6xd8KoWcG566_zyyjB_rfC8zsNjUWcrZIZyc", + "width": 180 }, - "primaryLinks": [ - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSeeYHqSanvu-1kS8-j8snFjPciLtknpI1FBXBB6ChDhHFlCRCjevwoP5AOW1u3m9HaeGexWOI4DJeisvRR1YK_jsARgDOrkbO3qWsfWQFxBaEkSQ" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CCUQobIHGAEiEwjQl_Lpj676AhXF6FEKHcpNBwM=", + { + "height": 256, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSe0igGE-TpaxmAu93lpaP5Mj8QreWzoqq-Egda_PGitzD3-ZOoO0bD5bpBFQDVjQnpOu2cEQOwJkohhaYiSJGk6bWt8MogG2OByyg624RjVHSbqoU", + "width": 256 + } + ] + }, + "link": { + "commandRuns": [ + { + "length": 11, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CBIQobIHGAIiEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbWtPX3hfT29YN05DV0hLbnllb1dVV0Rsb29ZQXxBQ3Jtc0tuX1ZTVW9IZExYdkpMcTQwTUxENWphU3R1dWx2RG1xVkIxNkY0Qk5qa2RRZ21kRy15YzI4Z2lOcFNoM3RiOVZNSVczNTRhRnprZFNFWmdITTNzNDItRUc4WEhzcEtKZjgtLWZGNllpbjNReW85SGtJbw&q=http%3A%2F%2Fwww.eevblog.com", + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa1NiX0hYdzFzZkdPc3lhOUZ6ZHozTy05QTFyQXxBQ3Jtc0ttVG4tTDRKb0FVUkwzT0d2d2xOd092M3g4Um4yeVJXQTRCb2NrY1pJYW1YSVEyVlBnNk9BVlFSU2FxVkx3WFBCZUUzRTlQY1lVU1lzaWVlVUJWdGV2VzZqcW1mTy1xQXdqNTRsTUVJdHZ0VlkxcGJRSQ&q=http%3A%2F%2Fwww.eevblog.com", "webPageType": "WEB_PAGE_TYPE_UNKNOWN" } }, "urlEndpoint": { "nofollow": true, "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbWtPX3hfT29YN05DV0hLbnllb1dVV0Rsb29ZQXxBQ3Jtc0tuX1ZTVW9IZExYdkpMcTQwTUxENWphU3R1dWx2RG1xVkIxNkY0Qk5qa2RRZ21kRy15YzI4Z2lOcFNoM3RiOVZNSVczNTRhRnprZFNFWmdITTNzNDItRUc4WEhzcEtKZjgtLWZGNllpbjNReW85SGtJbw&q=http%3A%2F%2Fwww.eevblog.com" + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa1NiX0hYdzFzZkdPc3lhOUZ6ZHozTy05QTFyQXxBQ3Jtc0ttVG4tTDRKb0FVUkwzT0d2d2xOd092M3g4Um4yeVJXQTRCb2NrY1pJYW1YSVEyVlBnNk9BVlFSU2FxVkx3WFBCZUUzRTlQY1lVU1lzaWVlVUJWdGV2VzZqcW1mTy1xQXdqNTRsTUVJdHZ0VlkxcGJRSQ&q=http%3A%2F%2Fwww.eevblog.com" } - }, - "title": { - "simpleText": "EEVblog Web Site" - }, - "trackingParams": "CCUQobIHGAEiEwjQl_Lpj676AhXF6FEKHcpNBwM=" + } }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcSnyfGgzwnk19b891nCqykpMzr3jlkKm0Z65gNVJbtXsk9-gzW5EiqqEvM02nZyYKmI2x1JQI9OuGsWU69bgq9_rNrHCYrXLP6HqhP9iVwr0bm2IQ" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CCQQobIHGAIiEwjQl_Lpj676AhXF6FEKHcpNBwM=", + "startIndex": 0 + } + ], + "content": "eevblog.com" + }, + "title": { + "content": "EEVblog Web Site" + } + } + }, + { + "channelExternalLinkViewModel": { + "favicon": { + "sources": [ + { + "height": 16, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcSnyfGgzwnk19b891nCqykpMzr3jlkKm0Z65gNVJbtXsk9-gzW5EiqqEvM02nZyYKmI2x1JQI9OuGsWU69bgq9_rNrHCYrXLP6HqhP9iVwr0bm2IQ", + "width": 16 + }, + { + "height": 24, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcScCAZA1pWe29pjcrDQ6ARryPtvg1JzLCqkwhF6damck941gd8uDg_jxeFgVG7t3DqkSXq2egnOMb07AGBBn3Q6Zg95j7Iro9M1D_CSCVpUPQbRzw", + "width": 24 + }, + { + "height": 32, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcRpQXrl3L7Mh9_WhjFYD823T6DTyA6HEAOepg7_UMgQ7mwTd7OrCd0CsdcYiX6moKSPUH907oroRJrs-VOKiIVAU9CgUGhxvPMa1cLzLtcwRWIx2A", + "width": 32 + }, + { + "height": 48, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcRcmurwwdiD-gN00M74VmxNy57-L302TT4xgD49uw4ejJfOIP_yJkssnKNfiyeWT7GfGlX8XJBXrwPv_72R7LJcTQX24kzySpixmFGKytFUfpHZ6Q", + "width": 48 + }, + { + "height": 50, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcTPRhtaw3kt4XYlip73DgoHG_ERUbPgYJP8QoThvpfTj4Llwa1YQKIPJkBJYSyEZ3BuVGo7lKWYvAJ3VHVbSb-279au9kdvNg6p3BbPHK1IRNTkag", + "width": 50 + }, + { + "height": 64, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcSdPY-HkyqXBC5OxvGsPoKZ67TvqoXlt9m50r5_RjKodEza608Tie-MDqpYB1Te-Snc-vDXU5kAEjnA9tsA_840ZiF0wh4iDASnuazpeR_oRH5tzw", + "width": 64 + }, + { + "height": 96, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcRcADsxfrGPrKjkJVxF0TH8uREzOhAbtAXxfAnPEUCYSxFE8gnUb-xRv7Oig5zQt3oarUs7RtqKJKB_4C7RVNblRPtB2OfWK9XTBn0UIFxk5TbbuA", + "width": 96 + }, + { + "height": 128, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcRilnE8pw1jlpQcH8L3o9D_FHJcGQi6IcaN-HYxBbsGVViHVeiZHmag5b8biEsFdAoaVh_T7u5t1_1Ip5U9sttsmUiJmEsFUWqBmHutNQOWjKznCrw", + "width": 128 + }, + { + "height": 180, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcQV-kyjo0dRmiYBr5B0I6hU5rB5a8WrWxPvfSR76Psy5JXGznp60J9_7jfVVXk41BW0aQwr9xgVC88g6SvEnnAZwzs-fQrNMLQaI5AHC0JMbFIyfqs", + "width": 180 + }, + { + "height": 256, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcSca19F4khsR_Gvs4fJj-8RGK6A_gVRdQIz3wd-c1My9_pVi5a-vFN5FJ-QwAe_Te5gL8R06bZkdTH2Zl2bSRtznEu3H-BILV3tCQ_0U92zwGdBOag", + "width": 256 + } + ] + }, + "link": { + "commandRuns": [ + { + "length": 19, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CBEQobIHGAMiEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa0NBT2M1UkV5ejJZbXNITWdaRFh4QmNaQ0Rxd3xBQ3Jtc0tscXlScUJZWjFVUGNwampKUGwxbWVoQU9HRHFfdGZpTmxuMEY3bGlEV000em15bExiZGhiM09WSlp4cXlpWVk0OWFMdE1Wei1vYzh4aGgtS1gtUDFCb2tsOFZyU3BFSW1HdXh6OU1peThJWTBrNnZlbw&q=http%3A%2F%2Fwww.twitter.com%2Feevblog", + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqazZQR1hvdnF4TGZFTVM1WFdERzRoa2lCYS04d3xBQ3Jtc0ttblJLVFdHZmppbzdwdVZWZEtFWXZURFNCYzlnU1lkOC00dVdVbm5lb3FLalZpZDY3MFNuSUx0N0VJOHdNUGxLRTdac1N2MjZaRF9EdTFKOXd3WXRiV3BMVElmRHJPc2l3T0taWTkwclFsUU9QTVRrZw&q=http%3A%2F%2Fwww.twitter.com%2Feevblog", "webPageType": "WEB_PAGE_TYPE_UNKNOWN" } }, "urlEndpoint": { "nofollow": true, "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa0NBT2M1UkV5ejJZbXNITWdaRFh4QmNaQ0Rxd3xBQ3Jtc0tscXlScUJZWjFVUGNwampKUGwxbWVoQU9HRHFfdGZpTmxuMEY3bGlEV000em15bExiZGhiM09WSlp4cXlpWVk0OWFMdE1Wei1vYzh4aGgtS1gtUDFCb2tsOFZyU3BFSW1HdXh6OU1peThJWTBrNnZlbw&q=http%3A%2F%2Fwww.twitter.com%2Feevblog" + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqazZQR1hvdnF4TGZFTVM1WFdERzRoa2lCYS04d3xBQ3Jtc0ttblJLVFdHZmppbzdwdVZWZEtFWXZURFNCYzlnU1lkOC00dVdVbm5lb3FLalZpZDY3MFNuSUx0N0VJOHdNUGxLRTdac1N2MjZaRF9EdTFKOXd3WXRiV3BMVElmRHJPc2l3T0taWTkwclFsUU9QTVRrZw&q=http%3A%2F%2Fwww.twitter.com%2Feevblog" } - }, - "title": { - "simpleText": "Twitter" - }, - "trackingParams": "CCQQobIHGAIiEwjQl_Lpj676AhXF6FEKHcpNBwM=" + } }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcRmQS0-yT-68TopCQcxwbvtkTB0rdiUtc7g4WFZBVWFT4tJ8tSTon4n5uCmm9_b69_7bgTNZNmFw3-zyF-kWNXXZJEBTm_-r1qZrKLyDfCYxiEXY50" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CCMQobIHGAMiEwjQl_Lpj676AhXF6FEKHcpNBwM=", + "startIndex": 0 + } + ], + "content": "twitter.com/eevblog" + }, + "title": { + "content": "Twitter" + } + } + }, + { + "channelExternalLinkViewModel": { + "favicon": { + "sources": [ + { + "height": 16, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcRmQS0-yT-68TopCQcxwbvtkTB0rdiUtc7g4WFZBVWFT4tJ8tSTon4n5uCmm9_b69_7bgTNZNmFw3-zyF-kWNXXZJEBTm_-r1qZrKLyDfCYxiEXY50", + "width": 16 + }, + { + "height": 24, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcS8otgTiKPgqN8mKk_rEms8i-dD0fPpajLNtgX3i9Ltnwt2zOCwlQE7ohhSyjTmX_QmmtwRwXswtvHnCQMTp4BzIkGSH5VrQOhhEvLPWGzOm6K_lko", + "width": 24 + }, + { + "height": 32, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcSQwKmCiL86h8J5lhsv_kTzPmGIeRf8tpUu4kdbMKHdpA_hS8PXW8j57tZ07ZtmlIpZbh7K2YaLfDzL_pfkwnugANQd4D9yQ7aYkElDR1Az1Gq4xyc", + "width": 32 + }, + { + "height": 48, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcQtIIRFpUFfy65PMCPCAAmH2b-wyOlfC3t6ZhPXPGUvOHz-BJiArv0mfVApyLvbyIPXBgvbIZyMWsVEWevJ0UU9yULa3WqKR4ZQdyhdxb_0ySw9aJ0", + "width": 48 + }, + { + "height": 50, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcQh8ek3XunoGAkVEDYUaXBZ58HJx0vM9r-Z_YtKhr_uPPMNqkH05gPJaCZQx3zJrGRWHRvNiOF9W0bidd-IXQdN4XthC1d4ckyebYwEtWuZO0nucCM", + "width": 50 + }, + { + "height": 64, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcSeUOxWnqrDefQZi8PgarCi1oZd40iUDem-3Ga-62W7B9uaZpMfXXVl9SfRPgmNCFYlBjlWW56IGy_pqbO-FdmLXo_nqQca0FqOo-LVQn5xzB09JU0", + "width": 64 + }, + { + "height": 96, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcRGO_28W535adEPw3Cq1zrUQ9fip21lsuPafoDtbTbD8rEnIBnZcwEkUIqwAgNBqqLU5ntuRPXHU0OKr45_SVfGTDYRB83nzudGuyQpd4x0ITlF52A", + "width": 96 + }, + { + "height": 128, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcS5CVDk95gkKYbGrFxRwYkKEkPXTnut3B_-KAXuP2RDhs_1pSYgjx08rZd_8I3cGu9M8jy-p6mWDhoBYbJlNRByhZMGbqbTh7IW5abtfKiSaMUx53U7", + "width": 128 + }, + { + "height": 180, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcRfzOKlcHk8k6zchfRr9Jn5QIa6JREy2wav2z8MXLK9VNWeMfnWelcecYVNhaO8wJ0iKwRswuxmSThRZCw1eZp4ylFsdNSgouEbSFEwFjUwmM8mZeu-", + "width": 180 + }, + { + "height": 256, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcQ2LIUEtAkaYZrdof_ncH1T3Qqx6XwbcIKf5Dree6ALdc661BOJg524uzYrEGAmkD11Lc4yDSlhkanMbzxY9IRL9Iimne1LKoXC9kWZLL2JC_TAXhXT", + "width": 256 + } + ] + }, + "link": { + "commandRuns": [ + { + "length": 20, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CBAQobIHGAQiEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbEZNRmEzZ05TbUxQaE1lVzRhOUd3MktPcmM0Z3xBQ3Jtc0ttck5kdXFBMGlWc3E3aTh1UTc2UWV5YXJFeVozbkl3enV6bXJsZ3huRmgtaTFXcDdXcG1pVWgycWg1NzdEMDQ3bEdSMzVjRWFkQjVQWnVsQ3FyYmRNOUN2RGkzLS0yYW9VTFNISDFqYjg4enNwRWExWQ&q=http%3A%2F%2Fwww.facebook.com%2FEEVblog", + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa0RwZWhBMnNUWXFPV2o3Rmt1NzRhQ3VEQjhhQXxBQ3Jtc0ttSTdTUDMtWlRlX28zUzJ5LXNidGt2YmFTV1ZWMWo0TUUwSnpOSHB4NUQ3MlNSMFU0Ui1xOGJfb1MzekhYTGt4T3puRFY5UG5FUDZyem5MQmpZeXc2RkNHX0E3dDVLN1VOdTdSbTBPaEtXR08ydnROVQ&q=http%3A%2F%2Fwww.facebook.com%2FEEVblog", "webPageType": "WEB_PAGE_TYPE_UNKNOWN" } }, "urlEndpoint": { "nofollow": true, "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbEZNRmEzZ05TbUxQaE1lVzRhOUd3MktPcmM0Z3xBQ3Jtc0ttck5kdXFBMGlWc3E3aTh1UTc2UWV5YXJFeVozbkl3enV6bXJsZ3huRmgtaTFXcDdXcG1pVWgycWg1NzdEMDQ3bEdSMzVjRWFkQjVQWnVsQ3FyYmRNOUN2RGkzLS0yYW9VTFNISDFqYjg4enNwRWExWQ&q=http%3A%2F%2Fwww.facebook.com%2FEEVblog" + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa0RwZWhBMnNUWXFPV2o3Rmt1NzRhQ3VEQjhhQXxBQ3Jtc0ttSTdTUDMtWlRlX28zUzJ5LXNidGt2YmFTV1ZWMWo0TUUwSnpOSHB4NUQ3MlNSMFU0Ui1xOGJfb1MzekhYTGt4T3puRFY5UG5FUDZyem5MQmpZeXc2RkNHX0E3dDVLN1VOdTdSbTBPaEtXR08ydnROVQ&q=http%3A%2F%2Fwww.facebook.com%2FEEVblog" } - }, - "title": { - "simpleText": "Facebook" - }, - "trackingParams": "CCMQobIHGAMiEwjQl_Lpj676AhXF6FEKHcpNBwM=" + } }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn0.gstatic.com/favicon-tbn?q=tbn:ANd9GcRY4no9kYJtEAHXBEY2GDprV__HH1zc94olyS6G6fT5isS71bPyqvIi7-9VE1MMy3_3vsNOQLAerwcSQqGNyADWfxKpd2hLc8HuacZdgEjgZc_WLN8" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CCIQobIHGAQiEwjQl_Lpj676AhXF6FEKHcpNBwM=", + "startIndex": 0 + } + ], + "content": "facebook.com/EEVblog" + }, + "title": { + "content": "Facebook" + } + } + }, + { + "channelExternalLinkViewModel": { + "favicon": { + "sources": [ + { + "height": 16, + "url": "https://encrypted-tbn0.gstatic.com/favicon-tbn?q=tbn:ANd9GcRY4no9kYJtEAHXBEY2GDprV__HH1zc94olyS6G6fT5isS71bPyqvIi7-9VE1MMy3_3vsNOQLAerwcSQqGNyADWfxKpd2hLc8HuacZdgEjgZc_WLN8", + "width": 16 + }, + { + "height": 24, + "url": "https://encrypted-tbn0.gstatic.com/favicon-tbn?q=tbn:ANd9GcR3bOXx13RY_obv-voM2TlthNpZMagIsgiu8wV9zd57RK5F8fQRcX8ZEWdYeqOhdF9-f-phFxphm8gcg6O-DjRJTkWxXlK8N7CTfLdOA5lD_ThPvP4", + "width": 24 + }, + { + "height": 32, + "url": "https://encrypted-tbn0.gstatic.com/favicon-tbn?q=tbn:ANd9GcQK5VoWBWTP7Ca7anSCgAxMQf1k1TanOES5v9d-Cvsi9IgVh1v8PELi_eaSU-gpcfF4RHtEteDc0sD6AznYZ_vg3GtGigex4dpmwp39A6Tpz34UyAg", + "width": 32 + }, + { + "height": 48, + "url": "https://encrypted-tbn0.gstatic.com/favicon-tbn?q=tbn:ANd9GcSvLexm8CmfHe1mWIhDwUpNa8k4W7FcoaDZ06FA3L8eynFgpea0H8hnnXafsIzd3SSOVPaZrVIXgA0JtmGGApMNR2IWHH5CoLpYEwsNBlJefu9T8q8", + "width": 48 + }, + { + "height": 50, + "url": "https://encrypted-tbn0.gstatic.com/favicon-tbn?q=tbn:ANd9GcTkqbHEhNZwnQSrMwokjIhrt0Znyf5tvA7NvjJhjRD3ciZSWNIhNYDVUZaAdALePpQ6nHQZcciA8m8C3xuM_FVBtRMDNakswvL8Zq07dbyikCXgjTo", + "width": 50 + }, + { + "height": 64, + "url": "https://encrypted-tbn0.gstatic.com/favicon-tbn?q=tbn:ANd9GcSZFktJQ7FEgRVlbSuaa1asP7-PYreh8SgOHqwUSbvNQftPWbmYjFqQzBTg5IbiFTRONPscrGoHQamkRRCA-pH9oluygYrxjyKrQiZHKB2ZW060914", + "width": 64 + }, + { + "height": 96, + "url": "https://encrypted-tbn0.gstatic.com/favicon-tbn?q=tbn:ANd9GcRWkaZm4SFATrThoHcIEbjkNod9w0wtEceD2y2CT7updp3wKpDpWpoTyhndKu49gRzzIJJR80T_OygsgIKZsrOLSwDUrratDfLhVpP_eX59hpxKL4M", + "width": 96 + }, + { + "height": 128, + "url": "https://encrypted-tbn0.gstatic.com/favicon-tbn?q=tbn:ANd9GcRELoD6mOxIwfWGX_oINw_1Sla5T2wM9QR7lnwMC_eM5JVGu0XUxkJkGzcOtqKCYDwIjDQRLfLgV_dFdpxxaZGzZ0YUS9alEqzVDYbtc4yj88cPk8KB", + "width": 128 + }, + { + "height": 180, + "url": "https://encrypted-tbn0.gstatic.com/favicon-tbn?q=tbn:ANd9GcTWpG-7KVv4rTjF6NvDiCm6IYxH6Ye_MndNVoQ6PICDpfPfbPgjb3HD9abahrUwwV_wD5oFjdxaRbWchddCSpxgdUUdt6trZbfIbv4TXkpP4pwsbS0q", + "width": 180 + }, + { + "height": 256, + "url": "https://encrypted-tbn0.gstatic.com/favicon-tbn?q=tbn:ANd9GcQeYEn7J_6R4HhkWWEfFuyPIN4Fz9EWNsVKCSiKtM6rSbZqKHYn0KuxjptJmIxZl7ita5EkI9cuETexUPlSl6brI8VE5jqAWA7srAcLl1QpcboEx_70", + "width": 256 + } + ] + }, + "link": { + "commandRuns": [ + { + "length": 44, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CA8QobIHGAUiEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { "rootVe": 83769, @@ -327,246 +397,777 @@ "nofollow": true, "url": "https://www.youtube.com/channel/UCkGvUEt8iQLmq3aJIMjT2qQ" } - }, - "title": { - "simpleText": "EEVdiscover" - }, - "trackingParams": "CCIQobIHGAQiEwjQl_Lpj676AhXF6FEKHcpNBwM=" + } }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSeeYHqSanvu-1kS8-j8snFjPciLtknpI1FBXBB6ChDhHFlCRCjevwoP5AOW1u3m9HaeGexWOI4DJeisvRR1YK_jsARgDOrkbO3qWsfWQFxBaEkSQ" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CCEQobIHGAUiEwjQl_Lpj676AhXF6FEKHcpNBwM=", + "startIndex": 0 + } + ], + "content": "youtube.com/channel/UCkGvUEt8iQLmq3aJIMjT2qQ" + }, + "title": { + "content": "EEVdiscover" + } + } + }, + { + "channelExternalLinkViewModel": { + "favicon": { + "sources": [ + { + "height": 16, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSeeYHqSanvu-1kS8-j8snFjPciLtknpI1FBXBB6ChDhHFlCRCjevwoP5AOW1u3m9HaeGexWOI4DJeisvRR1YK_jsARgDOrkbO3qWsfWQFxBaEkSQ", + "width": 16 + }, + { + "height": 24, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSRO3yoShMv5k2DaoKeuCUuLO7tqU2tq_5dmjuYm6jI5FVUVzAR3hzAYKXBLihGwpLTHHwvZytTudtTbT5BcynVneVmScYFWQD5YeySuJdm44lkuA", + "width": 24 + }, + { + "height": 32, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRIUJbfp6w0pB_u9CGjMzaTsTI7tiSAdSGBA8Hf6zMS5vjmNxUZEU01jHbVZSLbD05OQVHJDuqOf3H2kubCIp5bt4C73Y3H4zbT64CPQBojEE0HKw", + "width": 32 + }, + { + "height": 48, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSjc0VmcVmJs-FQFvHFOGGfCa1T2yvy_37_qvLeaEenpYij0Awawk3H_89y3FUOMQfYYoJgGEWOUeqSNiuP2HhWCepbiORY3nOV4rirtii6ZK0Okw", + "width": 48 + }, + { + "height": 50, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcT69ZCUPz_NCxzzBSTaa3UsDtYstRJkHNQDosDuc6opuZoSNQyfeH7q70magR_sCmcOXrhlVt90kJaYfuaxaMinr4NvcvyxLvkxablKlWLUz3dNwQ", + "width": 50 + }, + { + "height": 64, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRVbUVWS0NUsck5BjE03J5DCtX6Pddc7dbdTW-UfOYeh68FLygzZKr7m7aCt0gSW7BW1mNleXfBXdT3F2wLroI4OJCX2_hTEvzhpf7N4Vskdn_DvA", + "width": 64 + }, + { + "height": 96, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTIioE30qOAuAgsby1zHK_3DQ4OM1dudwAsAJeGgsL_t1-VgVsL325ZVzk6jUiMsAUCEIpoGeDm9dCRs6b0G1HTJ-TwMVsZ9TZh5sk0hyuaoUS-PQ", + "width": 96 + }, + { + "height": 128, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcR4jzSwbUFOQnTnk8rdJjrsB83EHczjKxbbKin2Tzvn0-b-aphjcZNP6_ymFrDzQLic_m2agRA6_JWVrfZTRtmaEU2p9hUr-jy9ON_XmhCSm-8VBus", + "width": 128 + }, + { + "height": 180, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTj0M93LmbNQ3X0LfHkLbS80j63DGUfWfQe-HjX-TgO0_h-ff1as0nlf11EZ2OLGra-LaVc4tuO_BR6xd8KoWcG566_zyyjB_rfC8zsNjUWcrZIZyc", + "width": 180 + }, + { + "height": 256, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSe0igGE-TpaxmAu93lpaP5Mj8QreWzoqq-Egda_PGitzD3-ZOoO0bD5bpBFQDVjQnpOu2cEQOwJkohhaYiSJGk6bWt8MogG2OByyg624RjVHSbqoU", + "width": 256 + } + ] + }, + "link": { + "commandRuns": [ + { + "length": 17, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CA4QobIHGAYiEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa3lZaE8tLVBneVh2R3Z5TXplU2wzbUVRcVJ1Z3xBQ3Jtc0trQnl4NVltWkFDa3hXVUZzQ0o4UHo2dENwX3ZYaklNQzZNNDJrUFBtOVVFemVsSU4zaTd6UmZJYWRWck9mU0d1UEtZYXBQSUxkc1k0Zi1fU1BmQWVnY09NSU1KXzN1M2RsaDVnT1hsbHk0YmRLNWNlTQ&q=http%3A%2F%2Fwww.eevblog.com%2Fforum", + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqblQ3NGhVMnR6R29DQkF4WDFDdHc1aE1sZkdmd3xBQ3Jtc0ttdHhMWk1aSjdaRE8zX3AtN0l2eXhhTXBiMXNLLTBtTFJaWTg1eS1PeGlGVHZ0cTdlc0dKUGFrNHJzUjA2RDU2bGFTVEZPZkEzaHV6aGduWWl6V25ETFhEMHhTYUZOUWZNckNIR3gtMVY1bzliYlFmbw&q=http%3A%2F%2Fwww.eevblog.com%2Fforum", "webPageType": "WEB_PAGE_TYPE_UNKNOWN" } }, "urlEndpoint": { "nofollow": true, "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa3lZaE8tLVBneVh2R3Z5TXplU2wzbUVRcVJ1Z3xBQ3Jtc0trQnl4NVltWkFDa3hXVUZzQ0o4UHo2dENwX3ZYaklNQzZNNDJrUFBtOVVFemVsSU4zaTd6UmZJYWRWck9mU0d1UEtZYXBQSUxkc1k0Zi1fU1BmQWVnY09NSU1KXzN1M2RsaDVnT1hsbHk0YmRLNWNlTQ&q=http%3A%2F%2Fwww.eevblog.com%2Fforum" + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqblQ3NGhVMnR6R29DQkF4WDFDdHc1aE1sZkdmd3xBQ3Jtc0ttdHhMWk1aSjdaRE8zX3AtN0l2eXhhTXBiMXNLLTBtTFJaWTg1eS1PeGlGVHZ0cTdlc0dKUGFrNHJzUjA2RDU2bGFTVEZPZkEzaHV6aGduWWl6V25ETFhEMHhTYUZOUWZNckNIR3gtMVY1bzliYlFmbw&q=http%3A%2F%2Fwww.eevblog.com%2Fforum" } - }, - "title": { - "simpleText": "The EEVblog Forum" - }, - "trackingParams": "CCEQobIHGAUiEwjQl_Lpj676AhXF6FEKHcpNBwM=" + } }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSeeYHqSanvu-1kS8-j8snFjPciLtknpI1FBXBB6ChDhHFlCRCjevwoP5AOW1u3m9HaeGexWOI4DJeisvRR1YK_jsARgDOrkbO3qWsfWQFxBaEkSQ" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CCAQobIHGAYiEwjQl_Lpj676AhXF6FEKHcpNBwM=", + "startIndex": 0 + } + ], + "content": "eevblog.com/forum" + }, + "title": { + "content": "The EEVblog Forum" + } + } + }, + { + "channelExternalLinkViewModel": { + "favicon": { + "sources": [ + { + "height": 16, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSeeYHqSanvu-1kS8-j8snFjPciLtknpI1FBXBB6ChDhHFlCRCjevwoP5AOW1u3m9HaeGexWOI4DJeisvRR1YK_jsARgDOrkbO3qWsfWQFxBaEkSQ", + "width": 16 + }, + { + "height": 24, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSRO3yoShMv5k2DaoKeuCUuLO7tqU2tq_5dmjuYm6jI5FVUVzAR3hzAYKXBLihGwpLTHHwvZytTudtTbT5BcynVneVmScYFWQD5YeySuJdm44lkuA", + "width": 24 + }, + { + "height": 32, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRIUJbfp6w0pB_u9CGjMzaTsTI7tiSAdSGBA8Hf6zMS5vjmNxUZEU01jHbVZSLbD05OQVHJDuqOf3H2kubCIp5bt4C73Y3H4zbT64CPQBojEE0HKw", + "width": 32 + }, + { + "height": 48, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSjc0VmcVmJs-FQFvHFOGGfCa1T2yvy_37_qvLeaEenpYij0Awawk3H_89y3FUOMQfYYoJgGEWOUeqSNiuP2HhWCepbiORY3nOV4rirtii6ZK0Okw", + "width": 48 + }, + { + "height": 50, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcT69ZCUPz_NCxzzBSTaa3UsDtYstRJkHNQDosDuc6opuZoSNQyfeH7q70magR_sCmcOXrhlVt90kJaYfuaxaMinr4NvcvyxLvkxablKlWLUz3dNwQ", + "width": 50 + }, + { + "height": 64, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRVbUVWS0NUsck5BjE03J5DCtX6Pddc7dbdTW-UfOYeh68FLygzZKr7m7aCt0gSW7BW1mNleXfBXdT3F2wLroI4OJCX2_hTEvzhpf7N4Vskdn_DvA", + "width": 64 + }, + { + "height": 96, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTIioE30qOAuAgsby1zHK_3DQ4OM1dudwAsAJeGgsL_t1-VgVsL325ZVzk6jUiMsAUCEIpoGeDm9dCRs6b0G1HTJ-TwMVsZ9TZh5sk0hyuaoUS-PQ", + "width": 96 + }, + { + "height": 128, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcR4jzSwbUFOQnTnk8rdJjrsB83EHczjKxbbKin2Tzvn0-b-aphjcZNP6_ymFrDzQLic_m2agRA6_JWVrfZTRtmaEU2p9hUr-jy9ON_XmhCSm-8VBus", + "width": 128 + }, + { + "height": 180, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTj0M93LmbNQ3X0LfHkLbS80j63DGUfWfQe-HjX-TgO0_h-ff1as0nlf11EZ2OLGra-LaVc4tuO_BR6xd8KoWcG566_zyyjB_rfC8zsNjUWcrZIZyc", + "width": 180 + }, + { + "height": 256, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSe0igGE-TpaxmAu93lpaP5Mj8QreWzoqq-Egda_PGitzD3-ZOoO0bD5bpBFQDVjQnpOu2cEQOwJkohhaYiSJGk6bWt8MogG2OByyg624RjVHSbqoU", + "width": 256 + } + ] + }, + "link": { + "commandRuns": [ + { + "length": 17, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CA0QobIHGAciEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbHY3a0x2WU5BMTJ0SmlqVEVVay1pMW9Jc2c2Z3xBQ3Jtc0tsYktFRk4xLXNJQ1NfZDZlcVZrSVN0QWlidjcxZEY2bFpSTWVGNTJIUXJGdkhDeEJMX2lFLTVBaHNXSXlvUTVQcUhTNUcwVUktRVJuUVdCc3Ftd2F5T3VNNnRfelYtR05ENGFPaTFHOGpuajh5YzlEQQ&q=http%3A%2F%2Fwww.eevblog.com%2Fmerch", + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqblVUZlV5UzZ6TmZISGd4dm5Hb1d6X3h1RzRiQXxBQ3Jtc0ttbGU4anZXVnR2VlpYNFFlU2tqbldzVkFfZGVaTTQyaUhhbUhlMU1YYkU3TThjekh5UFRKWWxUOUNuTmxraEVLcWprZkVRRjVlNzl4UzByUHktY01NRTN6ODluSzNWR0U4UWp1NC1wWXNHdjI3TUkxQQ&q=http%3A%2F%2Fwww.eevblog.com%2Fmerch", "webPageType": "WEB_PAGE_TYPE_UNKNOWN" } }, "urlEndpoint": { "nofollow": true, "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbHY3a0x2WU5BMTJ0SmlqVEVVay1pMW9Jc2c2Z3xBQ3Jtc0tsYktFRk4xLXNJQ1NfZDZlcVZrSVN0QWlidjcxZEY2bFpSTWVGNTJIUXJGdkhDeEJMX2lFLTVBaHNXSXlvUTVQcUhTNUcwVUktRVJuUVdCc3Ftd2F5T3VNNnRfelYtR05ENGFPaTFHOGpuajh5YzlEQQ&q=http%3A%2F%2Fwww.eevblog.com%2Fmerch" + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqblVUZlV5UzZ6TmZISGd4dm5Hb1d6X3h1RzRiQXxBQ3Jtc0ttbGU4anZXVnR2VlpYNFFlU2tqbldzVkFfZGVaTTQyaUhhbUhlMU1YYkU3TThjekh5UFRKWWxUOUNuTmxraEVLcWprZkVRRjVlNzl4UzByUHktY01NRTN6ODluSzNWR0U4UWp1NC1wWXNHdjI3TUkxQQ&q=http%3A%2F%2Fwww.eevblog.com%2Fmerch" } - }, - "title": { - "simpleText": "EEVblog Merchandise (T-Shirts)" - }, - "trackingParams": "CCAQobIHGAYiEwjQl_Lpj676AhXF6FEKHcpNBwM=" + } }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSeeYHqSanvu-1kS8-j8snFjPciLtknpI1FBXBB6ChDhHFlCRCjevwoP5AOW1u3m9HaeGexWOI4DJeisvRR1YK_jsARgDOrkbO3qWsfWQFxBaEkSQ" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CB8QobIHGAciEwjQl_Lpj676AhXF6FEKHcpNBwM=", + "startIndex": 0 + } + ], + "content": "eevblog.com/merch" + }, + "title": { + "content": "EEVblog Merchandise (T-Shirts)" + } + } + }, + { + "channelExternalLinkViewModel": { + "favicon": { + "sources": [ + { + "height": 16, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSeeYHqSanvu-1kS8-j8snFjPciLtknpI1FBXBB6ChDhHFlCRCjevwoP5AOW1u3m9HaeGexWOI4DJeisvRR1YK_jsARgDOrkbO3qWsfWQFxBaEkSQ", + "width": 16 + }, + { + "height": 24, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSRO3yoShMv5k2DaoKeuCUuLO7tqU2tq_5dmjuYm6jI5FVUVzAR3hzAYKXBLihGwpLTHHwvZytTudtTbT5BcynVneVmScYFWQD5YeySuJdm44lkuA", + "width": 24 + }, + { + "height": 32, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRIUJbfp6w0pB_u9CGjMzaTsTI7tiSAdSGBA8Hf6zMS5vjmNxUZEU01jHbVZSLbD05OQVHJDuqOf3H2kubCIp5bt4C73Y3H4zbT64CPQBojEE0HKw", + "width": 32 + }, + { + "height": 48, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSjc0VmcVmJs-FQFvHFOGGfCa1T2yvy_37_qvLeaEenpYij0Awawk3H_89y3FUOMQfYYoJgGEWOUeqSNiuP2HhWCepbiORY3nOV4rirtii6ZK0Okw", + "width": 48 + }, + { + "height": 50, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcT69ZCUPz_NCxzzBSTaa3UsDtYstRJkHNQDosDuc6opuZoSNQyfeH7q70magR_sCmcOXrhlVt90kJaYfuaxaMinr4NvcvyxLvkxablKlWLUz3dNwQ", + "width": 50 + }, + { + "height": 64, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRVbUVWS0NUsck5BjE03J5DCtX6Pddc7dbdTW-UfOYeh68FLygzZKr7m7aCt0gSW7BW1mNleXfBXdT3F2wLroI4OJCX2_hTEvzhpf7N4Vskdn_DvA", + "width": 64 + }, + { + "height": 96, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTIioE30qOAuAgsby1zHK_3DQ4OM1dudwAsAJeGgsL_t1-VgVsL325ZVzk6jUiMsAUCEIpoGeDm9dCRs6b0G1HTJ-TwMVsZ9TZh5sk0hyuaoUS-PQ", + "width": 96 + }, + { + "height": 128, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcR4jzSwbUFOQnTnk8rdJjrsB83EHczjKxbbKin2Tzvn0-b-aphjcZNP6_ymFrDzQLic_m2agRA6_JWVrfZTRtmaEU2p9hUr-jy9ON_XmhCSm-8VBus", + "width": 128 + }, + { + "height": 180, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTj0M93LmbNQ3X0LfHkLbS80j63DGUfWfQe-HjX-TgO0_h-ff1as0nlf11EZ2OLGra-LaVc4tuO_BR6xd8KoWcG566_zyyjB_rfC8zsNjUWcrZIZyc", + "width": 180 + }, + { + "height": 256, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSe0igGE-TpaxmAu93lpaP5Mj8QreWzoqq-Egda_PGitzD3-ZOoO0bD5bpBFQDVjQnpOu2cEQOwJkohhaYiSJGk6bWt8MogG2OByyg624RjVHSbqoU", + "width": 256 + } + ] + }, + "link": { + "commandRuns": [ + { + "length": 21, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CAwQobIHGAgiEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqblZ3bHNZVy11YW1IWjhHR0FIdEpQMVJoWVpOd3xBQ3Jtc0ttbnVFV2JHWnRBVUhLaE83WmpKZU4xYi1GVS0tSTVjYUtGck5zUkgyVl94VXQtakNYU0xsOER1SWdjcVhSVlQ0TWszUWNHT3pFNzVKVGZESzBRcGwwdVVlb1k2cm5LaklXcDBMN3NSdjZ5NTk5S2JGSQ&q=http%3A%2F%2Fwww.eevblog.com%2Fdonations%2F", + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbkdmREdPTlIzY2pSZ2RfX1NvRTNzZVVncEdxUXxBQ3Jtc0tuQUlockhNQ2NDV2xhQkNoMWUyM2ZnU2Jac3NkZlVKR1RtV1gyNk1fRWVrLTJDY1JiUHloRGVIeGh0blhfamZTY0RhckdwSTF4elhjTkMtcmtGME9KYlhGRmtlQ3hKeUlKWWtCRDBCRGkwbnNQcTJYQQ&q=http%3A%2F%2Fwww.eevblog.com%2Fdonations%2F", "webPageType": "WEB_PAGE_TYPE_UNKNOWN" } }, "urlEndpoint": { "nofollow": true, "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqblZ3bHNZVy11YW1IWjhHR0FIdEpQMVJoWVpOd3xBQ3Jtc0ttbnVFV2JHWnRBVUhLaE83WmpKZU4xYi1GVS0tSTVjYUtGck5zUkgyVl94VXQtakNYU0xsOER1SWdjcVhSVlQ0TWszUWNHT3pFNzVKVGZESzBRcGwwdVVlb1k2cm5LaklXcDBMN3NSdjZ5NTk5S2JGSQ&q=http%3A%2F%2Fwww.eevblog.com%2Fdonations%2F" + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbkdmREdPTlIzY2pSZ2RfX1NvRTNzZVVncEdxUXxBQ3Jtc0tuQUlockhNQ2NDV2xhQkNoMWUyM2ZnU2Jac3NkZlVKR1RtV1gyNk1fRWVrLTJDY1JiUHloRGVIeGh0blhfamZTY0RhckdwSTF4elhjTkMtcmtGME9KYlhGRmtlQ3hKeUlKWWtCRDBCRGkwbnNQcTJYQQ&q=http%3A%2F%2Fwww.eevblog.com%2Fdonations%2F" } - }, - "title": { - "simpleText": "EEVblog Donations" - }, - "trackingParams": "CB8QobIHGAciEwjQl_Lpj676AhXF6FEKHcpNBwM=" + } }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRNePy1H3QW5dJzuE2mHt-ObVgw6hqhXf2AjZ0DoWRBGk1XNRiGO-okaP7raQeazic8D4yZgoYSQsT3WmYKNXCZf0rk6Pc4KqozGcSQDWt7jGXeYeA" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CB4QobIHGAgiEwjQl_Lpj676AhXF6FEKHcpNBwM=", + "startIndex": 0 + } + ], + "content": "eevblog.com/donations" + }, + "title": { + "content": "EEVblog Donations" + } + } + }, + { + "channelExternalLinkViewModel": { + "favicon": { + "sources": [ + { + "height": 16, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRNePy1H3QW5dJzuE2mHt-ObVgw6hqhXf2AjZ0DoWRBGk1XNRiGO-okaP7raQeazic8D4yZgoYSQsT3WmYKNXCZf0rk6Pc4KqozGcSQDWt7jGXeYeA", + "width": 16 + }, + { + "height": 24, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSkFJt58idInfFAW7lrZ-6EfRiA3ThDqnAywUsJYr78mSnsfxQdWiv3tHor6qgINIu_Z7IrF-RMmKtCFPhz3-blesNh9xcotKUJv1PV4WNrBKESFCY", + "width": 24 + }, + { + "height": 32, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcQO-SmPSHM8ETQwZDYhA4w265KjgTPxsXjE9aZpX_cQev3IpPohPRd3_GFziR3_l_kQ9uavjzUJqj2aR8MB-l4hFfT8eGv-HKRhExrkL1m0LCH-JIE", + "width": 32 + }, + { + "height": 48, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRstfwnAaG4kF2cOJLSXbrTomU5vDwsOu6RuyY-uAmD0yM2p8Nfrp4Ycoccz_g8580M2qq6qLHXguC53YwiAIjJtl3pjX0rJKUjkyMeqhY8Sgn83qk", + "width": 48 + }, + { + "height": 50, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTEshIGFGiBVLYGGP-t5xPGSeQ9bTSkyHDqXxcrOJTn4Wkg2lG0xzQqoJsOOGlFZLleG7WDXuMo4hcE5U-5F0nZkEo_Xtd1ovFIRgkZc1HjhMKLWlE", + "width": 50 + }, + { + "height": 64, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcR4mq4xdRu9LRUZ2HzIIwJWwtxWhx3--EWTK9AebXRGFNBhvhTu_HdUKiHwgHsawcTKSgOz9C4FBktD3zY9FqFx_IGs82iO282qpUr5QaCD01J5RXU", + "width": 64 + }, + { + "height": 96, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRIVNMFDnR4cqNqYXN0h9Nl5J-iSg_RfceC_ZBK5ST5BRGP9gCy7ghL7FTYks1tHusczalImHmcvqeIqE-Wx_UpTHwKtCB6mfGLg3EZ7xwH9iMEKxY", + "width": 96 + }, + { + "height": 128, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSugACwO6xJT_J_s8qW2oIM6LwDHESwc6riWfaIuPf_7uloRpaWEJ3Kxa_yMu108U7DHkbXL5zMEut8-_G5RJ8kexXJa7mRRfY9YH59scKIbYsE_WER", + "width": 128 + }, + { + "height": 180, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTkN-MU5mf_oxSQ6en8TSyVAqyiFyoVmqPdPSX3-4l4JkNY4xwXY2uuBXyR-OGRTeKFYNjlaL55opuJdsArK0PYd9afjUdJdVc9RrSwIFDkX9KWswRo", + "width": 180 + }, + { + "height": 256, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcR4HPodwM-_foWK97KTrM0CQfu9jLcOjuGpZ7DoYWRPX1Rn7pfUmcPHvaWsABP-O8DoQ94LSBKXhhjyxtLExJEshdyoiYhrNxKFN0HbbtB5PTK1N50d", + "width": 256 + } + ] + }, + "link": { + "commandRuns": [ + { + "length": 19, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CAsQobIHGAkiEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa3VOaGVjWmc4amtOdThCSGp3QXdQSkZYSWhQQXxBQ3Jtc0tsS29ENFZBRWJ1UkZCVUhTeWRIbWw2V1FKNnZGblJJZUhzRlRXaVd5NjNyakJXOWwtbzVIZTdLV3poYk4ya0djeXZwZi1BYnhYSjRUMHJtWkdNVzQya1AtQ0hDcGRCXzk2Tlpxa3dTVHdoNmZnNjR1dw&q=https%3A%2F%2Fwww.patreon.com%2Feevblog", + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbVB6Z1dNMkdXMkstVUprZzRaZXpVczNld0p6QXxBQ3Jtc0tuZ3M2cEduTXBlR0oxOWxnSHhQcmQ4Vm5RRUlkdGNEOVRBWERQcC1JYzFXb0JLVGdMMTlra2FKaS16Q3Q2cGFrRUFrWEpvMzVxNGtlOEJXWnNHWUcwdFdFNHhnVmgxVTdaOWE5Y0lIOVpneUw3VVNfRQ&q=https%3A%2F%2Fwww.patreon.com%2Feevblog", "webPageType": "WEB_PAGE_TYPE_UNKNOWN" } }, "urlEndpoint": { "nofollow": true, "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa3VOaGVjWmc4amtOdThCSGp3QXdQSkZYSWhQQXxBQ3Jtc0tsS29ENFZBRWJ1UkZCVUhTeWRIbWw2V1FKNnZGblJJZUhzRlRXaVd5NjNyakJXOWwtbzVIZTdLV3poYk4ya0djeXZwZi1BYnhYSjRUMHJtWkdNVzQya1AtQ0hDcGRCXzk2Tlpxa3dTVHdoNmZnNjR1dw&q=https%3A%2F%2Fwww.patreon.com%2Feevblog" + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbVB6Z1dNMkdXMkstVUprZzRaZXpVczNld0p6QXxBQ3Jtc0tuZ3M2cEduTXBlR0oxOWxnSHhQcmQ4Vm5RRUlkdGNEOVRBWERQcC1JYzFXb0JLVGdMMTlra2FKaS16Q3Q2cGFrRUFrWEpvMzVxNGtlOEJXWnNHWUcwdFdFNHhnVmgxVTdaOWE5Y0lIOVpneUw3VVNfRQ&q=https%3A%2F%2Fwww.patreon.com%2Feevblog" } - }, - "title": { - "simpleText": "Patreon" - }, - "trackingParams": "CB4QobIHGAgiEwjQl_Lpj676AhXF6FEKHcpNBwM=" + } }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcT-8_XQ6FFFUhxPG6nO8fXwP8nLrLo1gEtxRF_P1hQjbuDENZeK3-2W5bUaDp8oWDpP0PEdTBO5MsLEtmSucmSL0PMvOUOgYIWi8-_A7I9ANgBBhnemRCe8cOc" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CB0QobIHGAkiEwjQl_Lpj676AhXF6FEKHcpNBwM=", + "startIndex": 0 + } + ], + "content": "patreon.com/eevblog" + }, + "title": { + "content": "Patreon" + } + } + }, + { + "channelExternalLinkViewModel": { + "favicon": { + "sources": [ + { + "height": 16, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcT-8_XQ6FFFUhxPG6nO8fXwP8nLrLo1gEtxRF_P1hQjbuDENZeK3-2W5bUaDp8oWDpP0PEdTBO5MsLEtmSucmSL0PMvOUOgYIWi8-_A7I9ANgBBhnemRCe8cOc", + "width": 16 + }, + { + "height": 24, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcQx_Ds2OBT2_iejNv8KJMfq4SkGioo9jy-wKc8TTJoEVZ-4zeYMps-5_VwxENrzklDc_xyDKrrkiag_FRRbS9maYOaDY9poYU_Zxkj__ZDvP19XoITmGgUhFa4", + "width": 24 + }, + { + "height": 32, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcQWxtxRIq_f94D-jLf1Y5IiJgZvyLl62yUd3hQbogAA3SvF8CayVFdTenZniRJoSygkiNRt3a2k4-xjuEoTLYazE5DoFREU5NKMgHz6nP9LH0oaMlJA5vDvyms", + "width": 32 + }, + { + "height": 48, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcRn16r7E_WqC4BLd0LJCAb-K9KJDEroLRMKrXinMK5RPPzmGJLeDiXjZPkDpPgaURI15J9pnjzAGSypfYGWZ3XGMP3BCpyvmzsj9WuRrprhI2cxCpDmQnGWotg", + "width": 48 + }, + { + "height": 50, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcTC7RINGwpFa5fJEITxaFkLuGfxdCs-uN_cdeJf5up9GHD9YeR5euLEikQibIikWp6Wtffbdjz2jflyrByVxWxgmTZU9UcXvmhy1MM75TBq12jy84StKI5f9F4", + "width": 50 + }, + { + "height": 64, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcRrWwAxDvDU4oXyhpGbSCTLk8cB6ym43sFuIMB-WWdX0eHbThFv5VhFdFPNUXozQEWzX9T_3_lPf2tinG41M4YI50HJW6eWiN4dzzvGQagSWSwHgcjYMXsWxAY", + "width": 64 + }, + { + "height": 96, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcTlVSX75EriGP0NtQ8286O5U5i9uv0NoE5A6ZeIsKcym7G25kCXG3CPdfuZ2b4M55sM7R4pLQgRAeelK-mgRw2Ft4eDCdMs6Ube5qma--Z1HmUI1qzWNcw1_7M", + "width": 96 + }, + { + "height": 128, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcTCVuC9skhEwVgfEz_zEcBHhG--SkHyEbnx5MYR-ZaQ83_rQTS67xJB97OPld4r5GQjTbBCVfR_P1ik6O8AbfVYbUe7XcSkv28q-GA22QkRNxaLsI5gYPmBcYHp", + "width": 128 + }, + { + "height": 180, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcQZSj3n8tVLdCF3U5Osf1QOr18Um6zHr7vT7wHSDZmWx01F4LTTfeYrbUDr22uxi_EwFSfwcbSRJPSgDJ1DuelyrZCLqarjzRNE5M945jSFcnUaKmRutqNQbgKv", + "width": 180 + }, + { + "height": 256, + "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcQnb7Y6PZyo6rRTG0fcBXEpsU8fKhlcETqpth0usbgSOmOU5IWXTPbN7JHgvEL34uF9Kf8Si2SYW2S1L6rNHjmqwzN1WEKrtZRVEKxnwpeL6WrzeCoxoyGUzU8C", + "width": 256 + } + ] + }, + "link": { + "commandRuns": [ + { + "length": 25, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CAoQobIHGAoiEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbW56T0MweUZyVVdFRmlpcUtJZ0VrZHFvbUZwZ3xBQ3Jtc0ttZEp5bnNtMWlSTHg3aVF1b19jV2hVYzZRQWtpbDdjcHB2OHd5VEZNRkxQY3hSeWZsN0pIVU94cnNSMjVGWjVJNTRHQVpaNmtfWnZaTEgzQmdQMk44S3pLWFFoRnVmbEwtLVViSmdjTjVpS1c4M1F2bw&q=https%3A%2F%2Fwww.subscribestar.com%2Feevblog", + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbXZESU9oZ0dHV3lyQkwyTjlKeUgxQnZfdkU4UXxBQ3Jtc0tuMHAwVDdzWVpYbDFoYjh2VXFXQnJqRVp4STh2REI1ZFJfdFNYX1VodEV3em5BSWZ6NmdsM0JZRTFhckV2VDQ5U1ZzMHNVV3lRWllNVGZSdEUzQVJxTF94X2F5WlFid3R1ZnpDbFM4NkR5a0NCaWFwbw&q=https%3A%2F%2Fwww.subscribestar.com%2Feevblog", "webPageType": "WEB_PAGE_TYPE_UNKNOWN" } }, "urlEndpoint": { "nofollow": true, "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbW56T0MweUZyVVdFRmlpcUtJZ0VrZHFvbUZwZ3xBQ3Jtc0ttZEp5bnNtMWlSTHg3aVF1b19jV2hVYzZRQWtpbDdjcHB2OHd5VEZNRkxQY3hSeWZsN0pIVU94cnNSMjVGWjVJNTRHQVpaNmtfWnZaTEgzQmdQMk44S3pLWFFoRnVmbEwtLVViSmdjTjVpS1c4M1F2bw&q=https%3A%2F%2Fwww.subscribestar.com%2Feevblog" + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbXZESU9oZ0dHV3lyQkwyTjlKeUgxQnZfdkU4UXxBQ3Jtc0tuMHAwVDdzWVpYbDFoYjh2VXFXQnJqRVp4STh2REI1ZFJfdFNYX1VodEV3em5BSWZ6NmdsM0JZRTFhckV2VDQ5U1ZzMHNVV3lRWllNVGZSdEUzQVJxTF94X2F5WlFid3R1ZnpDbFM4NkR5a0NCaWFwbw&q=https%3A%2F%2Fwww.subscribestar.com%2Feevblog" } - }, - "title": { - "simpleText": "SubscribeStar" - }, - "trackingParams": "CB0QobIHGAkiEwjQl_Lpj676AhXF6FEKHcpNBwM=" + } }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcQM5g9rHwU86NCDHZAnvIGK40lhLrquyZVKRCGft0DGiGrzrooBQXjgRtUY4xqEBgwe57w7ytbX7kUubPHTmsWL1wIqcW8XkaoYfuC4ENqJjMhOsX592A" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CBwQobIHGAoiEwjQl_Lpj676AhXF6FEKHcpNBwM=", + "startIndex": 0 + } + ], + "content": "subscribestar.com/eevblog" + }, + "title": { + "content": "SubscribeStar" + } + } + }, + { + "channelExternalLinkViewModel": { + "favicon": { + "sources": [ + { + "height": 16, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcQM5g9rHwU86NCDHZAnvIGK40lhLrquyZVKRCGft0DGiGrzrooBQXjgRtUY4xqEBgwe57w7ytbX7kUubPHTmsWL1wIqcW8XkaoYfuC4ENqJjMhOsX592A", + "width": 16 + }, + { + "height": 24, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTHn1LQ7DJ9GP6-kx3WqDehgU6X3diEby7pm3m7tuxwRjfkvkYRJQonfDkOg1wsF8q7v69sNt_KB3vG-QdImTndnLOf9pon12kvDJ9WUQy7X5_GfNqB3g", + "width": 24 + }, + { + "height": 32, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRwkdSTNpWhCOTkjaMzCAt3Si4YzJgd3u8CnzI1Hv9al4HjNk6yjnRY119-4KvVEYsy078DAsLORPTGOmWPo6YIy6fh9KEsg_inciXHZmYmIcPn-4jD2A", + "width": 32 + }, + { + "height": 48, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcT9mwjRi5BdPHzHHJdQCE1D2yqm11S6mIkcikM6rma9xpKXy-H8ujbsZCSxAGDzfb_yenr-yTzoDG4APeiBoAyeaKro2Cpz5GxA27k_khYqFvYVAewlqw", + "width": 48 + }, + { + "height": 50, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTWhSVgHPXadIPDfYsrPeYIiE0ajUnIBUUr9eO1YCvTrWvmcRZqnkLnWZWCwl5OAjKxtCXBNcxoYsJX2S_eIKq_ipbGDEko6wlGWZjlZH5jRJj8WOaXsA", + "width": 50 + }, + { + "height": 64, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcQZ00OGihD4ta9FqvsoTmgMqYRALOsSytUFgsbjHW6p-Pc7z8dMCcp4jQ-YKMAaWDz6lySlrfRFfhVv5IHXoIf34ALe6ZDM1mbWWrROzIyv0vpIu0khtg", + "width": 64 + }, + { + "height": 96, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRAR6db3LScHfv_Z-ZWev0XcFjp_LKw34d3Mqe8It81AnkC4poW5Gd97c2XI1wHbnPper7pt0Xk3rT1zYt3dVATKcLztxkxRtgR7I6NakFXhBZYznawoQ", + "width": 96 + }, + { + "height": 128, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTzjfPKAN6eeIYAqlR6bmpzdzs6Fo-s6kxApUegIbILaVHh3eD00dNhu6g_0N_YYEFsj2aPStFWnXk9OnvQTOqRLvxoU_KnnHQv8L7QrdyZQDUNxy8nnR0", + "width": 128 + }, + { + "height": 180, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRzZvVZUWYdDdX3zY-_2lBwVj6CSjI_eeoz9-2LFFEQIP8Lp1TbjRl7vtmSzxyMdyGIGVgXp39Rg6BvPm5VOOxOvXLHPU5ctGeu1Q2R4uLNjAEjRsvouwo", + "width": 180 + }, + { + "height": 256, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRPVnzDMmaa61TYzZ6dM0VI-IJJvYHYdH17apVgubfGbIEiPgNrEMvKmGZkHkv1WILzGLOj5CSE9A1Y6Tj4L-TVVQG0lILAhGvxeUm9yDpWEkPB7siXQJY", + "width": 256 + } + ] + }, + "link": { + "commandRuns": [ + { + "length": 14, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CAkQobIHGAsiEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbF9Mb0tHaDVHSmlJSXNNaVZRVHFHRnR0Nl9MUXxBQ3Jtc0tuYTgxUlluQV9Ga0tra09Id3N4RndoRm9zTXlzYV9qT3JEMHJNQzJoVDFBd2EydlpTWUpXTGpfb19iU2xhT1YzVzFjd2NGb2NwQnBnckJfQ3ZxRWdPTV84dE1OOVhlV2FjWjdCX1JDenA4YnFOVEVVUQ&q=http%3A%2F%2Fwww.theamphour.com", + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbmlnbTB1UWYwQUtabGpmRk9MTTdlRlh1Znkxd3xBQ3Jtc0trU2JGcDkxR01qWkRDUGxkWG5ZaVZudW4wdjBuOFVSN29HMWVva092TER4bHA2anFVQldMR2ZWOENNTjJYX3JDMG9UbzA1dVZTWXYyclRKR3A4cVgyYkNsZEdERUpnVTJWLXV1Z2VfVTFYMUYxNXJpRQ&q=http%3A%2F%2Fwww.theamphour.com", "webPageType": "WEB_PAGE_TYPE_UNKNOWN" } }, "urlEndpoint": { "nofollow": true, "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbF9Mb0tHaDVHSmlJSXNNaVZRVHFHRnR0Nl9MUXxBQ3Jtc0tuYTgxUlluQV9Ga0tra09Id3N4RndoRm9zTXlzYV9qT3JEMHJNQzJoVDFBd2EydlpTWUpXTGpfb19iU2xhT1YzVzFjd2NGb2NwQnBnckJfQ3ZxRWdPTV84dE1OOVhlV2FjWjdCX1JDenA4YnFOVEVVUQ&q=http%3A%2F%2Fwww.theamphour.com" + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbmlnbTB1UWYwQUtabGpmRk9MTTdlRlh1Znkxd3xBQ3Jtc0trU2JGcDkxR01qWkRDUGxkWG5ZaVZudW4wdjBuOFVSN29HMWVva092TER4bHA2anFVQldMR2ZWOENNTjJYX3JDMG9UbzA1dVZTWXYyclRKR3A4cVgyYkNsZEdERUpnVTJWLXV1Z2VfVTFYMUYxNXJpRQ&q=http%3A%2F%2Fwww.theamphour.com" } - }, - "title": { - "simpleText": "The AmpHour Radio Show" - }, - "trackingParams": "CBwQobIHGAoiEwjQl_Lpj676AhXF6FEKHcpNBwM=" + } }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRnAk_yQ7EPRR2O8YSDZ2dxHZpw2jM7tVeWXkyrWjjZsD-p7OcxqNNuTKvuIuc0rT97_DrMTvP4x0mu4npuOrlZEJLkffDBAiHYCWdze4lZy3Lu" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CBsQobIHGAsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", + "startIndex": 0 + } + ], + "content": "theamphour.com" + }, + "title": { + "content": "The AmpHour Radio Show" + } + } + }, + { + "channelExternalLinkViewModel": { + "favicon": { + "sources": [ + { + "height": 16, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRnAk_yQ7EPRR2O8YSDZ2dxHZpw2jM7tVeWXkyrWjjZsD-p7OcxqNNuTKvuIuc0rT97_DrMTvP4x0mu4npuOrlZEJLkffDBAiHYCWdze4lZy3Lu", + "width": 16 + }, + { + "height": 24, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcS2v39Cz2redomM_MRpcWeiJhMBX_m5LGRTdfDAwCTK4QzDB2BobuJbVoH-8WJEY9HC9AGD_8aAkvtWF1RttXUoKqEM_fP0gN-KW5pZwoxQW_Y6", + "width": 24 + }, + { + "height": 32, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTlqgb71UZeqq_dcaeTvAJI5YIycknY-Cg2QA2i4azpKpGC_yJaFSm_Sw2cLo4-RNsJm1LgjdvKc-wWnXLKar92lk4LIghb7gh9ANUMB8lKJ-ei", + "width": 32 + }, + { + "height": 48, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcQqi8DUu5hiSn7gVFnqeVX4L3yOaeDkX1nBrm6kVJQpOh0KiXS4JU0cwRNNS69xBLmneEfV3UQY3le42pIybD5NyS379fICaVF4IbMIAyv6Q_rc", + "width": 48 + }, + { + "height": 50, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRd9TtySlrjaXAVIsZfXmj0empOjoXNqc2Aps256b0_JsnZ724h6BEonhJTpf_eVw9W6l_Qbt90ItmQ1Jcbxq2E25v3VkK-LqbHHIiGsnE3Aw_Q", + "width": 50 + }, + { + "height": 64, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTHTMDAq2Hs4hfxZEXEcwzDZPaj4rfrYVg1fWtOjh8rxuJH9otHFxcdHnkF4b2FgLcevsS5ER9zQ44eGwAvl9acgr4nJ7dzacmBbePrmmsBYp3v", + "width": 64 + }, + { + "height": 96, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTeQ_-S2rnvk0BggjC8XrCPyrjO65gOQUbMWEdssWSX9DW7hIOyIDp4doSqAxiL-m8p6fN0Omi5jzFFgRHPJY1hX9QEeNuSkRuJywEx9ShQ36e3", + "width": 96 + }, + { + "height": 128, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcTnO-_gki4Z5ygCIP3RMYYrAU6w4lrVxkmDP7swEgbx4u2meFaqAyqNaYpviT67uhMybneJ9PijGCdV3f_1iC-Vsl9FAYUnvR1Umo2fvEmSs0Roaw", + "width": 128 + }, + { + "height": 180, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcQxW1XjlEyK8-xt5dKRJdhaRgFk53NvqEku3cqOLWxMjj0haCp62HCa0udaY1MomzUUn1p2ZfJAFyfGO29eQSDqsyI-ZMSk2_bRsT0LJIuJsbvw4Q", + "width": 180 + }, + { + "height": 256, + "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcRj3IM5Qdg3pgYJHsDzBwxBJOBNLJzkqC2Q11A3iSEC-R7a6tNI56AjXmFzmdJqpCmoJlxurdH91pYZl24ofobMK1zWUNoiQ9jnmjOFV6o6082u2Q", + "width": 256 + } + ] + }, + "link": { + "commandRuns": [ + { + "length": 25, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CAgQobIHGAwiEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa0dlTkt6c0Y3NXZSTGdhNHZ5TmpQbmNvSW12UXxBQ3Jtc0ttNDBjYjZtdnZpWDRXaXJJelB5bXltOXUwSGNFYTNaeFBHYXpqemZZTk9PajhaNnlEcHRwWE5qNGJRNFhhX2t6a1BmbmE2TW5LX0NuUHNrdFA4dXdySDlqR3ZtUXhaMFNRMkN4RDM0RWxaUVpIUXZLdw&q=http%3A%2F%2Fwww.flickr.com%2Fphotos%2Feevblog", + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbFBXOGttUXNPRmdJc3hzT3dfSF9sdTJPUVE3QXxBQ3Jtc0trTG9YeXVnWmp3TnFibEoxeFI5SGdVYWhhOW84ZXBLODA1RlBsNTIzc2dlSUx1ZDVRakZVWk1vbUFrZ0Z3LXJTVEp4bVl5WER1dGVyNnpyNjVFV2dtVDVDdEZVdmxGMGZyLTJUUDZpa1pERU4yLVFOOA&q=http%3A%2F%2Fwww.flickr.com%2Fphotos%2Feevblog", "webPageType": "WEB_PAGE_TYPE_UNKNOWN" } }, "urlEndpoint": { "nofollow": true, "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa0dlTkt6c0Y3NXZSTGdhNHZ5TmpQbmNvSW12UXxBQ3Jtc0ttNDBjYjZtdnZpWDRXaXJJelB5bXltOXUwSGNFYTNaeFBHYXpqemZZTk9PajhaNnlEcHRwWE5qNGJRNFhhX2t6a1BmbmE2TW5LX0NuUHNrdFA4dXdySDlqR3ZtUXhaMFNRMkN4RDM0RWxaUVpIUXZLdw&q=http%3A%2F%2Fwww.flickr.com%2Fphotos%2Feevblog" + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbFBXOGttUXNPRmdJc3hzT3dfSF9sdTJPUVE3QXxBQ3Jtc0trTG9YeXVnWmp3TnFibEoxeFI5SGdVYWhhOW84ZXBLODA1RlBsNTIzc2dlSUx1ZDVRakZVWk1vbUFrZ0Z3LXJTVEp4bVl5WER1dGVyNnpyNjVFV2dtVDVDdEZVdmxGMGZyLTJUUDZpa1pERU4yLVFOOA&q=http%3A%2F%2Fwww.flickr.com%2Fphotos%2Feevblog" } - }, - "title": { - "simpleText": "Flickr" - }, - "trackingParams": "CBsQobIHGAsiEwjQl_Lpj676AhXF6FEKHcpNBwM=" + } }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcTIK5avaVK_PPYPc2I3QDvcmXC-GidHELAcxYo4dfKL8R-W2_Q-InaaYXGbq1PHHBdA9IYwpBXt9jPhUp85jdINIk0Q8Le1oZwpm_2BTK-aVU8W" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CBoQobIHGAwiEwjQl_Lpj676AhXF6FEKHcpNBwM=", + "startIndex": 0 + } + ], + "content": "flickr.com/photos/eevblog" + }, + "title": { + "content": "Flickr" + } + } + }, + { + "channelExternalLinkViewModel": { + "favicon": { + "sources": [ + { + "height": 16, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcTIK5avaVK_PPYPc2I3QDvcmXC-GidHELAcxYo4dfKL8R-W2_Q-InaaYXGbq1PHHBdA9IYwpBXt9jPhUp85jdINIk0Q8Le1oZwpm_2BTK-aVU8W", + "width": 16 + }, + { + "height": 24, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcRisXmS5JlxWqB1cLsKXo9Il5Xhhj2ADOIWBnQiBq62-2vbMLZJSfGWdNId2PA9NseGWv3KGQaQscjLM6WcPxiUnqvGOXKN_llQHlcq1nyb7B0T", + "width": 24 + }, + { + "height": 32, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcTSy_vOUsDY1ZlvopAubkCsRzAxuoSn2FyRmyAjIoECPWF8pwtFEV0A0MwKFSEHS6jg2RKfXgYLCE5H711o9FEeuVCpvGkmx_G9NK--xW_uHkBb", + "width": 32 + }, + { + "height": 48, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcSmBeYG6OxzYEA9IOiHncjPDmVEMLrhzKvJx25CZBOokVcA4qik8JSrkH549lP-BkfWf9P0MKS0Jk9EiggFUhochk7TPyqNepiE0t97W7ovNTOO", + "width": 48 + }, + { + "height": 50, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcSvmdGN1F5Tko_EI9CpOCZ-CiCEdJ2kdnLpUbE4VmZ04VXYrSwJc60GzvPHbIUtTXnSAEhAdVS8LVuuOaARKbPty4jD2b2WztlF7deGtbalbYYU", + "width": 50 + }, + { + "height": 64, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcSj85gBCl8Cmquf6eisb7T_vSTdsfri1KFlK9j6E8cUIflsRyQQm4Jb3iTUkKqypcK87A6c5sJ6CrGSf9wqjJC_6kQbVmVecEPZri5dVBgjphP-", + "width": 64 + }, + { + "height": 96, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcQ-gB2jMcMLJns0XSEF5rzdN35kItedMdWZv5g4D3fGXO9YSxIWlQ1uy1ayhh8IqAG43QfJHKiZIVj69C1oZvEDUqq2dGGtm3ZuGuwUMDU0V_Sa", + "width": 96 + }, + { + "height": 128, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcT5pvRbc9NgaiO1j8Yek_2rEQC38uO5uecILIOWjK12x5HnJpQYHl_mxlOQianqBu_zjQBMm2ld9LSLAQ2jNRkfigUr70riVhrC4l12VTob5tykig", + "width": 128 + }, + { + "height": 180, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcS-NlsldoBndXre9QOxc1sjxWJ-ptM2rh4WEmMks47DJdWLm5-Fc1gyfsCluxFYmE81rBcTz6Jd4XMHRb35XoRXNXpvkSBzFVNEH3uQjqTL7D4ygA", + "width": 180 + }, + { + "height": 256, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcQDKmiwZhX5CAa7Edp7cx02xqj8YteB34PTgNAVVNytBFROEw_9XuVNA1gOLpfJKORRnOpfjqY5MHF9qct0pXl6wEc6GrPNHh9uCk9sidFNUl6tBw", + "width": 256 + } + ] + }, + "link": { + "commandRuns": [ + { + "length": 118, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CAcQobIHGA0iEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa2Ruc0trel90SDR6cDFCdXk3TWRQQ2U2Y3UwQXxBQ3Jtc0tsdFNaUmFwbGF1NktBczd5Q3RIbGdTcDRzOXdWclJYaEp2YmlvNjdOejJfaGk5cktZQ1BiVDNsVHQ0bHFyM213QzRXeUtwZ3NLeTB1WExzZktSTmY1TTBWYnhqNENnY2ZyUTVfS2ZWN0EwRzcyY0xkdw&q=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fredirect.html%3Fie%3DUTF8%26location%3Dhttp%253A%252F%252Fwww.amazon.com%252F%26tag%3Dee04-20%26linkCode%3Dur2%26camp%3D1789%26creative%3D390957", + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbW9Dem5XNVRTeDNYc0JiZXE4OUZDRXU2OEZPQXxBQ3Jtc0trNkR6RWxfYUJUUUU1ZHZaT1NiOVZHaHZRLVRjZmpTdTlzZjhncWtDRWRfNmJJT1RXMS1kQi1aMzNDMHNyQWx0QlpxQk00Mi1YN0h5NE1kZHhsWlZyNFlqTlpkQ3licjB4b0w4RTRDRThBMW9aVkh6Yw&q=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fredirect.html%3Fie%3DUTF8%26location%3Dhttp%253A%252F%252Fwww.amazon.com%252F%26tag%3Dee04-20%26linkCode%3Dur2%26camp%3D1789%26creative%3D390957", "webPageType": "WEB_PAGE_TYPE_UNKNOWN" } }, "urlEndpoint": { "nofollow": true, "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqa2Ruc0trel90SDR6cDFCdXk3TWRQQ2U2Y3UwQXxBQ3Jtc0tsdFNaUmFwbGF1NktBczd5Q3RIbGdTcDRzOXdWclJYaEp2YmlvNjdOejJfaGk5cktZQ1BiVDNsVHQ0bHFyM213QzRXeUtwZ3NLeTB1WExzZktSTmY1TTBWYnhqNENnY2ZyUTVfS2ZWN0EwRzcyY0xkdw&q=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fredirect.html%3Fie%3DUTF8%26location%3Dhttp%253A%252F%252Fwww.amazon.com%252F%26tag%3Dee04-20%26linkCode%3Dur2%26camp%3D1789%26creative%3D390957" + "url": "https://www.youtube.com/redirect?event=channel_description&redir_token=QUFFLUhqbW9Dem5XNVRTeDNYc0JiZXE4OUZDRXU2OEZPQXxBQ3Jtc0trNkR6RWxfYUJUUUU1ZHZaT1NiOVZHaHZRLVRjZmpTdTlzZjhncWtDRWRfNmJJT1RXMS1kQi1aMzNDMHNyQWx0QlpxQk00Mi1YN0h5NE1kZHhsWlZyNFlqTlpkQ3licjB4b0w4RTRDRThBMW9aVkh6Yw&q=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fredirect.html%3Fie%3DUTF8%26location%3Dhttp%253A%252F%252Fwww.amazon.com%252F%26tag%3Dee04-20%26linkCode%3Dur2%26camp%3D1789%26creative%3D390957" } - }, - "title": { - "simpleText": "EEVblog AMAZON Store" - }, - "trackingParams": "CBoQobIHGAwiEwjQl_Lpj676AhXF6FEKHcpNBwM=" + } }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcSeGSb_XctA25lE585p4Y1gzQGccBu6OcsQiaOYtMv9dElpdpPFW4MYRTO7v8N1BcnPcQxrWkcJ7N6BVSj0k5sUwpGD7MI3S-Aiyghi8eF8Zy2_7Q" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CBkQobIHGA0iEwjQl_Lpj676AhXF6FEKHcpNBwM=", + "startIndex": 0 + } + ], + "content": "amazon.com/gp/redirect.html?ie=UTF8&location=http://www.amazon.com/&tag=ee04-20&linkCode=ur2&camp=1789&creative=390957" + }, + "title": { + "content": "EEVblog AMAZON Store" + } + } + }, + { + "channelExternalLinkViewModel": { + "favicon": { + "sources": [ + { + "height": 16, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcSeGSb_XctA25lE585p4Y1gzQGccBu6OcsQiaOYtMv9dElpdpPFW4MYRTO7v8N1BcnPcQxrWkcJ7N6BVSj0k5sUwpGD7MI3S-Aiyghi8eF8Zy2_7Q", + "width": 16 + }, + { + "height": 24, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcQQLBJqOEi7zWd3visSSBE3evcrUHsXyOsKf4FLg-smeevDxkoJP1dvIzL62wLPJNJ36XjjwClKASh1rqiMqOlQD90yHq2iFE7XHT_dL2_5SVglYQ", + "width": 24 + }, + { + "height": 32, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcTIpDkH-J1bfPjmxtW3L3ILo13ECM9jWfnEYH-wqrdBL-hRWzffwxWgaB6kLb6kxSzZ-CD9t7A66POdDIOsX0DVr6_p6RBADn_1-SJE4A73YM91VA", + "width": 32 + }, + { + "height": 48, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcRzc99cQVO6xVjKEdu1y7UE7ht3yMh9XSpPSWUdKDTn-71Lhwv33Q2GrE9Nkacy-1HhbLTE0F5j-E3FV6o-YLUGOVJCdxWxi8A2H31E8M3XCollzQ", + "width": 48 + }, + { + "height": 50, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcQ3A1bUDh4-Rn1SaDBtRVDsNjk91MJdr1-vazJeAQI-GyKaDzuWLm5B5yzey2z1jkDDOHQZlHxa_TRK5EhMffiJQNe_EI3X9oU6DywxpdKm4iVKuw", + "width": 50 + }, + { + "height": 64, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcTcDD9ryu_atYv6cC51QyiLmHXA9skhB2zpqBz_fNfd-er9h-itB-qFqVeM5BpAba7d_l4yKjb5SNm8c9sSSSSaLRhNDnYNmdkze5ALC7A4PqW5ug", + "width": 64 + }, + { + "height": 96, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcRKuF-3mWxkjP0YduQskxF7LUnbHZdcExwkoB7dHGXaw7_nIsB-3YaiLdq2yz3o3p5id6dI9KcPXNIh-8w7UGjapkhHSoaWihSJQXKo9NU7Cyxznw", + "width": 96 + }, + { + "height": 128, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcQ3NBhasd9pD3Uieof1sAMQh7_XHmfuSAsDl5Pi1rSmLYq-dgdXdasEU8oMtlv5SBxYsStFlbyFjF2y9ppnvEVBcxmCRFW8hQvaXtq-2JqF7tiTihs", + "width": 128 + }, + { + "height": 180, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcSRgk_B4Ct3SFPG6Ch7UuUR_AGpMd9AMNoB5Du6lrOzn7wvkWQODs3WeKul2WnmmXeO8v5u0FvL8p9YMYM1t-U6AJ3S6ObPkhes289sYbuxUMTD0Vk", + "width": 180 + }, + { + "height": 256, + "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcRYr9W0zqO0yJyLRQSk8SGuwnZ_38Mc5EAi4s5BAOJEEexIPuUZYhFoUzwMmaUSyRCKmUX_ZUaM8sTGLZEHx4TWsEtCtdw_jEjNItIGHR8dQRZQhYo", + "width": 256 + } + ] + }, + "link": { + "commandRuns": [ + { + "length": 20, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CAYQobIHGA4iEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { "rootVe": 83769, @@ -578,1198 +1179,218 @@ "nofollow": true, "url": "http://www.youtube.com/EEVblog2" } - }, - "title": { - "simpleText": "2nd EEVblog Channel" - }, - "trackingParams": "CBkQobIHGA0iEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - ], - "primaryLinksLabel": { - "runs": [ - { - "text": "Links" } - ] + }, + "startIndex": 0 + } + ], + "content": "youtube.com/EEVblog2" + }, + "title": { + "content": "2nd EEVblog Channel" + } + } + } + ], + "signInForBusinessEmail": { + "commandRuns": [ + { + "length": 7, + "onTap": { + "innertubeCommand": { + "clickTrackingParams": "CAAQhGciEwis363HrqiCAxWfHwYAHc0nDmw=", + "commandMetadata": { + "webCommandMetadata": { + "rootVe": 83769, + "url": "https://accounts.google.com/ServiceLogin?service=youtube&uilel=3&passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Den%26next%3D%252F%2540EEVblog&hl=en", + "webPageType": "WEB_PAGE_TYPE_UNKNOWN" + } }, - "showDescription": true, - "signInForBusinessEmail": { - "runs": [ - { - "navigationEndpoint": { - "clickTrackingParams": "CBgQuy8YACITCNCX8umPrvoCFcXoUQodyk0HAw==", - "commandMetadata": { - "webCommandMetadata": { - "rootVe": 83769, - "url": "https://accounts.google.com/ServiceLogin?service=youtube&uilel=3&passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Den%26next%3D%252Fc%252FEevblogDave%252Fabout&hl=en", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN" - } - }, - "signInEndpoint": { - "nextEndpoint": { - "browseEndpoint": { - "browseId": "UC2DjFE7Xf11URZqWBigcVOQ", - "canonicalBaseUrl": "/c/EevblogDave", - "params": "EgVhYm91dA%3D%3D" - }, - "clickTrackingParams": "CBgQuy8YACITCNCX8umPrvoCFcXoUQodyk0HAw==", + "signInEndpoint": { + "nextEndpoint": { + "browseEndpoint": { + "browseId": "UC2DjFE7Xf11URZqWBigcVOQ", + "canonicalBaseUrl": "/@EEVblog", + "params": "8gYECgIyAA%3D%3D" + }, + "clickTrackingParams": "CAAQhGciEwis363HrqiCAxWfHwYAHc0nDmw=", + "commandMetadata": { + "webCommandMetadata": { + "apiUrl": "/youtubei/v1/browse", + "rootVe": 3611, + "url": "/@EEVblog", + "webPageType": "WEB_PAGE_TYPE_CHANNEL" + } + } + } + } + } + }, + "startIndex": 0 + } + ], + "content": "Sign in to see email address", + "styleRuns": [ + { + "length": 28, + "startIndex": 0 + } + ] + }, + "subscriberCountText": "920K subscribers", + "videoCountText": "1,920 videos", + "viewCountText": "199,087,682 views" + } + }, + "shareChannel": { + "buttonRenderer": { + "accessibilityData": { + "accessibilityData": { + "label": "Share" + } + }, + "command": { + "clickTrackingParams": "CAEQ8FsiEwis363HrqiCAxWfHwYAHc0nDmw=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "actions": [ + { + "clickTrackingParams": "CAEQ8FsiEwis363HrqiCAxWfHwYAHc0nDmw=", + "openPopupAction": { + "popup": { + "menuPopupRenderer": { + "items": [ + { + "menuServiceItemRenderer": { + "command": { + "clickTrackingParams": "CAQQ0rYLGAEiEwis363HrqiCAxWfHwYAHc0nDmw=", "commandMetadata": { "webCommandMetadata": { - "apiUrl": "/youtubei/v1/browse", - "rootVe": 3611, - "url": "/c/EevblogDave/about", - "webPageType": "WEB_PAGE_TYPE_CHANNEL" + "apiUrl": "/youtubei/v1/share/get_share_panel", + "sendPost": true } + }, + "shareEntityServiceEndpoint": { + "commands": [ + { + "clickTrackingParams": "CAQQ0rYLGAEiEwis363HrqiCAxWfHwYAHc0nDmw=", + "openPopupAction": { + "beReused": true, + "popup": { + "unifiedSharePanelRenderer": { + "showLoadingSpinner": true, + "trackingParams": "CAUQjmIiEwis363HrqiCAxWfHwYAHc0nDmw=" + } + }, + "popupType": "DIALOG" + } + } + ], + "serializedShareEntity": "GhhVQzJEakZFN1hmMTFVUlpxV0JpZ2NWT1E%3D" } - } + }, + "text": { + "runs": [ + { + "text": "Share channel" + } + ] + }, + "trackingParams": "CAQQ0rYLGAEiEwis363HrqiCAxWfHwYAHc0nDmw=" } }, - "text": "Sign in" - }, - { - "text": " to see email address" - } - ] + { + "menuServiceItemRenderer": { + "command": { + "clickTrackingParams": "CAIQ07YLGAIiEwis363HrqiCAxWfHwYAHc0nDmw=", + "copyTextEndpoint": { + "successActions": [ + { + "clickTrackingParams": "CAIQ07YLGAIiEwis363HrqiCAxWfHwYAHc0nDmw=", + "commandMetadata": { + "webCommandMetadata": { + "sendPost": true + } + }, + "signalServiceEndpoint": { + "actions": [ + { + "clickTrackingParams": "CAIQ07YLGAIiEwis363HrqiCAxWfHwYAHc0nDmw=", + "openPopupAction": { + "popup": { + "notificationActionRenderer": { + "responseText": { + "runs": [ + { + "text": "Channel ID copied to clipboard" + } + ] + }, + "trackingParams": "CAMQuWoiEwis363HrqiCAxWfHwYAHc0nDmw=" + } + }, + "popupType": "TOAST" + } + } + ], + "signal": "CLIENT_SIGNAL" + } + } + ], + "text": "UC2DjFE7Xf11URZqWBigcVOQ" + } + }, + "text": { + "runs": [ + { + "text": "Copy channel ID" + } + ] + }, + "trackingParams": "CAIQ07YLGAIiEwis363HrqiCAxWfHwYAHc0nDmw=" + } + } + ] + } }, - "statsLabel": { - "runs": [ - { - "text": "Stats" - } - ] - }, - "title": { - "simpleText": "EEVblog" - }, - "viewCountText": { - "simpleText": "186,854,342 views" - } + "popupType": "RESPONSIVE_DROPDOWN" } } ], - "trackingParams": "CBgQuy8YACITCNCX8umPrvoCFcXoUQodyk0HAw==" - } - } - ], - "disablePullToRefresh": true, - "trackingParams": "CBcQui8iEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - "endpoint": { - "browseEndpoint": { - "browseId": "UC2DjFE7Xf11URZqWBigcVOQ", - "canonicalBaseUrl": "/c/EevblogDave", - "params": "EgVhYm91dPIGBAoCEgA%3D" - }, - "clickTrackingParams": "CBYQ8JMBGAsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "apiUrl": "/youtubei/v1/browse", - "rootVe": 3611, - "url": "/c/EevblogDave/about", - "webPageType": "WEB_PAGE_TYPE_CHANNEL" - } - } - }, - "selected": true, - "title": "About", - "trackingParams": "CBYQ8JMBGAsiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - { - "expandableTabRenderer": { - "endpoint": { - "browseEndpoint": { - "browseId": "UC2DjFE7Xf11URZqWBigcVOQ", - "canonicalBaseUrl": "/c/EevblogDave", - "params": "EgZzZWFyY2jyBgQKAloA" - }, - "clickTrackingParams": "CAAQhGciEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "apiUrl": "/youtubei/v1/browse", - "rootVe": 3611, - "url": "/c/EevblogDave/search", - "webPageType": "WEB_PAGE_TYPE_CHANNEL" - } - } - }, - "selected": false, - "title": "Search" - } - } - ] - } - }, - "header": { - "c4TabbedHeaderRenderer": { - "avatar": { - "thumbnails": [ - { - "height": 48, - "url": "https://yt3.ggpht.com/ytc/AMLnZu9eKk4Nd16fX4Rn1TF1G7ReluwOl6M5558FTYAM=s48-c-k-c0x00ffffff-no-rj", - "width": 48 - }, - { - "height": 88, - "url": "https://yt3.ggpht.com/ytc/AMLnZu9eKk4Nd16fX4Rn1TF1G7ReluwOl6M5558FTYAM=s88-c-k-c0x00ffffff-no-rj", - "width": 88 - }, - { - "height": 176, - "url": "https://yt3.ggpht.com/ytc/AMLnZu9eKk4Nd16fX4Rn1TF1G7ReluwOl6M5558FTYAM=s176-c-k-c0x00ffffff-no-rj", - "width": 176 - } - ] - }, - "badges": [ - { - "metadataBadgeRenderer": { - "accessibilityData": { - "label": "Verified" - }, - "icon": { - "iconType": "CHECK_CIRCLE_THICK" - }, - "style": "BADGE_STYLE_TYPE_VERIFIED", - "tooltip": "Verified", - "trackingParams": "CBAQ8DsiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - } - ], - "banner": { - "thumbnails": [ - { - "height": 175, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1060-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj", - "width": 1060 - }, - { - "height": 188, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1138-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj", - "width": 1138 - }, - { - "height": 283, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1707-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj", - "width": 1707 - }, - { - "height": 351, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w2120-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj", - "width": 2120 - }, - { - "height": 377, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w2276-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj", - "width": 2276 - }, - { - "height": 424, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj", - "width": 2560 - } - ] - }, - "channelId": "UC2DjFE7Xf11URZqWBigcVOQ", - "headerLinks": { - "channelHeaderLinksRenderer": { - "primaryLinks": [ - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSeeYHqSanvu-1kS8-j8snFjPciLtknpI1FBXBB6ChDhHFlCRCjevwoP5AOW1u3m9HaeGexWOI4DJeisvRR1YK_jsARgDOrkbO3qWsfWQFxBaEkSQ" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CBAQ8DsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqbUZRdjQ1dHlkMWJjdDRoRHNGcDNBaGpiRTJDZ3xBQ3Jtc0tuSVJrXzlCS2lRRXo0dEozRmx3cXhzY1pKcld5ajBHZmRtNm93TnAwUEs4ZUUtMFE0a3dNQXFHVThGNGwyYW4ycWRGamZXOEstQ0VEUTNReVNuT2hyclVkeXN0WnVBM3RHbzJxaGh2SzhoSzlWUlpDcw&q=http%3A%2F%2Fwww.eevblog.com", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN" - } - }, - "urlEndpoint": { - "nofollow": true, - "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqbUZRdjQ1dHlkMWJjdDRoRHNGcDNBaGpiRTJDZ3xBQ3Jtc0tuSVJrXzlCS2lRRXo0dEozRmx3cXhzY1pKcld5ajBHZmRtNm93TnAwUEs4ZUUtMFE0a3dNQXFHVThGNGwyYW4ycWRGamZXOEstQ0VEUTNReVNuT2hyclVkeXN0WnVBM3RHbzJxaGh2SzhoSzlWUlpDcw&q=http%3A%2F%2Fwww.eevblog.com" - } - }, - "title": { - "simpleText": "EEVblog Web Site" - } - } - ], - "secondaryLinks": [ - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn1.gstatic.com/favicon-tbn?q=tbn:ANd9GcSnyfGgzwnk19b891nCqykpMzr3jlkKm0Z65gNVJbtXsk9-gzW5EiqqEvM02nZyYKmI2x1JQI9OuGsWU69bgq9_rNrHCYrXLP6HqhP9iVwr0bm2IQ" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CBAQ8DsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqbTdwZlF0dFZiNGlBWnRydFNTY2RmaVZRbk9qZ3xBQ3Jtc0trSFRFcnE5bFNTQ0VocEdmNTE5Rks0Yng2WHV1TGR4R01CczM1RndsdjNuTExDUWNDeVc3TXlFMEpEc3ZpYXZTejRaZG1XQUZjd01rN3Q3cWwwcEdCNjNrUE9xc3JZUDZqM1lIUHlBbV9FenhJU1kxUQ&q=http%3A%2F%2Fwww.twitter.com%2Feevblog", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN" - } - }, - "urlEndpoint": { - "nofollow": true, - "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqbTdwZlF0dFZiNGlBWnRydFNTY2RmaVZRbk9qZ3xBQ3Jtc0trSFRFcnE5bFNTQ0VocEdmNTE5Rks0Yng2WHV1TGR4R01CczM1RndsdjNuTExDUWNDeVc3TXlFMEpEc3ZpYXZTejRaZG1XQUZjd01rN3Q3cWwwcEdCNjNrUE9xc3JZUDZqM1lIUHlBbV9FenhJU1kxUQ&q=http%3A%2F%2Fwww.twitter.com%2Feevblog" - } - }, - "title": { - "simpleText": "Twitter" - } - }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn3.gstatic.com/favicon-tbn?q=tbn:ANd9GcRmQS0-yT-68TopCQcxwbvtkTB0rdiUtc7g4WFZBVWFT4tJ8tSTon4n5uCmm9_b69_7bgTNZNmFw3-zyF-kWNXXZJEBTm_-r1qZrKLyDfCYxiEXY50" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CBAQ8DsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqbGtDd3d0T2ltbkxFTVRaT3lBOUtKTHRPaEZTQXxBQ3Jtc0tuR0FkTG5ZOUhrLXhUQjdXU0tWeV95WWZyRzZFcEN6TkVGbU9OSFpETGkyNjU2a2xiS1o3Um5UVEVPWFNKYS00WFBFMTN6aHdmNGZQOTg4V1Z3T00tVG03ZWdyR3dsZ0ZHXzlCRlBQZTdTY2hiNGJBRQ&q=http%3A%2F%2Fwww.facebook.com%2FEEVblog", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN" - } - }, - "urlEndpoint": { - "nofollow": true, - "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqbGtDd3d0T2ltbkxFTVRaT3lBOUtKTHRPaEZTQXxBQ3Jtc0tuR0FkTG5ZOUhrLXhUQjdXU0tWeV95WWZyRzZFcEN6TkVGbU9OSFpETGkyNjU2a2xiS1o3Um5UVEVPWFNKYS00WFBFMTN6aHdmNGZQOTg4V1Z3T00tVG03ZWdyR3dsZ0ZHXzlCRlBQZTdTY2hiNGJBRQ&q=http%3A%2F%2Fwww.facebook.com%2FEEVblog" - } - }, - "title": { - "simpleText": "Facebook" - } - }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn0.gstatic.com/favicon-tbn?q=tbn:ANd9GcRY4no9kYJtEAHXBEY2GDprV__HH1zc94olyS6G6fT5isS71bPyqvIi7-9VE1MMy3_3vsNOQLAerwcSQqGNyADWfxKpd2hLc8HuacZdgEjgZc_WLN8" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CBAQ8DsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "rootVe": 83769, - "url": "https://www.youtube.com/channel/UCkGvUEt8iQLmq3aJIMjT2qQ", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN" - } - }, - "urlEndpoint": { - "nofollow": true, - "url": "https://www.youtube.com/channel/UCkGvUEt8iQLmq3aJIMjT2qQ" - } - }, - "title": { - "simpleText": "EEVdiscover" - } - }, - { - "icon": { - "thumbnails": [ - { - "url": "https://encrypted-tbn2.gstatic.com/favicon-tbn?q=tbn:ANd9GcSeeYHqSanvu-1kS8-j8snFjPciLtknpI1FBXBB6ChDhHFlCRCjevwoP5AOW1u3m9HaeGexWOI4DJeisvRR1YK_jsARgDOrkbO3qWsfWQFxBaEkSQ" - } - ] - }, - "navigationEndpoint": { - "clickTrackingParams": "CBAQ8DsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "rootVe": 83769, - "url": "https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqa3BMOGVzZmd3TzJ0dzdrV0xYdEIyLTZ5a0NXd3xBQ3Jtc0trdHRYRWxaMmxzV0E2Ymw1THp3SDBoRUNhY0ZTeVlCV2t6WWJCckxQc1dwdXlfakRCeFZfa2tLazF0OUtOUmZWemFKYlFjYXV6T0p4VV9xNG1CRFpjcXJnenRneHpMQmhpZHNmRDY4ZExvNWxaQWFWZw&q=http%3A%2F%2Fwww.eevblog.com%2Fforum", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN" - } - }, - "urlEndpoint": { - "nofollow": true, - "target": "TARGET_NEW_WINDOW", - "url": "https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqa3BMOGVzZmd3TzJ0dzdrV0xYdEIyLTZ5a0NXd3xBQ3Jtc0trdHRYRWxaMmxzV0E2Ymw1THp3SDBoRUNhY0ZTeVlCV2t6WWJCckxQc1dwdXlfakRCeFZfa2tLazF0OUtOUmZWemFKYlFjYXV6T0p4VV9xNG1CRFpjcXJnenRneHpMQmhpZHNmRDY4ZExvNWxaQWFWZw&q=http%3A%2F%2Fwww.eevblog.com%2Fforum" - } - }, - "title": { - "simpleText": "The EEVblog Forum" - } - } - ] - } - }, - "mobileBanner": { - "thumbnails": [ - { - "height": 88, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w320-fcrop64=1,32b75a57cd48a5a8-k-c0xffffffff-no-nd-rj", - "width": 320 - }, - { - "height": 175, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w640-fcrop64=1,32b75a57cd48a5a8-k-c0xffffffff-no-nd-rj", - "width": 640 - }, - { - "height": 263, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w960-fcrop64=1,32b75a57cd48a5a8-k-c0xffffffff-no-nd-rj", - "width": 960 - }, - { - "height": 351, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1280-fcrop64=1,32b75a57cd48a5a8-k-c0xffffffff-no-nd-rj", - "width": 1280 - }, - { - "height": 395, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1440-fcrop64=1,32b75a57cd48a5a8-k-c0xffffffff-no-nd-rj", - "width": 1440 - } - ] - }, - "navigationEndpoint": { - "browseEndpoint": { - "browseId": "UC2DjFE7Xf11URZqWBigcVOQ", - "canonicalBaseUrl": "/c/EevblogDave" - }, - "clickTrackingParams": "CBAQ8DsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "apiUrl": "/youtubei/v1/browse", - "rootVe": 3611, - "url": "/c/EevblogDave", - "webPageType": "WEB_PAGE_TYPE_CHANNEL" - } - } - }, - "sponsorButton": { - "buttonRenderer": { - "accessibilityData": { - "accessibilityData": { - "label": "Join this channel" - } - }, - "hint": { - "hintRenderer": { - "dwellTimeMs": "60000", - "hintCap": { - "impressionCap": "1" - }, - "hintId": "sponsor-pre-purchase", - "trackingParams": "CBIQpecFIhMI0Jfy6Y-u-gIVxehRCh3KTQcD" - } - }, - "isDisabled": false, - "navigationEndpoint": { - "clickTrackingParams": "CBEQqGAiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "ignoreNavigation": true - } - }, - "modalEndpoint": { - "modal": { - "modalWithTitleAndButtonRenderer": { - "button": { - "buttonRenderer": { - "isDisabled": false, - "navigationEndpoint": { - "clickTrackingParams": "CBMQ8FsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "rootVe": 83769, - "url": "https://accounts.google.com/ServiceLogin?service=youtube&uilel=3&passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Den%26next%3Dhttps%253A%252F%252Fwww.youtube.com%252Fyoutubei%252Fv1%252Fbrowse%253Fkey%253DAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8%2526prettyPrint%253Dfalse&hl=en", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN" - } - }, - "signInEndpoint": { - "hack": true - } - }, - "size": "SIZE_DEFAULT", - "style": "STYLE_BRAND", - "text": { - "simpleText": "Sign in" - }, - "trackingParams": "CBMQ8FsiEwjQl_Lpj676AhXF6FEKHcpNBwM=" + "signal": "CLIENT_SIGNAL" } }, - "content": { + "icon": { + "iconType": "SHARE" + }, + "size": "SIZE_DEFAULT", + "style": "STYLE_DEFAULT", + "text": { "runs": [ { - "text": "Sign in to become a member." + "text": "Share channel" } ] }, - "title": { - "runs": [ - { - "text": "Want to join this channel?" - } - ] - } + "trackingParams": "CAEQ8FsiEwis363HrqiCAxWfHwYAHc0nDmw=" } } } - }, - "size": "SIZE_DEFAULT", - "style": "STYLE_SUGGESTIVE", - "targetId": "sponsorships-button", - "text": { - "runs": [ - { - "text": "Join" - } - ] - }, - "trackingParams": "CBEQqGAiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - "subscribeButton": { - "buttonRenderer": { - "isDisabled": false, - "navigationEndpoint": { - "clickTrackingParams": "CBQQ8FsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "ignoreNavigation": true - } - }, - "modalEndpoint": { - "modal": { - "modalWithTitleAndButtonRenderer": { - "button": { - "buttonRenderer": { - "isDisabled": false, - "navigationEndpoint": { - "clickTrackingParams": "CBUQ_YYEIhMI0Jfy6Y-u-gIVxehRCh3KTQcDMglzdWJzY3JpYmU=", - "commandMetadata": { - "webCommandMetadata": { - "rootVe": 83769, - "url": "https://accounts.google.com/ServiceLogin?service=youtube&uilel=3&passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Den%26next%3D%252Fc%252FEevblogDave%252Fabout%26continue_action%3DQUFFLUhqbXowa0I5U2RLaG1pZTNLakhsbk1mUXRnODAxUXxBQ3Jtc0tuQXVsdjY1RTMybnVMT1lfNEQtMm5ZVWctZ2Y5dWxzc2RqQzlseHVpOXE3dExXUmI2YUZGalJuZVdZV2VHZjNDMFI5eVVwOHg5R09sSDVfRHA4RFg3YjF5YzBkSE83T0ZMUXZLLUV5X2Y1QklIb2k2TlNaRTlVZXRnSHNqRUN2czg2RGtBZWdSNmRUNy1xZnFhTGx5YkdXR294QU9wdmZYQUE0bTBBLU9hQkp1Smh3STdCYnltSS1ONUZjc3pBazVPNkFsZklmdXJBU19YcXJTVFo1SGhpTFQ5TFJB&hl=en&ec=66429", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN" - } - }, - "signInEndpoint": { - "continueAction": "QUFFLUhqbXowa0I5U2RLaG1pZTNLakhsbk1mUXRnODAxUXxBQ3Jtc0tuQXVsdjY1RTMybnVMT1lfNEQtMm5ZVWctZ2Y5dWxzc2RqQzlseHVpOXE3dExXUmI2YUZGalJuZVdZV2VHZjNDMFI5eVVwOHg5R09sSDVfRHA4RFg3YjF5YzBkSE83T0ZMUXZLLUV5X2Y1QklIb2k2TlNaRTlVZXRnSHNqRUN2czg2RGtBZWdSNmRUNy1xZnFhTGx5YkdXR294QU9wdmZYQUE0bTBBLU9hQkp1Smh3STdCYnltSS1ONUZjc3pBazVPNkFsZklmdXJBU19YcXJTVFo1SGhpTFQ5TFJB", - "idamTag": "66429", - "nextEndpoint": { - "browseEndpoint": { - "browseId": "UC2DjFE7Xf11URZqWBigcVOQ", - "canonicalBaseUrl": "/c/EevblogDave", - "params": "EgVhYm91dA%3D%3D" - }, - "clickTrackingParams": "CBUQ_YYEIhMI0Jfy6Y-u-gIVxehRCh3KTQcD", - "commandMetadata": { - "webCommandMetadata": { - "apiUrl": "/youtubei/v1/browse", - "rootVe": 3611, - "url": "/c/EevblogDave/about", - "webPageType": "WEB_PAGE_TYPE_CHANNEL" - } - } - } - } - }, - "size": "SIZE_DEFAULT", - "style": "STYLE_BLUE_TEXT", - "text": { - "simpleText": "Sign in" - }, - "trackingParams": "CBUQ_YYEIhMI0Jfy6Y-u-gIVxehRCh3KTQcD" - } - }, - "content": { - "simpleText": "Sign in to subscribe to this channel." - }, - "title": { - "simpleText": "Want to subscribe to this channel?" - } - } - } - } - }, - "size": "SIZE_DEFAULT", - "style": "STYLE_DESTRUCTIVE", - "text": { - "runs": [ - { - "text": "Subscribe" - } - ] - }, - "trackingParams": "CBQQ8FsiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - "subscriberCountText": { - "accessibility": { - "accessibilityData": { - "label": "881K subscribers" } - }, - "simpleText": "881K subscribers" + ], + "targetId": "12fccb1f-991a-1fd4-7e2e-a178c39b58d1" }, - "title": "EEVblog", - "trackingParams": "CBAQ8DsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "tvBanner": { - "thumbnails": [ - { - "height": 180, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w320-fcrop64=1,00000000ffffffff-k-c0xffffffff-no-nd-rj", - "width": 320 - }, - { - "height": 480, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w854-fcrop64=1,00000000ffffffff-k-c0xffffffff-no-nd-rj", - "width": 854 - }, - { - "height": 720, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1280-fcrop64=1,00000000ffffffff-k-c0xffffffff-no-nd-rj", - "width": 1280 - }, - { - "height": 1080, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w1920-fcrop64=1,00000000ffffffff-k-c0xffffffff-no-nd-rj", - "width": 1920 - }, - { - "height": 1192, - "url": "https://yt3.ggpht.com/yIJ9ad80n49rK-YUcZLe_8bLmR-aGyg5ybDH_XKIc0GDWrC6s1Wzz8lxnq3_hux_5b6NHPZ9=w2120-fcrop64=1,00000000ffffffff-k-c0xffffffff-no-nd-rj", - "width": 2120 - } - ] - }, - "visitTracking": { - "remarketingPing": "https://www.youtube.com/pagead/viewthroughconversion/962985656/?backend=innertube&cname=1&cver=2_20220921_08_00&foc_id=2DjFE7Xf11URZqWBigcVOQ&label=followon_cvisit&ptype=no_rmkt&utuid=2DjFE7Xf11URZqWBigcVOQ" - } + "clickTrackingParams": "CAAQhGciEwis363HrqiCAxWfHwYAHc0nDmw=" } - }, - "metadata": { - "channelMetadataRenderer": { - "androidAppindexingLink": "android-app://com.google.android.youtube/http/www.youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ", - "androidDeepLink": "android-app://com.google.android.youtube/http/www.youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ", - "availableCountryCodes": [ - "LV", - "IE", - "OM", - "PF", - "IS", - "RS", - "SB", - "TR", - "ML", - "KY", - "TM", - "DK", - "TJ", - "GS", - "BT", - "AF", - "BA", - "HN", - "LC", - "SK", - "ZA", - "MZ", - "CY", - "MY", - "UY", - "GD", - "NC", - "CI", - "CM", - "GI", - "CC", - "QA", - "TV", - "BD", - "LB", - "SS", - "SY", - "MX", - "NL", - "SV", - "LS", - "GW", - "NI", - "VG", - "NP", - "HT", - "UG", - "AS", - "YE", - "KG", - "NO", - "MK", - "RE", - "BQ", - "ES", - "CO", - "CK", - "VE", - "ID", - "AR", - "FJ", - "IL", - "KE", - "UZ", - "GG", - "SA", - "CH", - "PL", - "AT", - "TW", - "BY", - "PW", - "KM", - "DE", - "VI", - "VN", - "MQ", - "PH", - "PS", - "SZ", - "FR", - "JM", - "PE", - "GR", - "NF", - "SI", - "ER", - "AX", - "EG", - "GY", - "CU", - "CZ", - "MN", - "GU", - "BL", - "LY", - "GH", - "SG", - "MU", - "AI", - "GT", - "TF", - "NA", - "SX", - "DM", - "ZM", - "JP", - "GQ", - "MF", - "PN", - "YT", - "PT", - "KN", - "AO", - "ET", - "SM", - "AL", - "BR", - "KZ", - "IQ", - "ZW", - "VU", - "MH", - "GA", - "AW", - "DZ", - "WS", - "KH", - "RW", - "CX", - "LU", - "MT", - "NZ", - "CF", - "SO", - "EH", - "BF", - "IO", - "ME", - "MO", - "PG", - "FK", - "GE", - "SE", - "ST", - "WF", - "BJ", - "HM", - "KP", - "LI", - "BB", - "UM", - "CN", - "SJ", - "BG", - "CD", - "MP", - "DO", - "GM", - "BO", - "NE", - "VA", - "LR", - "BV", - "BI", - "TD", - "CL", - "MS", - "HR", - "KW", - "MA", - "AU", - "AD", - "SD", - "IN", - "IT", - "DJ", - "NU", - "FO", - "KI", - "GN", - "TL", - "BZ", - "VC", - "MC", - "CG", - "EE", - "BS", - "SL", - "HU", - "LT", - "NR", - "AG", - "CR", - "GL", - "LA", - "PY", - "KR", - "MG", - "BW", - "BH", - "PM", - "US", - "FI", - "FM", - "IM", - "GB", - "MW", - "BE", - "BM", - "MR", - "SC", - "NG", - "CW", - "CA", - "TT", - "AE", - "JO", - "AM", - "TH", - "MD", - "CV", - "TZ", - "PR", - "UA", - "SH", - "AQ", - "EC", - "IR", - "LK", - "TO", - "SR", - "TK", - "BN", - "GP", - "MM", - "PA", - "HK", - "SN", - "TN", - "JE", - "PK", - "TC", - "GF", - "TG", - "RO", - "RU", - "MV", - "AZ" - ], - "avatar": { - "thumbnails": [ - { - "height": 900, - "url": "https://yt3.ggpht.com/ytc/AMLnZu9eKk4Nd16fX4Rn1TF1G7ReluwOl6M5558FTYAM=s900-c-k-c0x00ffffff-no-rj", - "width": 900 - } - ] - }, - "channelConversionUrl": "https://www.youtube.com/pagead/viewthroughconversion/962985656/?backend=innertube&cname=1&cver=2_20220921_08_00&foc_id=2DjFE7Xf11URZqWBigcVOQ&label=followon_cvisit&ptype=no_rmkt&utuid=2DjFE7Xf11URZqWBigcVOQ", - "channelUrl": "https://www.youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ", - "description": "NO SCRIPT, NO FEAR, ALL OPINION\nAn off-the-cuff Video Blog about Electronics Engineering, for engineers, hobbyists, enthusiasts, hackers and Makers\nHosted by Dave Jones from Sydney Australia\n\nDONATIONS:\nBitcoin: 3KqyH1U3qrMPnkLufM2oHDU7YB4zVZeFyZ\nEthereum: 0x99ccc4d2654ba40744a1f678d9868ecb15e91206\nPayPal: david@alternatezone.com\n\nPatreon: https://www.patreon.com/eevblog\n\nEEVblog2: http://www.youtube.com/EEVblog2\nEEVdiscover: https://www.youtube.com/channel/UCkGvUEt8iQLmq3aJIMjT2qQ\n\nEMAIL:\nAdvertising/Commercial: eevblog+business@gmail.com\nFan mail: eevblog+fan@gmail.com\nHate Mail: eevblog+hate@gmail.com\n\nI DON'T DO PAID VIDEO SPONSORSHIPS, DON'T ASK!\n\nPLEASE:\nDo NOT ask for personal advice on something, post it in the EEVblog forum.\nI read ALL email, but please don't be offended if I don't have time to reply, I get a LOT of email.\n\nMailbag\nPO Box 7949\nBaulkham Hills NSW 2153\nAUSTRALIA", - "doubleclickTrackingUsername": "EEVblog", - "externalId": "UC2DjFE7Xf11URZqWBigcVOQ", - "facebookProfileId": "EEVblog", - "iosAppindexingLink": "ios-app://544007664/vnd.youtube/www.youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ", - "isFamilySafe": true, - "keywords": "electronics engineering maker hacker design circuit hardware pic atmel oscilloscope multimeter diy hobby review teardown microcontroller arduino video blog tutorial how-to interview rant industry news mailbag \"dumpster diving\" debunking", - "ownerUrls": [ - "http://www.youtube.com/c/EevblogDave" - ], - "rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ", - "title": "EEVblog", - "vanityChannelUrl": "http://www.youtube.com/c/EevblogDave" - } - }, - "microformat": { - "microformatDataRenderer": { - "androidPackage": "com.google.android.youtube", - "appName": "YouTube", - "availableCountries": [ - "LV", - "IE", - "OM", - "PF", - "IS", - "RS", - "SB", - "TR", - "ML", - "KY", - "TM", - "DK", - "TJ", - "GS", - "BT", - "AF", - "BA", - "HN", - "LC", - "SK", - "ZA", - "MZ", - "CY", - "MY", - "UY", - "GD", - "NC", - "CI", - "CM", - "GI", - "CC", - "QA", - "TV", - "BD", - "LB", - "SS", - "SY", - "MX", - "NL", - "SV", - "LS", - "GW", - "NI", - "VG", - "NP", - "HT", - "UG", - "AS", - "YE", - "KG", - "NO", - "MK", - "RE", - "BQ", - "ES", - "CO", - "CK", - "VE", - "ID", - "AR", - "FJ", - "IL", - "KE", - "UZ", - "GG", - "SA", - "CH", - "PL", - "AT", - "TW", - "BY", - "PW", - "KM", - "DE", - "VI", - "VN", - "MQ", - "PH", - "PS", - "SZ", - "FR", - "JM", - "PE", - "GR", - "NF", - "SI", - "ER", - "AX", - "EG", - "GY", - "CU", - "CZ", - "MN", - "GU", - "BL", - "LY", - "GH", - "SG", - "MU", - "AI", - "GT", - "TF", - "NA", - "SX", - "DM", - "ZM", - "JP", - "GQ", - "MF", - "PN", - "YT", - "PT", - "KN", - "AO", - "ET", - "SM", - "AL", - "BR", - "KZ", - "IQ", - "ZW", - "VU", - "MH", - "GA", - "AW", - "DZ", - "WS", - "KH", - "RW", - "CX", - "LU", - "MT", - "NZ", - "CF", - "SO", - "EH", - "BF", - "IO", - "ME", - "MO", - "PG", - "FK", - "GE", - "SE", - "ST", - "WF", - "BJ", - "HM", - "KP", - "LI", - "BB", - "UM", - "CN", - "SJ", - "BG", - "CD", - "MP", - "DO", - "GM", - "BO", - "NE", - "VA", - "LR", - "BV", - "BI", - "TD", - "CL", - "MS", - "HR", - "KW", - "MA", - "AU", - "AD", - "SD", - "IN", - "IT", - "DJ", - "NU", - "FO", - "KI", - "GN", - "TL", - "BZ", - "VC", - "MC", - "CG", - "EE", - "BS", - "SL", - "HU", - "LT", - "NR", - "AG", - "CR", - "GL", - "LA", - "PY", - "KR", - "MG", - "BW", - "BH", - "PM", - "US", - "FI", - "FM", - "IM", - "GB", - "MW", - "BE", - "BM", - "MR", - "SC", - "NG", - "CW", - "CA", - "TT", - "AE", - "JO", - "AM", - "TH", - "MD", - "CV", - "TZ", - "PR", - "UA", - "SH", - "AQ", - "EC", - "IR", - "LK", - "TO", - "SR", - "TK", - "BN", - "GP", - "MM", - "PA", - "HK", - "SN", - "TN", - "JE", - "PK", - "TC", - "GF", - "TG", - "RO", - "RU", - "MV", - "AZ" - ], - "description": "NO SCRIPT, NO FEAR, ALL OPINION An off-the-cuff Video Blog about Electronics Engineering, for engineers, hobbyists, enthusiasts, hackers and Makers Hosted by...", - "familySafe": true, - "iosAppArguments": "https://www.youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ", - "iosAppStoreId": "544007664", - "linkAlternates": [ - { - "hrefUrl": "https://m.youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ" - }, - { - "hrefUrl": "android-app://com.google.android.youtube/http/youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ" - }, - { - "hrefUrl": "ios-app://544007664/http/youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ" - } - ], - "noindex": false, - "ogType": "yt-fb-app:channel", - "schemaDotOrgType": "http://schema.org/http://schema.org/YoutubeChannelV2", - "siteName": "YouTube", - "tags": [ - "electronics", - "engineering", - "maker", - "hacker", - "design", - "circuit", - "hardware", - "pic", - "atmel", - "oscilloscope", - "multimeter", - "diy", - "hobby", - "review", - "teardown", - "microcontroller", - "arduino", - "video", - "blog", - "tutorial", - "how-to", - "interview", - "rant", - "industry", - "news", - "mailbag", - "dumpster diving", - "debunking" - ], - "thumbnail": { - "thumbnails": [ - { - "height": 200, - "url": "https://yt3.ggpht.com/ytc/AMLnZu9eKk4Nd16fX4Rn1TF1G7ReluwOl6M5558FTYAM=s200-c-k-c0x00ffffff-no-rj?days_since_epoch=19259", - "width": 200 - } - ] - }, - "title": "EEVblog", - "twitterCardType": "summary", - "twitterSiteHandle": "@YouTube", - "unlisted": false, - "urlApplinksAndroid": "vnd.youtube://www.youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ?feature=applinks", - "urlApplinksIos": "vnd.youtube://www.youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ?feature=applinks", - "urlApplinksWeb": "https://www.youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ?feature=applinks", - "urlCanonical": "https://www.youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ", - "urlTwitterAndroid": "vnd.youtube://www.youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ?feature=twitter-deep-link", - "urlTwitterIos": "vnd.youtube://www.youtube.com/channel/UC2DjFE7Xf11URZqWBigcVOQ?feature=twitter-deep-link" - } - }, + ], "responseContext": { "mainAppWebResponseContext": { - "loggedOut": true + "loggedOut": true, + "trackingParam": "kx_fmPxhoPZRKSsvcOhozrMdnXbEIEQeDWlsbukh8xl6fBwRgkuswmIBwOcCE59TDtslLKPQ-SS" }, "maxAgeSeconds": 300, "serviceTrackingParams": [ @@ -1777,7 +1398,7 @@ "params": [ { "key": "route", - "value": "channel.about" + "value": "channel.featured" }, { "key": "is_casual", @@ -1791,10 +1412,6 @@ "key": "is_monetization_enabled", "value": "true" }, - { - "key": "num_shelves", - "value": "3" - }, { "key": "is_alc_surface", "value": "false" @@ -1803,13 +1420,17 @@ "key": "browse_id", "value": "UC2DjFE7Xf11URZqWBigcVOQ" }, + { + "key": "browse_id_prefix", + "value": "" + }, { "key": "logged_in", "value": "0" }, { "key": "e", - "value": "1714240,23804281,23858057,23882685,23918597,23934970,23946420,23966208,23983296,23986025,23998056,24001373,24002022,24002025,24004644,24007246,24034168,24036947,24077241,24080738,24120820,24135310,24140247,24152442,24160837,24161116,24164186,24166867,24169501,24175559,24181174,24185614,24187043,24187377,24191629,24197275,24199724,24199774,24211178,24211242,24219713,24225483,24226335,24227844,24228637,24229161,24238596,24241378,24243988,24246430,24248385,24249085,24254502,24255165,24255543,24255545,24260441,24260783,24260844,24262346,24263796,24264860,24265820,24267564,24267570,24268142,24268870,24268936,24272785,24275322,24276632,24277923,24277989,24278489,24280256,24280303,24281190,24283093,24283281,24286003,24286010,24286017,24286396,24287795,24288047,24289901,24290131,24290276,24292296,24292715,24293107,39322278,39322357,39322382,39322386,39322399,39322456,45686551" + "value": "23804281,23885487,23943577,23946420,23966208,23983296,23986028,23998056,24004644,24007246,24034168,24036947,24077241,24080738,24120820,24135310,24140247,24166867,24181174,24187377,24241378,24255543,24255545,24288664,24290971,24291857,24363609,24367579,24371398,24371778,24373396,24377598,24377909,24379354,24382552,24385612,24387949,24390675,24428788,24439361,24451319,24453989,24458317,24458324,24458329,24458839,24463872,24468724,24485421,24499532,24506515,24506784,24515423,24517093,24518452,24524098,24526515,24526642,24526774,24526787,24526794,24526801,24526808,24526813,24526827,24528463,24528466,24528473,24528484,24528552,24528555,24528577,24528582,24528644,24528647,24528661,24528668,24531224,24531253,24537200,24539025,24540881,24541326,24541656,24542367,24542452,24543193,24543197,24543200,24543201,24546059,24546074,24547317,24548138,24548627,24548629,24548853,24549786,24550285,24550458,24559327,24559697,24560416,24561140,24561152,24561208,24561384,24563746,24564171,24566293,24566687,24569887,24585907,24586420,24586688,24588590,24589493,24694842,24696752,24697068,24698453,24699899,39324156,39324184,39324567,51000798,51003636,51004018,51006181,51009757,51009781,51009900,51009906,51010235,51010280,51011488,51011905,51012165,51012291,51012659,51014091,51016856,51017346,51017996,51019442,51019626,51020302,51020570,51021953,51022241,51024038,51025415,51025833,51027535,51027643,51027868,51027870,51028271,51030101,51030171,51030311,51030435,51030450,51031341,51031412,51032492,51033399,51033577,51034525,51035525,51035565,51036438,51036511,51036737,51037342,51037351,51037540,51038399,51038805,51040336,51040338,51040349,51040471,51041282,51041340,51041497,51041809,51042251,51043057,51043768,51043940,51044608,51044641,51045016,51045969,51046900,51046954,51047726,51048254,51048488,51049895,51051696,51052749,51053019,51053957,51054569" } ], "service": "GFEEDBACK" @@ -1819,6 +1440,10 @@ { "key": "browse_id", "value": "UC2DjFE7Xf11URZqWBigcVOQ" + }, + { + "key": "browse_id_prefix", + "value": "" } ], "service": "GOOGLE_HELP" @@ -1831,7 +1456,7 @@ }, { "key": "cver", - "value": "2.20220921.08.00" + "value": "2.20231101.05.00" }, { "key": "yt_li", @@ -1839,7 +1464,7 @@ }, { "key": "GetChannelPage_rid", - "value": "0xaada99e22093f27c" + "value": "0x1a5719f152afa89c" } ], "service": "CSI" @@ -1857,7 +1482,7 @@ "params": [ { "key": "client.version", - "value": "2.20220921" + "value": "2.20231101" }, { "key": "client.name", @@ -1865,868 +1490,16 @@ }, { "key": "client.fexp", - "value": "23966208,24140247,24272785,24286010,24161116,24286017,23983296,24267570,39322456,24226335,24268936,24286396,23882685,24243988,24277989,24255543,1714240,39322386,24280303,24185614,24283281,24199724,24036947,24268142,24187377,24260441,24290276,24248385,39322382,24120820,24293107,24211242,23858057,24169501,39322399,24219713,24002022,24080738,39322357,24225483,24249085,24199774,24265820,23918597,45686551,24260844,24254502,24246430,24255545,24077241,24175559,24290131,23946420,23804281,24001373,24152442,24276632,24197275,24181174,24228637,24280256,24034168,24275322,24160837,24238596,24281190,24292715,24002025,24262346,24166867,24283093,24227844,24287795,24278489,24255165,24263796,24267564,24264860,24191629,24292296,24260783,24229161,24241378,24187043,23986025,24164186,39322278,23934970,24007246,24277923,23998056,24135310,24288047,24004644,24211178,24286003,24268870,24289901" + "value": "24549786,51048488,24546074,24517093,51010280,51031412,51040349,24528644,51041809,24564171,51009906,51044641,51040471,24561208,24181174,51025415,24546059,51004018,24547317,24288664,51011488,24566687,24543197,51014091,51034525,24540881,24034168,51027535,51047726,51030311,51011905,24563746,51037351,24559697,24371398,24166867,51027643,51036438,24077241,24291857,24694842,51017996,24560416,24569887,51012659,24382552,24515423,51035525,23804281,24120820,24004644,24528552,24528473,51020570,24390675,51006181,51019442,24379354,24528466,24458839,51009757,51041282,24697068,24241378,24255545,23986028,51035565,24140247,51053019,51030101,24566293,24586688,24550285,24428788,24696752,24526813,24539025,24541326,24528668,24589493,24528661,24290971,24528582,51003636,24550458,51037342,24458329,51024038,24080738,24526827,51038399,51051696,51046900,24377598,24528647,24561152,23966208,51041340,24541656,51009900,51045016,51012165,24561140,24542367,24526794,23943577,24543201,51042251,51027870,24548629,24526801,24506784,24526808,24363609,39324184,24586420,51021953,51043940,51048254,24561384,51022241,51040338,24543193,24526642,23983296,24485421,24463872,24528555,51030171,51016856,24036947,51041497,23998056,24377909,24458317,51033399,24528577,51036737,51043057,24458324,24542452,24543200,24367579,24548853,24559327,39324156,24548627,24373396,24451319,24371778,24528484,24439361,51053957,24548138,51045969,24585907,51000798,24526515,51010235,24526774,51028271,51044608,24698453,24531253,24385612,39324567,51040336,51036511,51017346,51054569,23885487,24531224,24387949,51038805,24187377,51030450,51032492,51037540,51031341,24007246,24528463,51030435,24699899,24524098,51012291,51020302,51009781,51043768,51049895,51019626,24499532,24506515,23946420,51027868,24255543,24135310,24588590,24453989,51025833,51033577,51046954,24468724,24537200,51052749,24518452,24526787" } ], "service": "ECATCHER" } ], - "visitorData": "CgszMUUzZDlGLWxiRSipqr2ZBg%3D%3D", + "visitorData": "CgthaDFMbWFGWHhoUSiI3pSqBjIICgJERRICEgA%3D", "webResponseContextExtensionData": { "hasDecorated": true } }, - "topbar": { - "desktopTopbarRenderer": { - "a11ySkipNavigationButton": { - "buttonRenderer": { - "command": { - "clickTrackingParams": "CAUQ8FsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "sendPost": true - } - }, - "signalServiceEndpoint": { - "actions": [ - { - "clickTrackingParams": "CAUQ8FsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "signalAction": { - "signal": "SKIP_NAVIGATION" - } - } - ], - "signal": "CLIENT_SIGNAL" - } - }, - "isDisabled": false, - "size": "SIZE_DEFAULT", - "style": "STYLE_DEFAULT", - "text": { - "runs": [ - { - "text": "Skip navigation" - } - ] - }, - "trackingParams": "CAUQ8FsiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - "backButton": { - "buttonRenderer": { - "command": { - "clickTrackingParams": "CAcQvIYDIhMI0Jfy6Y-u-gIVxehRCh3KTQcD", - "commandMetadata": { - "webCommandMetadata": { - "sendPost": true - } - }, - "signalServiceEndpoint": { - "actions": [ - { - "clickTrackingParams": "CAcQvIYDIhMI0Jfy6Y-u-gIVxehRCh3KTQcD", - "signalAction": { - "signal": "HISTORY_BACK" - } - } - ], - "signal": "CLIENT_SIGNAL" - } - }, - "trackingParams": "CAcQvIYDIhMI0Jfy6Y-u-gIVxehRCh3KTQcD" - } - }, - "forwardButton": { - "buttonRenderer": { - "command": { - "clickTrackingParams": "CAYQvYYDIhMI0Jfy6Y-u-gIVxehRCh3KTQcD", - "commandMetadata": { - "webCommandMetadata": { - "sendPost": true - } - }, - "signalServiceEndpoint": { - "actions": [ - { - "clickTrackingParams": "CAYQvYYDIhMI0Jfy6Y-u-gIVxehRCh3KTQcD", - "signalAction": { - "signal": "HISTORY_FORWARD" - } - } - ], - "signal": "CLIENT_SIGNAL" - } - }, - "trackingParams": "CAYQvYYDIhMI0Jfy6Y-u-gIVxehRCh3KTQcD" - } - }, - "hotkeyDialog": { - "hotkeyDialogRenderer": { - "dismissButton": { - "buttonRenderer": { - "isDisabled": false, - "size": "SIZE_DEFAULT", - "style": "STYLE_BLUE_TEXT", - "text": { - "runs": [ - { - "text": "Dismiss" - } - ] - }, - "trackingParams": "CAkQ8FsiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - "sections": [ - { - "hotkeyDialogSectionRenderer": { - "options": [ - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "k", - "label": { - "runs": [ - { - "text": "Toggle play/pause" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "j", - "label": { - "runs": [ - { - "text": "Rewind 10 seconds" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "l", - "label": { - "runs": [ - { - "text": "Fast forward 10 seconds" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "P (SHIFT+p)", - "label": { - "runs": [ - { - "text": "Previous video" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "N (SHIFT+n)", - "label": { - "runs": [ - { - "text": "Next video" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": ",", - "hotkeyAccessibilityLabel": { - "accessibilityData": { - "label": "Comma" - } - }, - "label": { - "runs": [ - { - "text": "Previous frame (while paused)" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": ".", - "hotkeyAccessibilityLabel": { - "accessibilityData": { - "label": "Period" - } - }, - "label": { - "runs": [ - { - "text": "Next frame (while paused)" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "< (SHIFT+,)", - "hotkeyAccessibilityLabel": { - "accessibilityData": { - "label": "Less than or SHIFT + comma" - } - }, - "label": { - "runs": [ - { - "text": "Decrease playback rate" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "> (SHIFT+.)", - "hotkeyAccessibilityLabel": { - "accessibilityData": { - "label": "Greater than or SHIFT + period" - } - }, - "label": { - "runs": [ - { - "text": "Increase playback rate" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "0..9", - "label": { - "runs": [ - { - "text": "Seek to specific point in the video (7 advances to 70% of duration)" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "CONTROL + ←", - "label": { - "runs": [ - { - "text": "Seek to previous chapter" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "CONTROL + →", - "label": { - "runs": [ - { - "text": "Seek to next chapter" - } - ] - } - } - } - ], - "title": { - "runs": [ - { - "text": "Playback" - } - ] - } - } - }, - { - "hotkeyDialogSectionRenderer": { - "options": [ - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "f", - "label": { - "runs": [ - { - "text": "Toggle full screen" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "t", - "label": { - "runs": [ - { - "text": "Toggle theater mode" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "i", - "label": { - "runs": [ - { - "text": "Toggle miniplayer" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "ESCAPE", - "label": { - "runs": [ - { - "text": "Close miniplayer or current dialog" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "m", - "label": { - "runs": [ - { - "text": "Toggle mute" - } - ] - } - } - } - ], - "title": { - "runs": [ - { - "text": "General" - } - ] - } - } - }, - { - "hotkeyDialogSectionRenderer": { - "options": [ - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "c", - "label": { - "runs": [ - { - "text": "If the video supports captions, toggle captions ON/OFF" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "o", - "label": { - "runs": [ - { - "text": "Rotate through different text opacity levels" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "w", - "label": { - "runs": [ - { - "text": "Rotate through different window opacity levels" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "+", - "label": { - "runs": [ - { - "text": "Rotate through font sizes (increasing)" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "-", - "hotkeyAccessibilityLabel": { - "accessibilityData": { - "label": "Minus" - } - }, - "label": { - "runs": [ - { - "text": "Rotate through font sizes (decreasing)" - } - ] - } - } - } - ], - "title": { - "runs": [ - { - "text": "Subtitles and closed captions" - } - ] - } - } - }, - { - "hotkeyDialogSectionRenderer": { - "options": [ - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "w", - "label": { - "runs": [ - { - "text": "Pan up" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "a", - "label": { - "runs": [ - { - "text": "Pan left" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "s", - "label": { - "runs": [ - { - "text": "Pan down" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "d", - "label": { - "runs": [ - { - "text": "Pan right" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "+ on numpad or ]", - "hotkeyAccessibilityLabel": { - "accessibilityData": { - "label": "Plus on number pad or right bracket" - } - }, - "label": { - "runs": [ - { - "text": "Zoom in" - } - ] - } - } - }, - { - "hotkeyDialogSectionOptionRenderer": { - "hotkey": "- on numpad or [", - "hotkeyAccessibilityLabel": { - "accessibilityData": { - "label": "Minus on number pad or left bracket" - } - }, - "label": { - "runs": [ - { - "text": "Zoom out" - } - ] - } - } - } - ], - "title": { - "runs": [ - { - "text": "Spherical Videos" - } - ] - } - } - } - ], - "title": { - "runs": [ - { - "text": "Keyboard shortcuts" - } - ] - }, - "trackingParams": "CAgQteYDIhMI0Jfy6Y-u-gIVxehRCh3KTQcD" - } - }, - "logo": { - "topbarLogoRenderer": { - "endpoint": { - "browseEndpoint": { - "browseId": "FEwhat_to_watch" - }, - "clickTrackingParams": "CA8QsV4iEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "apiUrl": "/youtubei/v1/browse", - "rootVe": 3854, - "url": "/", - "webPageType": "WEB_PAGE_TYPE_BROWSE" - } - } - }, - "iconImage": { - "iconType": "YOUTUBE_LOGO" - }, - "overrideEntityKey": "EgZ0b3BiYXIg9QEoAQ%3D%3D", - "tooltipText": { - "runs": [ - { - "text": "YouTube Home" - } - ] - }, - "trackingParams": "CA8QsV4iEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - "searchbox": { - "fusionSearchboxRenderer": { - "clearButton": { - "buttonRenderer": { - "accessibilityData": { - "accessibilityData": { - "label": "Clear search query" - } - }, - "icon": { - "iconType": "CLOSE" - }, - "isDisabled": false, - "size": "SIZE_DEFAULT", - "style": "STYLE_DEFAULT", - "trackingParams": "CA4Q8FsiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - "config": { - "webSearchboxConfig": { - "focusSearchbox": true, - "hasOnscreenKeyboard": false, - "requestDomain": "us", - "requestLanguage": "en" - } - }, - "icon": { - "iconType": "SEARCH" - }, - "placeholderText": { - "runs": [ - { - "text": "Search" - } - ] - }, - "searchEndpoint": { - "clickTrackingParams": "CA0Q7VAiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "rootVe": 4724, - "url": "/results?search_query=", - "webPageType": "WEB_PAGE_TYPE_SEARCH" - } - }, - "searchEndpoint": { - "query": "" - } - }, - "trackingParams": "CA0Q7VAiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - "topbarButtons": [ - { - "topbarMenuButtonRenderer": { - "accessibility": { - "accessibilityData": { - "label": "Settings" - } - }, - "icon": { - "iconType": "MORE_VERT" - }, - "menuRequest": { - "clickTrackingParams": "CAsQ_qsBGAAiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "apiUrl": "/youtubei/v1/account/account_menu", - "sendPost": true - } - }, - "signalServiceEndpoint": { - "actions": [ - { - "clickTrackingParams": "CAsQ_qsBGAAiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "openPopupAction": { - "beReused": true, - "popup": { - "multiPageMenuRenderer": { - "showLoadingSpinner": true, - "style": "MULTI_PAGE_MENU_STYLE_TYPE_SYSTEM", - "trackingParams": "CAwQ_6sBIhMI0Jfy6Y-u-gIVxehRCh3KTQcD" - } - }, - "popupType": "DROPDOWN" - } - } - ], - "signal": "GET_ACCOUNT_MENU" - } - }, - "style": "STYLE_DEFAULT", - "tooltip": "Settings", - "trackingParams": "CAsQ_qsBGAAiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - { - "buttonRenderer": { - "icon": { - "iconType": "AVATAR_LOGGED_OUT" - }, - "navigationEndpoint": { - "clickTrackingParams": "CAoQ1IAEGAEiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "rootVe": 83769, - "url": "https://accounts.google.com/ServiceLogin?service=youtube&uilel=3&passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Den%26next%3Dhttps%253A%252F%252Fwww.youtube.com%252Fyoutubei%252Fv1%252Fbrowse%253Fkey%253DAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8%2526prettyPrint%253Dfalse&hl=en&ec=65620", - "webPageType": "WEB_PAGE_TYPE_UNKNOWN" - } - }, - "signInEndpoint": { - "idamTag": "65620" - } - }, - "size": "SIZE_SMALL", - "style": "STYLE_SUGGESTIVE", - "targetId": "topbar-signin", - "text": { - "runs": [ - { - "text": "Sign in" - } - ] - }, - "trackingParams": "CAoQ1IAEGAEiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - } - ], - "trackingParams": "CAEQq6wBIhMI0Jfy6Y-u-gIVxehRCh3KTQcD", - "voiceSearchButton": { - "buttonRenderer": { - "accessibilityData": { - "accessibilityData": { - "label": "Search with your voice" - } - }, - "icon": { - "iconType": "MICROPHONE_ON" - }, - "isDisabled": false, - "serviceEndpoint": { - "clickTrackingParams": "CAIQ8FsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "commandMetadata": { - "webCommandMetadata": { - "sendPost": true - } - }, - "signalServiceEndpoint": { - "actions": [ - { - "clickTrackingParams": "CAIQ8FsiEwjQl_Lpj676AhXF6FEKHcpNBwM=", - "openPopupAction": { - "popup": { - "voiceSearchDialogRenderer": { - "connectionErrorHeader": { - "runs": [ - { - "text": "No connection" - } - ] - }, - "connectionErrorMicrophoneLabel": { - "runs": [ - { - "text": "Check your connection and try again" - } - ] - }, - "disabledHeader": { - "runs": [ - { - "text": "Search with your voice" - } - ] - }, - "disabledSubtext": { - "runs": [ - { - "text": "To search by voice, go to your browser settings and allow access to microphone" - } - ] - }, - "exampleQuery1": { - "runs": [ - { - "text": "\"Play Dua Lipa\"" - } - ] - }, - "exampleQuery2": { - "runs": [ - { - "text": "\"Show me my subscriptions\"" - } - ] - }, - "exitButton": { - "buttonRenderer": { - "accessibilityData": { - "accessibilityData": { - "label": "Cancel" - } - }, - "icon": { - "iconType": "CLOSE" - }, - "isDisabled": false, - "size": "SIZE_DEFAULT", - "style": "STYLE_DEFAULT", - "trackingParams": "CAQQ8FsiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - }, - "loadingHeader": { - "runs": [ - { - "text": "Working..." - } - ] - }, - "microphoneButtonAriaLabel": { - "runs": [ - { - "text": "Cancel" - } - ] - }, - "microphoneOffPromptHeader": { - "runs": [ - { - "text": "Microphone off. Try again." - } - ] - }, - "permissionsHeader": { - "runs": [ - { - "text": "Waiting for permission" - } - ] - }, - "permissionsSubtext": { - "runs": [ - { - "text": "Allow microphone access to search with voice" - } - ] - }, - "placeholderHeader": { - "runs": [ - { - "text": "Listening..." - } - ] - }, - "promptHeader": { - "runs": [ - { - "text": "Didn't hear that. Try again." - } - ] - }, - "promptMicrophoneLabel": { - "runs": [ - { - "text": "Tap microphone to try again" - } - ] - }, - "trackingParams": "CAMQ7q8FIhMI0Jfy6Y-u-gIVxehRCh3KTQcD" - } - }, - "popupType": "TOP_ALIGNED_DIALOG" - } - } - ], - "signal": "CLIENT_SIGNAL" - } - }, - "size": "SIZE_DEFAULT", - "style": "STYLE_DEFAULT", - "tooltip": "Search with your voice", - "trackingParams": "CAIQ8FsiEwjQl_Lpj676AhXF6FEKHcpNBwM=" - } - } - } - }, - "trackingParams": "CAAQhGciEwjQl_Lpj676AhXF6FEKHcpNBwM=" + "trackingParams": "CAAQhGciEwis363HrqiCAxWfHwYAHc0nDmw=" } diff --git a/tests/youtube.rs b/tests/youtube.rs index 4307278..687c010 100644 --- a/tests/youtube.rs +++ b/tests/youtube.rs @@ -39,7 +39,10 @@ fn get_player_from_client(#[case] client_type: ClientType, rp: RustyPipe) { // dbg!(&player_data); assert_eq!(player_data.details.id, "n4tK7LYFxI0"); - assert_eq!(player_data.details.name, "Spektrem - Shine [NCS Release]"); + assert_eq!( + player_data.details.name, + "Spektrem - Shine | Progressive House | NCS - Copyright Free Music" + ); if client_type == ClientType::DesktopMusic { assert!(player_data.details.description.is_none()); } else { @@ -68,9 +71,9 @@ fn get_player_from_client(#[case] client_type: ClientType, rp: RustyPipe) { .unwrap(); // Bitrates may change between requests - assert_approx(f64::from(video.bitrate), 1_507_068.0); - assert_eq!(video.average_bitrate, 1_345_149); - assert_eq!(video.size.unwrap(), 43_553_412); + assert_approx(f64::from(video.bitrate), 1_851_854.0); + assert_eq!(video.average_bitrate, 923_766); + assert_eq!(video.size.unwrap(), 29_909_835); assert_eq!(video.width, 1280); assert_eq!(video.height, 720); assert_eq!(video.fps, 30); @@ -102,8 +105,8 @@ fn get_player_from_client(#[case] client_type: ClientType, rp: RustyPipe) { .expect("audio stream not found"); assert_approx(f64::from(video.bitrate), 1_340_829.0); - assert_approx(f64::from(video.average_bitrate), 1_233_444.0); - assert_approx(video.size.unwrap() as f64, 39_936_630.0); + assert_approx(f64::from(video.average_bitrate), 1_046_557.0); + assert_approx(video.size.unwrap() as f64, 33_885_572.0); assert_eq!(video.width, 1280); assert_eq!(video.height, 720); assert_eq!(video.fps, 30); @@ -856,22 +859,15 @@ fn channel_playlists(rp: RustyPipe) { #[rstest] fn channel_info(rp: RustyPipe) { - let channel = - tokio_test::block_on(rp.query().channel_info("UC2DjFE7Xf11URZqWBigcVOQ")).unwrap(); + let info = tokio_test::block_on(rp.query().channel_info("UC2DjFE7Xf11URZqWBigcVOQ")).unwrap(); - // dbg!(&channel); - assert_channel_eevblog(&channel); + assert_eq!(info.create_date.unwrap(), date!(2009 - 4 - 4)); + assert_gte(info.view_count.unwrap(), 186_854_340, "channel views"); + assert_gte(info.video_count.unwrap(), 1920, "channel videos"); + assert_gte(info.subscriber_count.unwrap(), 920_000, "subscribers"); + assert_eq!(info.country.unwrap(), Country::Au); - let created = channel.content.create_date.unwrap(); - assert_eq!(created, date!(2009 - 4 - 4)); - - assert_gte( - channel.content.view_count.unwrap(), - 186_854_340, - "channel views", - ); - - insta::assert_ron_snapshot!(channel.content.links, @r###" + insta::assert_ron_snapshot!(info.links, @r###" [ ("EEVblog Web Site", "http://www.eevblog.com/"), ("Twitter", "http://www.twitter.com/eevblog"), @@ -967,8 +963,8 @@ fn channel_more( ); } - let channel_info = tokio_test::block_on(rp.query().channel_info(&id)).unwrap(); - assert_channel(&channel_info, id, name, unlocalized || name_unlocalized); + let info = tokio_test::block_on(rp.query().channel_info(&id)).unwrap(); + assert_eq!(info.id, id); } #[rstest] @@ -2447,8 +2443,8 @@ fn assert_frameset(frameset: &Frameset) { assert_gte(frameset.frame_height, 20, "frame width"); assert_gte(frameset.page_count, 1, "page count"); assert_gte(frameset.total_count, 50, "total count"); - assert_gte(frameset.frames_per_page_x, 5, "frames per page x"); - assert_gte(frameset.frames_per_page_y, 5, "frames per page y"); + assert_gte(frameset.frames_per_page_x, 3, "frames per page x"); + assert_gte(frameset.frames_per_page_y, 3, "frames per page y"); let n = frameset.urls().count() as u32; assert_eq!(n, frameset.page_count);