From 8b07894a94428936b2d9d626b2a39336e762817c Mon Sep 17 00:00:00 2001 From: Nick Dowsett Date: Fri, 28 Jun 2024 17:52:15 +0800 Subject: [PATCH 1/8] chore: Update PKGBUILD and README location --- PKGBUILD | 2 +- youtui/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/PKGBUILD b/PKGBUILD index 3b98bffe..21b06a0d 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,7 +1,7 @@ # Maintainer: Nick Dowsett pkgname=youtui -pkgver=0.0.4 +pkgver=0.0.5 pkgrel=1 pkgdesc="A simple TUI YouTube Music player written in Rust aiming to implement an Artist->Albums workflow for searching for music, and using discoverability principles for navigation. Writtten in Rust." url="https://github.com/nick42d/youtui" diff --git a/youtui/Cargo.toml b/youtui/Cargo.toml index ff42fecd..9cc11b46 100644 --- a/youtui/Cargo.toml +++ b/youtui/Cargo.toml @@ -7,7 +7,7 @@ license = "MIT" description = "A simple TUI YouTube Music player" homepage = "https://github.com/nick42d/youtui" repository = "https://github.com/nick42d/youtui" -readme = "README.md" +readme = "../README.md" keywords = ["youtube", "music", "player", "tui"] categories = ["multimedia::audio"] # Required for async trait support From 2381e09d39449c16719340e6d5099ac2e0edc36e Mon Sep 17 00:00:00 2001 From: Nick Dowsett Date: Sun, 30 Jun 2024 21:41:43 +0800 Subject: [PATCH 2/8] Implement skeleton queries and parsing tests. Make impl_youtube_id private, and implement macro for parsing tests --- ytmapi-rs/src/common.rs | 2 +- ytmapi-rs/src/lib.rs | 30 +++++++- ytmapi-rs/src/parse/library.rs | 74 ++++++++++++++++++- ytmapi-rs/src/query/library.rs | 128 +++++++++++++++++++++++++-------- ytmapi-rs/src/utils.rs | 21 +++++- 5 files changed, 219 insertions(+), 36 deletions(-) diff --git a/ytmapi-rs/src/common.rs b/ytmapi-rs/src/common.rs index 45fa59e9..82d395b7 100644 --- a/ytmapi-rs/src/common.rs +++ b/ytmapi-rs/src/common.rs @@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize}; use std::borrow::Cow; -use crate::{impl_youtube_id, Error}; +use crate::Error; /// A search suggestion containing a list of TextRuns. /// May be a history suggestion. diff --git a/ytmapi-rs/src/lib.rs b/ytmapi-rs/src/lib.rs index 84469f10..24fae00a 100644 --- a/ytmapi-rs/src/lib.rs +++ b/ytmapi-rs/src/lib.rs @@ -70,14 +70,16 @@ use query::{ watch::GetWatchPlaylistQuery, AddPlaylistItemsQuery, AddVideosToPlaylist, BasicSearch, CreatePlaylistQuery, CreatePlaylistType, DeletePlaylistQuery, EditPlaylistQuery, GetAlbumQuery, - GetArtistAlbumsQuery, GetArtistQuery, GetLibraryArtistsQuery, GetLibraryPlaylistsQuery, - GetPlaylistQuery, GetSearchSuggestionsQuery, Query, RemovePlaylistItemsQuery, SearchQuery, + GetArtistAlbumsQuery, GetArtistQuery, GetLibraryAlbumsQuery, GetLibraryArtistsQuery, + GetLibraryPlaylistsQuery, GetLibrarySongsQuery, GetLibrarySubscriptionsQuery, GetPlaylistQuery, + GetSearchSuggestionsQuery, Query, RemovePlaylistItemsQuery, SearchQuery, }; use reqwest::Client; use std::path::Path; // TODO: Confirm if auth should be pub pub mod auth; +#[macro_use] mod utils; mod locales {} mod nav_consts; @@ -309,6 +311,30 @@ impl YtMusic { ) -> Result> { query.call(self).await } + pub async fn get_library_songs(&self, query: GetLibrarySongsQuery) { + query.call(self).await + } + pub async fn get_library_albums(&self, query: GetLibraryAlbumsQuery) { + query.call(self).await + } + pub async fn get_library_subscriptions(&self, query: GetLibrarySubscriptionsQuery) { + query.call(self).await + } + pub async fn get_history() { + todo!() + } + pub async fn add_history_item() { + todo!() + } + pub async fn remove_history_item() { + todo!() + } + pub async fn rate_song() { + todo!() + } + pub async fn rate_playlist() { + todo!() + } pub async fn delete_playlist<'a, Q: Into>>( &self, query: Q, diff --git a/ytmapi-rs/src/parse/library.rs b/ytmapi-rs/src/parse/library.rs index 84b9d859..07dfed88 100644 --- a/ytmapi-rs/src/parse/library.rs +++ b/ytmapi-rs/src/parse/library.rs @@ -6,10 +6,43 @@ use crate::nav_consts::{ GRID, ITEM_SECTION, MRLIR, MTRIR, MUSIC_SHELF, NAVIGATION_BROWSE_ID, SECTION_LIST, SECTION_LIST_ITEM, SINGLE_COLUMN_TAB, THUMBNAIL_RENDERER, TITLE, TITLE_TEXT, }; -use crate::query::{GetLibraryArtistsQuery, GetLibraryPlaylistsQuery}; +use crate::query::{ + GetLibraryAlbumsQuery, GetLibraryArtistsQuery, GetLibraryPlaylistsQuery, GetLibrarySongsQuery, + GetLibrarySubscriptionsQuery, +}; use crate::{Result, Thumbnail}; use const_format::concatcp; +impl ParseFrom for () { + fn parse_from( + p: ProcessedResult, + ) -> crate::Result<::Output> { + // TODO: Continuations + let json_crawler = p.into(); + parse_library_subscriptions(json_crawler) + } +} + +impl ParseFrom for () { + fn parse_from( + p: ProcessedResult, + ) -> crate::Result<::Output> { + // TODO: Continuations + let json_crawler = p.into(); + parse_library_albums(json_crawler) + } +} + +impl ParseFrom for () { + fn parse_from( + p: ProcessedResult, + ) -> crate::Result<::Output> { + // TODO: Continuations + let json_crawler = p.into(); + parse_library_songs(json_crawler) + } +} + impl ParseFrom for Vec { fn parse_from( p: ProcessedResult, @@ -31,6 +64,18 @@ impl ParseFrom for Vec { } } +fn parse_library_albums(json_crawler: JsonCrawler) -> std::prelude::v1::Result<(), crate::Error> { + todo!() +} +fn parse_library_songs(json_crawler: JsonCrawler) -> std::prelude::v1::Result<(), crate::Error> { + todo!() +} +fn parse_library_subscriptions( + json_crawler: JsonCrawler, +) -> std::prelude::v1::Result<(), crate::Error> { + todo!() +} + fn parse_library_artists(json_crawler: JsonCrawler) -> Result> { if let Some(contents) = process_library_contents_music_shelf(json_crawler) { parse_content_list_artists(contents) @@ -272,4 +317,31 @@ mod tests { let expected: Vec = serde_json::from_value(expected).unwrap(); assert_eq!(result, expected); } + #[tokio::test] + async fn test_get_library_albums() { + parse_test!( + "", + "", + crate::query::GetLibraryAlbumsQuery::default(), + BrowserToken + ); + } + #[tokio::test] + async fn test_get_library_songs() { + parse_test!( + "", + "", + crate::query::GetLibrarySongsQuery::default(), + BrowserToken + ); + } + #[tokio::test] + async fn test_get_library_subscriptions() { + parse_test!( + "", + "", + crate::query::GetLibrarySubscriptionsQuery::default(), + BrowserToken + ); + } } diff --git a/ytmapi-rs/src/query/library.rs b/ytmapi-rs/src/query/library.rs index a99a2f1a..20eb99a9 100644 --- a/ytmapi-rs/src/query/library.rs +++ b/ytmapi-rs/src/query/library.rs @@ -1,13 +1,44 @@ +use super::Query; use crate::common::library::{LibraryArtist, Playlist}; +use serde_json::json; +use std::borrow::Cow; // NOTE: Authentication is required to use the queries in this module. // Currently, all queries are implemented with authentication however in future // this could be scaled back. -use super::Query; -use serde_json::json; -use std::borrow::Cow; + +#[derive(Default)] +pub enum GetLibrarySortOrder { + NameAsc, + NameDesc, + MostSongs, + RecentlySaved, + #[default] + Default, +} pub struct GetLibraryPlaylistsQuery; +#[derive(Default)] +// TODO: Method to add sort order +pub struct GetLibrarySongsQuery { + sort_order: GetLibrarySortOrder, +} +#[derive(Default)] +// TODO: Method to add sort order +pub struct GetLibraryAlbumsQuery { + sort_order: GetLibrarySortOrder, +} +#[derive(Default)] +// TODO: Method to add sort order +pub struct GetLibrarySubscriptionsQuery { + sort_order: GetLibrarySortOrder, +} +#[derive(Default)] +// TODO: Method to add sort order +pub struct GetLibraryArtistsQuery { + sort_order: GetLibrarySortOrder, +} + impl Query for GetLibraryPlaylistsQuery { type Output = Vec; fn header(&self) -> serde_json::Map { @@ -25,21 +56,6 @@ impl Query for GetLibraryPlaylistsQuery { None } } -#[derive(Default)] -pub enum LibraryArtistsSortOrder { - NameAsc, - NameDesc, - MostSongs, - RecentlySaved, - #[default] - Default, -} - -#[derive(Default)] -// TODO: Method to add filter -pub struct GetLibraryArtistsQuery { - sort_order: LibraryArtistsSortOrder, -} impl Query for GetLibraryArtistsQuery { type Output = Vec; fn header(&self) -> serde_json::Map { @@ -54,18 +70,68 @@ impl Query for GetLibraryArtistsQuery { "browse" } fn params(&self) -> Option> { - // determine order_params via - // `.contents.singleColumnBrowseResultsRenderer.tabs[0] .tabRenderer. - // content.sectionListRenderer.contents[1] .itemSectionRenderer.header. - // itemSectionTabbedHeaderRenderer.endItems[1] .dropdownRenderer. - // entries[].dropdownItemRenderer.onSelectCommand.browseEndpoint.params` - // of `/youtubei/v1/browse` response - match self.sort_order { - LibraryArtistsSortOrder::NameAsc => Some("ggMGKgQIARAA".into()), - LibraryArtistsSortOrder::NameDesc => Some("ggMGKgQIABAB".into()), - LibraryArtistsSortOrder::MostSongs => todo!(), - LibraryArtistsSortOrder::RecentlySaved => Some("ggMGKgQIABAB".into()), - LibraryArtistsSortOrder::Default => None, - } + get_sort_order_params(&self.sort_order).map(|s| s.into()) + } +} + +impl Query for GetLibrarySongsQuery { + type Output = () + where + Self: Sized; + fn header(&self) -> serde_json::Map { + serde_json::Map::from_iter([("browseId".to_string(), json!("FEmusic_liked_videos"))]) + } + fn params(&self) -> Option> { + get_sort_order_params(&self.sort_order).map(|s| s.into()) + } + fn path(&self) -> &str { + "browse" + } +} +impl Query for GetLibraryAlbumsQuery { + type Output = () + where + Self: Sized; + fn header(&self) -> serde_json::Map { + serde_json::Map::from_iter([("browseId".to_string(), json!("FEmusic_liked_albums"))]) + } + fn params(&self) -> Option> { + get_sort_order_params(&self.sort_order).map(|s| s.into()) + } + fn path(&self) -> &str { + "browse" + } +} +impl Query for GetLibrarySubscriptionsQuery { + type Output = () + where + Self: Sized; + fn header(&self) -> serde_json::Map { + serde_json::Map::from_iter([( + "browseId".to_string(), + json!("FEmusic_library_corpus_artists"), + )]) + } + fn params(&self) -> Option> { + get_sort_order_params(&self.sort_order).map(|s| s.into()) + } + fn path(&self) -> &str { + "browse" + } +} + +fn get_sort_order_params(o: &GetLibrarySortOrder) -> Option<&'static str> { + // determine order_params via + // `.contents.singleColumnBrowseResultsRenderer.tabs[0] .tabRenderer. + // content.sectionListRenderer.contents[1] .itemSectionRenderer.header. + // itemSectionTabbedHeaderRenderer.endItems[1] .dropdownRenderer. + // entries[].dropdownItemRenderer.onSelectCommand.browseEndpoint.params` + // of `/youtubei/v1/browse` response + match o { + GetLibrarySortOrder::NameAsc => Some("ggMGKgQIARAA"), + GetLibrarySortOrder::NameDesc => Some("ggMGKgQIABAB"), + GetLibrarySortOrder::MostSongs => todo!(), + GetLibrarySortOrder::RecentlySaved => Some("ggMGKgQIABAB"), + GetLibrarySortOrder::Default => None, } } diff --git a/ytmapi-rs/src/utils.rs b/ytmapi-rs/src/utils.rs index 5dea0880..69ce8fd3 100644 --- a/ytmapi-rs/src/utils.rs +++ b/ytmapi-rs/src/utils.rs @@ -41,7 +41,6 @@ pub fn hash_sapisid(sapisid: &str) -> String { format!("{elapsed}_{hex}") } -#[macro_export] /// Macro to generate the boilerplate code that allows implementation of /// YoutubeID for a simple struct. macro_rules! impl_youtube_id { @@ -56,3 +55,23 @@ macro_rules! impl_youtube_id { } }; } + +/// Macro to generate a parsing test based on the following values: +/// Input file, output file, query, token +#[cfg(test)] +macro_rules! parse_test { + ($in:expr,$out:expr,$query:expr,$token:ty) => { + let source_path = std::path::Path::new($in); + let expected_path = std::path::Path::new($out); + let source = tokio::fs::read_to_string(source_path) + .await + .expect("Expect file read to pass during tests"); + let expected = tokio::fs::read_to_string(expected_path) + .await + .expect("Expect file read to pass during tests"); + let expected = expected.trim(); + let output = YtMusic::<$token>::process_json(source, $query).unwrap(); + let output = format!("{:#?}", output); + assert_eq!(output, expected); + }; +} From 38a19a4c42079e35718aed12abdcc0e1f95142fc Mon Sep 17 00:00:00 2001 From: Nick Dowsett Date: Mon, 1 Jul 2024 18:45:31 +0800 Subject: [PATCH 3/8] Implement GetLibraryAlbums, GetLibraryArtistSubscriptions --- youtui/src/cli/querybuilder.rs | 13 +- youtui/src/main.rs | 5 +- ytmapi-rs/src/crawler.rs | 3 +- ytmapi-rs/src/lib.rs | 27 +- ytmapi-rs/src/parse.rs | 3 + ytmapi-rs/src/parse/library.rs | 120 +- ytmapi-rs/src/query/library.rs | 13 +- ytmapi-rs/src/tests.rs | 8 + ytmapi-rs/src/utils.rs | 20 + .../get_library_albums_20240701.json | 2026 +++ .../get_library_albums_20240701_output.txt | 68 + ...library_artist_subscriptions_20240701.json | 1162 ++ ...y_artist_subscriptions_20240701_output.txt | 53 + .../test_json/get_library_songs_20240701.json | 13184 ++++++++++++++++ .../test_json/get_library_songs_output.txt | 0 15 files changed, 16663 insertions(+), 42 deletions(-) create mode 100644 ytmapi-rs/test_json/get_library_albums_20240701.json create mode 100644 ytmapi-rs/test_json/get_library_albums_20240701_output.txt create mode 100644 ytmapi-rs/test_json/get_library_artist_subscriptions_20240701.json create mode 100644 ytmapi-rs/test_json/get_library_artist_subscriptions_20240701_output.txt create mode 100644 ytmapi-rs/test_json/get_library_songs_20240701.json create mode 100644 ytmapi-rs/test_json/get_library_songs_output.txt diff --git a/youtui/src/cli/querybuilder.rs b/youtui/src/cli/querybuilder.rs index dd64196a..dbadecbe 100644 --- a/youtui/src/cli/querybuilder.rs +++ b/youtui/src/cli/querybuilder.rs @@ -5,7 +5,8 @@ use ytmapi_rs::{ AddPlaylistItemsQuery, AlbumsFilter, ArtistsFilter, CommunityPlaylistsFilter, CreatePlaylistQuery, DeletePlaylistQuery, EditPlaylistQuery, EpisodesFilter, FeaturedPlaylistsFilter, GetAlbumQuery, GetArtistAlbumsQuery, GetArtistQuery, - GetLibraryArtistsQuery, GetLibraryPlaylistsQuery, GetPlaylistQuery, + GetLibraryAlbumsQuery, GetLibraryArtistSubscriptionsQuery, GetLibraryArtistsQuery, + GetLibraryPlaylistsQuery, GetLibrarySongsQuery, GetPlaylistQuery, GetSearchSuggestionsQuery, PlaylistsFilter, PodcastsFilter, ProfilesFilter, Query, RemovePlaylistItemsQuery, SearchQuery, SongsFilter, VideosFilter, }, @@ -237,6 +238,16 @@ pub async fn command_to_query( ) .await } + Command::GetLibrarySongs => { + get_string_output_of_query(yt, GetLibrarySongsQuery::default(), cli_query).await + } + Command::GetLibraryAlbums => { + get_string_output_of_query(yt, GetLibraryAlbumsQuery::default(), cli_query).await + } + Command::GetLibraryArtistSubscriptions => { + get_string_output_of_query(yt, GetLibraryArtistSubscriptionsQuery::default(), cli_query) + .await + } } } diff --git a/youtui/src/main.rs b/youtui/src/main.rs index ebcac255..51d2ed96 100644 --- a/youtui/src/main.rs +++ b/youtui/src/main.rs @@ -72,7 +72,10 @@ enum Command { playlist_id: String, }, GetLibraryPlaylists, - GetLibraryArtists, //TODO: Allow sorting + GetLibraryArtists, //TODO: Allow sorting + GetLibrarySongs, //TODO: Allow sorting + GetLibraryAlbums, //TODO: Allow sorting + GetLibraryArtistSubscriptions, //TODO: Allow sorting Search { query: String, }, diff --git a/ytmapi-rs/src/crawler.rs b/ytmapi-rs/src/crawler.rs index 362f3247..717234b3 100644 --- a/ytmapi-rs/src/crawler.rs +++ b/ytmapi-rs/src/crawler.rs @@ -4,7 +4,7 @@ use crate::{ query::Query, Error, Result, }; -use serde::{de::DeserializeOwned}; +use serde::de::DeserializeOwned; use std::{slice::IterMut, sync::Arc}; #[derive(Clone, PartialEq, Debug)] @@ -209,6 +209,7 @@ impl<'a> JsonCrawlerBorrowed<'a> { impl JsonCrawler { // TODO: Implement into_array_iter_mut. + // See std::Vec::into_iter() as an example of this. pub fn as_array_iter_mut(&mut self) -> Result> { let json_array = self .crawler diff --git a/ytmapi-rs/src/lib.rs b/ytmapi-rs/src/lib.rs index 24fae00a..43e096b1 100644 --- a/ytmapi-rs/src/lib.rs +++ b/ytmapi-rs/src/lib.rs @@ -54,10 +54,10 @@ use common::{ pub use common::{Album, BrowseID, ChannelID, Thumbnail, VideoID}; pub use error::{Error, Result}; use parse::{ - AddPlaylistItem, AlbumParams, ApiSuccess, ArtistParams, GetPlaylist, ParseFrom, - ProcessedResult, SearchResultAlbum, SearchResultArtist, SearchResultEpisode, - SearchResultFeaturedPlaylist, SearchResultPlaylist, SearchResultPodcast, SearchResultProfile, - SearchResultSong, SearchResultVideo, SearchResults, + AddPlaylistItem, AlbumParams, ApiSuccess, ArtistParams, GetLibraryArtistSubscription, + GetPlaylist, ParseFrom, ProcessedResult, SearchResultAlbum, SearchResultArtist, + SearchResultEpisode, SearchResultFeaturedPlaylist, SearchResultPlaylist, SearchResultPodcast, + SearchResultProfile, SearchResultSong, SearchResultVideo, SearchResults, }; pub use process::RawResult; use query::{ @@ -70,9 +70,10 @@ use query::{ watch::GetWatchPlaylistQuery, AddPlaylistItemsQuery, AddVideosToPlaylist, BasicSearch, CreatePlaylistQuery, CreatePlaylistType, DeletePlaylistQuery, EditPlaylistQuery, GetAlbumQuery, - GetArtistAlbumsQuery, GetArtistQuery, GetLibraryAlbumsQuery, GetLibraryArtistsQuery, - GetLibraryPlaylistsQuery, GetLibrarySongsQuery, GetLibrarySubscriptionsQuery, GetPlaylistQuery, - GetSearchSuggestionsQuery, Query, RemovePlaylistItemsQuery, SearchQuery, + GetArtistAlbumsQuery, GetArtistQuery, GetLibraryAlbumsQuery, + GetLibraryArtistSubscriptionsQuery, GetLibraryArtistsQuery, GetLibraryPlaylistsQuery, + GetLibrarySongsQuery, GetPlaylistQuery, GetSearchSuggestionsQuery, Query, + RemovePlaylistItemsQuery, SearchQuery, }; use reqwest::Client; use std::path::Path; @@ -311,13 +312,19 @@ impl YtMusic { ) -> Result> { query.call(self).await } - pub async fn get_library_songs(&self, query: GetLibrarySongsQuery) { + pub async fn get_library_songs(&self, query: GetLibrarySongsQuery) -> Result<()> { query.call(self).await } - pub async fn get_library_albums(&self, query: GetLibraryAlbumsQuery) { + pub async fn get_library_albums( + &self, + query: GetLibraryAlbumsQuery, + ) -> Result> { query.call(self).await } - pub async fn get_library_subscriptions(&self, query: GetLibrarySubscriptionsQuery) { + pub async fn get_library_artist_subscriptions( + &self, + query: GetLibraryArtistSubscriptionsQuery, + ) -> Result> { query.call(self).await } pub async fn get_history() { diff --git a/ytmapi-rs/src/parse.rs b/ytmapi-rs/src/parse.rs index 6abb5616..664a1125 100644 --- a/ytmapi-rs/src/parse.rs +++ b/ytmapi-rs/src/parse.rs @@ -12,6 +12,7 @@ use crate::{Error, Result}; pub use album::*; pub use artist::*; use const_format::concatcp; +pub use library::*; pub use playlists::*; use serde::{Deserialize, Serialize}; use std::fmt::Debug; @@ -23,6 +24,8 @@ mod library; mod playlists; mod search; +// By requiring ParseFrom to also implement Debug, this simplifies our Query -> +// String API. pub trait ParseFrom: Debug where T: Query, diff --git a/ytmapi-rs/src/parse/library.rs b/ytmapi-rs/src/parse/library.rs index 07dfed88..fed43b54 100644 --- a/ytmapi-rs/src/parse/library.rs +++ b/ytmapi-rs/src/parse/library.rs @@ -1,29 +1,41 @@ -use super::{parse_item_text, ParseFrom, ProcessedResult}; +use super::{ + parse_item_text, ParseFrom, ProcessedResult, SearchResultAlbum, BADGE_LABEL, SUBTITLE, + SUBTITLE2, SUBTITLE3, SUBTITLE_BADGE_LABEL, THUMBNAILS, TWO_COLUMN, +}; use crate::common::library::{LibraryArtist, Playlist}; -use crate::common::PlaylistID; -use crate::crawler::JsonCrawler; +use crate::common::{AlbumType, Explicit, PlaylistID}; +use crate::crawler::{JsonCrawler, JsonCrawlerBorrowed}; use crate::nav_consts::{ - GRID, ITEM_SECTION, MRLIR, MTRIR, MUSIC_SHELF, NAVIGATION_BROWSE_ID, SECTION_LIST, + GRID, GRID_ITEMS, ITEM_SECTION, MRLIR, MTRIR, MUSIC_SHELF, NAVIGATION_BROWSE_ID, SECTION_LIST, SECTION_LIST_ITEM, SINGLE_COLUMN_TAB, THUMBNAIL_RENDERER, TITLE, TITLE_TEXT, }; use crate::query::{ - GetLibraryAlbumsQuery, GetLibraryArtistsQuery, GetLibraryPlaylistsQuery, GetLibrarySongsQuery, - GetLibrarySubscriptionsQuery, + GetLibraryAlbumsQuery, GetLibraryArtistSubscriptionsQuery, GetLibraryArtistsQuery, + GetLibraryPlaylistsQuery, GetLibrarySongsQuery, }; use crate::{Result, Thumbnail}; use const_format::concatcp; -impl ParseFrom for () { +#[derive(Debug)] +// Very similar to LibraryArtist struct +pub struct GetLibraryArtistSubscription { + name: String, + subscribers: String, + channel_id: String, + thumbnails: Vec, +} + +impl ParseFrom for Vec { fn parse_from( - p: ProcessedResult, - ) -> crate::Result<::Output> { + p: ProcessedResult, + ) -> crate::Result<::Output> { // TODO: Continuations let json_crawler = p.into(); - parse_library_subscriptions(json_crawler) + parse_library_artist_subscriptions(json_crawler) } } -impl ParseFrom for () { +impl ParseFrom for Vec { fn parse_from( p: ProcessedResult, ) -> crate::Result<::Output> { @@ -64,16 +76,35 @@ impl ParseFrom for Vec { } } -fn parse_library_albums(json_crawler: JsonCrawler) -> std::prelude::v1::Result<(), crate::Error> { - todo!() +fn parse_library_albums( + json_crawler: JsonCrawler, +) -> std::prelude::v1::Result, crate::Error> { + let mut items = json_crawler.navigate_pointer(concatcp!( + SINGLE_COLUMN_TAB, + SECTION_LIST_ITEM, + GRID_ITEMS + ))?; + items + .as_array_iter_mut()? + .map(|mut r| parse_item_list_albums(&mut r)) + .collect() } fn parse_library_songs(json_crawler: JsonCrawler) -> std::prelude::v1::Result<(), crate::Error> { todo!() } -fn parse_library_subscriptions( +fn parse_library_artist_subscriptions( json_crawler: JsonCrawler, -) -> std::prelude::v1::Result<(), crate::Error> { - todo!() +) -> std::prelude::v1::Result, crate::Error> { + let mut contents = json_crawler.navigate_pointer(concatcp!( + SINGLE_COLUMN_TAB, + SECTION_LIST_ITEM, + MUSIC_SHELF, + "/contents" + ))?; + contents + .as_array_iter_mut()? + .map(|mut r| parse_content_list_artist_subscriptions(&mut r)) + .collect() } fn parse_library_artists(json_crawler: JsonCrawler) -> Result> { @@ -130,6 +161,47 @@ fn process_library_contents_music_shelf(mut json_crawler: JsonCrawler) -> Option None } } + +fn parse_item_list_albums(json_crawler: &mut JsonCrawlerBorrowed) -> Result { + let mut data = json_crawler.borrow_pointer("/musicTwoRowItemRenderer")?; + let browse_id = data.take_value_pointer(NAVIGATION_BROWSE_ID)?; + let thumbnails = data.take_value_pointer(THUMBNAIL_RENDERER)?; + let title = data.take_value_pointer(TITLE_TEXT)?; + let artist = data.take_value_pointer(SUBTITLE2)?; + let year = data.take_value_pointer(SUBTITLE3)?; + let album_type = AlbumType::try_from_str(data.take_value_pointer::(SUBTITLE)?)?; + let explicit = if data.path_exists(SUBTITLE_BADGE_LABEL) { + Explicit::IsExplicit + } else { + Explicit::NotExplicit + }; + Ok(SearchResultAlbum { + title, + artist, + year, + explicit, + browse_id, + album_type, + thumbnails, + }) +} + +fn parse_content_list_artist_subscriptions( + json_crawler: &mut JsonCrawlerBorrowed, +) -> Result { + let mut data = json_crawler.borrow_pointer(MRLIR)?; + let channel_id = data.take_value_pointer(NAVIGATION_BROWSE_ID)?; + let name = parse_item_text(&mut data, 0, 0)?; + let subscribers = parse_item_text(&mut data, 1, 0)?; + let thumbnails = data.take_value_pointer(THUMBNAILS)?; + Ok(GetLibraryArtistSubscription { + name, + subscribers, + channel_id, + thumbnails, + }) +} + fn parse_content_list_artists(json_crawler: JsonCrawler) -> Result> { let mut results = Vec::new(); for result in json_crawler @@ -320,8 +392,8 @@ mod tests { #[tokio::test] async fn test_get_library_albums() { parse_test!( - "", - "", + "./test_json/get_library_albums_20240701.json", + "./test_json/get_library_albums_20240701_output.txt", crate::query::GetLibraryAlbumsQuery::default(), BrowserToken ); @@ -329,18 +401,18 @@ mod tests { #[tokio::test] async fn test_get_library_songs() { parse_test!( - "", - "", + "./test_json/get_library_songs_20240701.json", + "./test_json/get_library_songs_20240701_output.txt", crate::query::GetLibrarySongsQuery::default(), BrowserToken ); } #[tokio::test] - async fn test_get_library_subscriptions() { + async fn test_get_library_artist_subscriptions() { parse_test!( - "", - "", - crate::query::GetLibrarySubscriptionsQuery::default(), + "./test_json/get_library_artist_subscriptions_20240701.json", + "./test_json/get_library_artist_subscriptions_20240701_output.txt", + crate::query::GetLibraryArtistSubscriptionsQuery::default(), BrowserToken ); } diff --git a/ytmapi-rs/src/query/library.rs b/ytmapi-rs/src/query/library.rs index 20eb99a9..6b13b561 100644 --- a/ytmapi-rs/src/query/library.rs +++ b/ytmapi-rs/src/query/library.rs @@ -1,5 +1,8 @@ use super::Query; -use crate::common::library::{LibraryArtist, Playlist}; +use crate::{ + common::library::{LibraryArtist, Playlist}, + parse::{GetLibraryArtistSubscription, SearchResultAlbum}, +}; use serde_json::json; use std::borrow::Cow; @@ -30,7 +33,7 @@ pub struct GetLibraryAlbumsQuery { } #[derive(Default)] // TODO: Method to add sort order -pub struct GetLibrarySubscriptionsQuery { +pub struct GetLibraryArtistSubscriptionsQuery { sort_order: GetLibrarySortOrder, } #[derive(Default)] @@ -89,7 +92,7 @@ impl Query for GetLibrarySongsQuery { } } impl Query for GetLibraryAlbumsQuery { - type Output = () + type Output = Vec where Self: Sized; fn header(&self) -> serde_json::Map { @@ -102,8 +105,8 @@ impl Query for GetLibraryAlbumsQuery { "browse" } } -impl Query for GetLibrarySubscriptionsQuery { - type Output = () +impl Query for GetLibraryArtistSubscriptionsQuery { + type Output = Vec where Self: Sized; fn header(&self) -> serde_json::Map { diff --git a/ytmapi-rs/src/tests.rs b/ytmapi-rs/src/tests.rs index 8b29c26c..aac84e80 100644 --- a/ytmapi-rs/src/tests.rs +++ b/ytmapi-rs/src/tests.rs @@ -104,6 +104,14 @@ async fn test_new() { new_standard_api().await.unwrap(); new_standard_oauth_api().await.unwrap(); } + +generate_query_test!(test_get_library_songs, GetLibrarySongsQuery::default()); +generate_query_test!(test_get_library_albums, GetLibraryAlbumsQuery::default()); +generate_query_test!( + test_get_library_artist_subscriptions, + GetLibraryArtistSubscriptionsQuery::default() +); + #[tokio::test] async fn test_basic_search() { let api = new_standard_api().await.unwrap(); diff --git a/ytmapi-rs/src/utils.rs b/ytmapi-rs/src/utils.rs index 69ce8fd3..dbb2ef2f 100644 --- a/ytmapi-rs/src/utils.rs +++ b/ytmapi-rs/src/utils.rs @@ -57,6 +57,7 @@ macro_rules! impl_youtube_id { } /// Macro to generate a parsing test based on the following values: +/// May not really need a macro for this, could use a function. /// Input file, output file, query, token #[cfg(test)] macro_rules! parse_test { @@ -75,3 +76,22 @@ macro_rules! parse_test { assert_eq!(output, expected); }; } + +/// Macro to generate both oauth and browser tests for provided query. +/// May not really need a macro for this, could use a function. +// TODO: generalise +#[cfg(test)] +macro_rules! generate_query_test { + ($fname:ident,$query:expr) => { + #[tokio::test] + async fn $fname() { + let mut api = new_standard_oauth_api().await.unwrap(); + // Don't stuff around trying the keep the local OAuth secret up to date, just + // refresh it each time. + api.refresh_token().await.unwrap(); + let _ = api.query($query).await.unwrap(); + let api = new_standard_api().await.unwrap(); + let _ = api.query($query).await.unwrap(); + } + }; +} diff --git a/ytmapi-rs/test_json/get_library_albums_20240701.json b/ytmapi-rs/test_json/get_library_albums_20240701.json new file mode 100644 index 00000000..87d00430 --- /dev/null +++ b/ytmapi-rs/test_json/get_library_albums_20240701.json @@ -0,0 +1,2026 @@ +{ + "responseContext": { + "serviceTrackingParams": [ + { + "service": "GFEEDBACK", + "params": [ + { + "key": "browse_id", + "value": "FEmusic_liked_albums" + }, + { + "key": "browse_id_prefix", + "value": "" + }, + { + "key": "logged_in", + "value": "1" + }, + { + "key": "e", + "value": "23804281,23946420,23966208,23998056,24004644,24077241,24181174,24208765,24241378,24258343,24290971,24439361,24456089,24468724,24542367,24548627,24548629,24566687,51009781,51010235,51016856,51017346,51020570,51025415,51030103,51033765,51037342,51037353,51041512,51048489,51049131,51050361,51053689,51057842,51057853,51057863,51060353,51063643,51064835,51065188,51089007,51091331,51098297,51098299,51102409,51104988,51106995,51111738,51113656,51113661,51115184,51116067,51118058,51118932,51124104,51129209,51133103,51138613,51139379,51143864,51144926,51145218,51147415,51148687,51148976,51148983,51149607,51152050,51156037,51157411,51157841,51158514,51159332,51160545,51162170,51162595,51163639,51165467,51165568,51166922,51169131,51169754,51170247,51172674,51172688,51172691,51172702,51172707,51172712,51172719,51172726,51175733,51176511,51177818,51178314,51178329,51178340,51178355,51178982,51181298,51182274,51183910,51184022,51184066,51185177,51186494,51186528,51187241,51188417,51189505,51189514,51189826,51190059,51190073,51190080,51190087,51190198,51190211,51190220,51190229,51190652,51190724,51193593,51195231,51196515,51197687,51197690,51197697,51197706,51197960,51198197,51199193,51200020,51200047,51200249,51200256,51200291,51200298,51200569,51201331,51201352,51201363,51201374,51201383,51201426,51201433,51201440,51201447,51201814,51204109,51204329,51207182,51207193,51207200,51207215,51207486,51212142,51212464,51212553,51212569,51213732,51213785,51214208,51214404,51216387,51217235,51218765,51219243,51219303,51220612,51220799,51221011,51221150,51221181,51221342,51222374,51224921,51225439,51226707,51227393,51227772,51227902" + } + ] + }, + { + "service": "CSI", + "params": [ + { + "key": "c", + "value": "WEB_REMIX" + }, + { + "key": "cver", + "value": "1.20240624.01.00" + }, + { + "key": "yt_li", + "value": "1" + }, + { + "key": "GetBrowseCorpusReleasesPage_rid", + "value": "0x49d62bd2c8bbf415" + } + ] + }, + { + "service": "ECATCHER", + "params": [ + { + "key": "client.version", + "value": "1.20000101" + }, + { + "key": "client.name", + "value": "WEB_REMIX" + } + ] + } + ] + }, + "contents": { + "singleColumnBrowseResultsRenderer": { + "tabs": [ + { + "tabRenderer": { + "endpoint": { + "clickTrackingParams": "CAcQ8JMBGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CAcQ8JMBGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CAcQ8JMBGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + } + } + }, + { + "clickTrackingParams": "CAcQ8JMBGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "FEmusic_library_landing", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_LIBRARY_CONTENT_LANDING_PAGE" + } + } + } + } + ] + } + }, + "title": "Library", + "selected": true, + "content": { + "sectionListRenderer": { + "contents": [ + { + "gridRenderer": { + "items": [ + { + "musicTwoRowItemRenderer": { + "thumbnailRenderer": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w226-h226-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w544-h544-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CEYQhL8CIhMIj-6b7buEhwMVMwaDAx0USQsH" + } + }, + "aspectRatio": "MUSIC_TWO_ROW_ITEM_THUMBNAIL_ASPECT_RATIO_SQUARE", + "title": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CDcQoLMCGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "Album" + }, + { + "text": " • " + }, + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CDcQoLMCGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + }, + { + "text": " • " + }, + { + "text": "2021" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CDcQoLMCGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CDcQoLMCGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CEUQmvMFGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_m8Yan_MSAia_ZYmZpl6xm1AINDg8LF1NI", + "params": "wAEB8gECKAE%3D" + } + }, + "trackingParams": "CEUQmvMFGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CEQQm_MFGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "watchPlaylistEndpoint": { + "playlistId": "RDAMPLOLAK5uy_m8Yan_MSAia_ZYmZpl6xm1AINDg8LF1NI", + "params": "wAEB" + } + }, + "trackingParams": "CEQQm_MFGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CEIQvu4FGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_m8Yan_MSAia_ZYmZpl6xm1AINDg8LF1NI", + "onEmptyQueue": { + "clickTrackingParams": "CEIQvu4FGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "watchEndpoint": { + "playlistId": "OLAK5uy_m8Yan_MSAia_ZYmZpl6xm1AINDg8LF1NI" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CEIQvu4FGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album will play next" + } + ] + }, + "trackingParams": "CEMQyscDIhMIj-6b7buEhwMVMwaDAx0USQsH" + } + } + } + } + ] + } + }, + "trackingParams": "CEIQvu4FGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CEAQ--8FGAMiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_m8Yan_MSAia_ZYmZpl6xm1AINDg8LF1NI", + "onEmptyQueue": { + "clickTrackingParams": "CEAQ--8FGAMiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "watchEndpoint": { + "playlistId": "OLAK5uy_m8Yan_MSAia_ZYmZpl6xm1AINDg8LF1NI" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CEAQ--8FGAMiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album added to queue" + } + ] + }, + "trackingParams": "CEEQyscDIhMIj-6b7buEhwMVMwaDAx0USQsH" + } + } + } + } + ] + } + }, + "trackingParams": "CEAQ--8FGAMiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Remove album from library" + } + ] + }, + "defaultIcon": { + "iconType": "LIBRARY_SAVED" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CD8QhP8FGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "playlistId": "OLAK5uy_m8Yan_MSAia_ZYmZpl6xm1AINDg8LF1NI" + }, + "actions": [ + { + "clickTrackingParams": "CD8QhP8FGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "hideEnclosingAction": { + "hack": true + } + } + ] + } + }, + "toggledText": { + "runs": [ + { + "text": "Save album to library" + } + ] + }, + "toggledIcon": { + "iconType": "LIBRARY_ADD" + }, + "toggledServiceEndpoint": { + "clickTrackingParams": "CD8QhP8FGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "playlistId": "OLAK5uy_m8Yan_MSAia_ZYmZpl6xm1AINDg8LF1NI" + } + } + }, + "trackingParams": "CD8QhP8FGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CD0Q0aoFGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "offlinePlaylistEndpoint": { + "playlistId": "OLAK5uy_m8Yan_MSAia_ZYmZpl6xm1AINDg8LF1NI", + "action": "ACTION_ADD", + "offlineability": { + "offlineabilityRenderer": { + "offlineable": true, + "clickTrackingParams": "CD4QxzciEwiP7pvtu4SHAxUzBoMDHRRJCwcyC29mZmxpbmVsaXN0" + } + }, + "onAddCommand": { + "clickTrackingParams": "CD0Q0aoFGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "getDownloadActionCommand": { + "playlistId": "OLAK5uy_m8Yan_MSAia_ZYmZpl6xm1AINDg8LF1NI", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CD0Q0aoFGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDwQw5QGGAYiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "addToPlaylistEndpoint": { + "playlistId": "OLAK5uy_m8Yan_MSAia_ZYmZpl6xm1AINDg8LF1NI" + } + }, + "trackingParams": "CDwQw5QGGAYiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDsQkPsFGAciEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CDsQkPsFGAciEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDoQkfsFGAgiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "shareEntityEndpoint": { + "serializedShareEntity": "EilPTEFLNXV5X204WWFuX01TQWlhX1pZbVpwbDZ4bTFBSU5EZzhMRjFOSQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CDoQkfsFGAgiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + } + ], + "trackingParams": "CDkQpzsiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "2147483648", + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CDgQyN4CIhMIj-6b7buEhwMVMwaDAx0USQsH", + "watchEndpoint": { + "videoId": "d9zk2j3JPK4", + "playlistId": "OLAK5uy_m8Yan_MSAia_ZYmZpl6xm1AINDg8LF1NI", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GilPTEFLNXV5X204WWFuX01TQWlhX1pZbVpwbDZ4bTFBSU5EZzhMRjFOSQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CDgQyN4CIhMIj-6b7buEhwMVMwaDAx0USQsH", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 2566914048, + "activeBackgroundColor": 4278190080, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 1308622847, + "activeScaleFactor": 1.2, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_MEDIUM", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play KID A MNESIA" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause KID A MNESIA" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_BOTTOM_RIGHT", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_HOVER" + } + } + } + }, + { + "musicTwoRowItemRenderer": { + "thumbnailRenderer": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/tYtZXhkW4vgvVZNhGX_0WulTu-YDXd_olELKV5li8l1Mk63Ptm9CUxuvuiOtD3O_GVsE1sFgcsguaaD4=w226-h226-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/tYtZXhkW4vgvVZNhGX_0WulTu-YDXd_olELKV5li8l1Mk63Ptm9CUxuvuiOtD3O_GVsE1sFgcsguaaD4=w544-h544-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CDYQhL8CIhMIj-6b7buEhwMVMwaDAx0USQsH" + } + }, + "aspectRatio": "MUSIC_TWO_ROW_ITEM_THUMBNAIL_ASPECT_RATIO_SQUARE", + "title": { + "runs": [ + { + "text": "I'll Come Back", + "navigationEndpoint": { + "clickTrackingParams": "CCcQoLMCGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "MPREb_tlzBJv4t1DX", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "Album" + }, + { + "text": " • " + }, + { + "text": "Aj Lee & Blue Summit", + "navigationEndpoint": { + "clickTrackingParams": "CCcQoLMCGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "UCcITGjmLwFVNgwAG2_1VDuw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + }, + { + "text": " • " + }, + { + "text": "2021" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CCcQoLMCGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "MPREb_tlzBJv4t1DX", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CCcQoLMCGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDUQmvMFGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_k8pYGOfFkHBR5PY3mIE5dab25cAwk1UzE", + "params": "wAEB8gECKAE%3D" + } + }, + "trackingParams": "CDUQmvMFGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDQQm_MFGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "watchPlaylistEndpoint": { + "playlistId": "RDAMPLOLAK5uy_k8pYGOfFkHBR5PY3mIE5dab25cAwk1UzE", + "params": "wAEB" + } + }, + "trackingParams": "CDQQm_MFGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CDIQvu4FGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_k8pYGOfFkHBR5PY3mIE5dab25cAwk1UzE", + "onEmptyQueue": { + "clickTrackingParams": "CDIQvu4FGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "watchEndpoint": { + "playlistId": "OLAK5uy_k8pYGOfFkHBR5PY3mIE5dab25cAwk1UzE" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CDIQvu4FGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album will play next" + } + ] + }, + "trackingParams": "CDMQyscDIhMIj-6b7buEhwMVMwaDAx0USQsH" + } + } + } + } + ] + } + }, + "trackingParams": "CDIQvu4FGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CDAQ--8FGAMiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_k8pYGOfFkHBR5PY3mIE5dab25cAwk1UzE", + "onEmptyQueue": { + "clickTrackingParams": "CDAQ--8FGAMiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "watchEndpoint": { + "playlistId": "OLAK5uy_k8pYGOfFkHBR5PY3mIE5dab25cAwk1UzE" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CDAQ--8FGAMiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album added to queue" + } + ] + }, + "trackingParams": "CDEQyscDIhMIj-6b7buEhwMVMwaDAx0USQsH" + } + } + } + } + ] + } + }, + "trackingParams": "CDAQ--8FGAMiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Remove album from library" + } + ] + }, + "defaultIcon": { + "iconType": "LIBRARY_SAVED" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CC8QhP8FGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "playlistId": "OLAK5uy_k8pYGOfFkHBR5PY3mIE5dab25cAwk1UzE" + }, + "actions": [ + { + "clickTrackingParams": "CC8QhP8FGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "hideEnclosingAction": { + "hack": true + } + } + ] + } + }, + "toggledText": { + "runs": [ + { + "text": "Save album to library" + } + ] + }, + "toggledIcon": { + "iconType": "LIBRARY_ADD" + }, + "toggledServiceEndpoint": { + "clickTrackingParams": "CC8QhP8FGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "playlistId": "OLAK5uy_k8pYGOfFkHBR5PY3mIE5dab25cAwk1UzE" + } + } + }, + "trackingParams": "CC8QhP8FGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CC0Q0aoFGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "offlinePlaylistEndpoint": { + "playlistId": "OLAK5uy_k8pYGOfFkHBR5PY3mIE5dab25cAwk1UzE", + "action": "ACTION_ADD", + "offlineability": { + "offlineabilityRenderer": { + "offlineable": true, + "clickTrackingParams": "CC4QxzciEwiP7pvtu4SHAxUzBoMDHRRJCwcyC29mZmxpbmVsaXN0" + } + }, + "onAddCommand": { + "clickTrackingParams": "CC0Q0aoFGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "getDownloadActionCommand": { + "playlistId": "OLAK5uy_k8pYGOfFkHBR5PY3mIE5dab25cAwk1UzE", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CC0Q0aoFGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCwQw5QGGAYiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "addToPlaylistEndpoint": { + "playlistId": "OLAK5uy_k8pYGOfFkHBR5PY3mIE5dab25cAwk1UzE" + } + }, + "trackingParams": "CCwQw5QGGAYiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCsQkPsFGAciEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "UCcITGjmLwFVNgwAG2_1VDuw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CCsQkPsFGAciEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCoQkfsFGAgiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "shareEntityEndpoint": { + "serializedShareEntity": "EilPTEFLNXV5X2s4cFlHT2ZGa0hCUjVQWTNtSUU1ZGFiMjVjQXdrMVV6RQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CCoQkfsFGAgiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + } + ], + "trackingParams": "CCkQpzsiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "2147483648", + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CCgQyN4CIhMIj-6b7buEhwMVMwaDAx0USQsH", + "watchEndpoint": { + "videoId": "xn3K2ukfrVg", + "playlistId": "OLAK5uy_k8pYGOfFkHBR5PY3mIE5dab25cAwk1UzE", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GilPTEFLNXV5X2s4cFlHT2ZGa0hCUjVQWTNtSUU1ZGFiMjVjQXdrMVV6RQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CCgQyN4CIhMIj-6b7buEhwMVMwaDAx0USQsH", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 2566914048, + "activeBackgroundColor": 4278190080, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 1308622847, + "activeScaleFactor": 1.2, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_MEDIUM", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play I'll Come Back" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause I'll Come Back" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_BOTTOM_RIGHT", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_HOVER" + } + } + } + }, + { + "musicTwoRowItemRenderer": { + "thumbnailRenderer": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/L1iBW0CcjEQaXLP1coivJbjf7zSUncQ65_GpKHakOaRI81kS5pRV498PSg3VSmQg7LRMB0cJ6d-HzooO=w226-h226-l90-rj", + "width": 226, + "height": 226 + }, + { + "url": "https://lh3.googleusercontent.com/L1iBW0CcjEQaXLP1coivJbjf7zSUncQ65_GpKHakOaRI81kS5pRV498PSg3VSmQg7LRMB0cJ6d-HzooO=w544-h544-l90-rj", + "width": 544, + "height": 544 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CCYQhL8CIhMIj-6b7buEhwMVMwaDAx0USQsH" + } + }, + "aspectRatio": "MUSIC_TWO_ROW_ITEM_THUMBNAIL_ASPECT_RATIO_SQUARE", + "title": { + "runs": [ + { + "text": "To Pimp A Butterfly", + "navigationEndpoint": { + "clickTrackingParams": "CBYQoLMCGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "MPREb_3jGuGO44ziy", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "subtitle": { + "runs": [ + { + "text": "Album" + }, + { + "text": " • " + }, + { + "text": "Kendrick Lamar", + "navigationEndpoint": { + "clickTrackingParams": "CBYQoLMCGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "UCprAFmT0C6O4X0ToEXpeFTQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + }, + { + "text": " • " + }, + { + "text": "2015" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CBYQoLMCGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "MPREb_3jGuGO44ziy", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CBYQoLMCGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCUQmvMFGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "watchPlaylistEndpoint": { + "playlistId": "OLAK5uy_lnweRNCgBTHU2Wm-w6zlJX0hELCYSlZ2Y", + "params": "wAEB8gECKAE%3D" + } + }, + "trackingParams": "CCUQmvMFGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCQQm_MFGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "watchPlaylistEndpoint": { + "playlistId": "RDAMPLOLAK5uy_lnweRNCgBTHU2Wm-w6zlJX0hELCYSlZ2Y", + "params": "wAEB" + } + }, + "trackingParams": "CCQQm_MFGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CCIQvu4FGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_lnweRNCgBTHU2Wm-w6zlJX0hELCYSlZ2Y", + "onEmptyQueue": { + "clickTrackingParams": "CCIQvu4FGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "watchEndpoint": { + "playlistId": "OLAK5uy_lnweRNCgBTHU2Wm-w6zlJX0hELCYSlZ2Y" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CCIQvu4FGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album will play next" + } + ] + }, + "trackingParams": "CCMQyscDIhMIj-6b7buEhwMVMwaDAx0USQsH" + } + } + } + } + ] + } + }, + "trackingParams": "CCIQvu4FGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CCAQ--8FGAMiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "queueAddEndpoint": { + "queueTarget": { + "playlistId": "OLAK5uy_lnweRNCgBTHU2Wm-w6zlJX0hELCYSlZ2Y", + "onEmptyQueue": { + "clickTrackingParams": "CCAQ--8FGAMiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "watchEndpoint": { + "playlistId": "OLAK5uy_lnweRNCgBTHU2Wm-w6zlJX0hELCYSlZ2Y" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CCAQ--8FGAMiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Album added to queue" + } + ] + }, + "trackingParams": "CCEQyscDIhMIj-6b7buEhwMVMwaDAx0USQsH" + } + } + } + } + ] + } + }, + "trackingParams": "CCAQ--8FGAMiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Remove album from library" + } + ] + }, + "defaultIcon": { + "iconType": "LIBRARY_SAVED" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CB8QhP8FGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "playlistId": "OLAK5uy_lnweRNCgBTHU2Wm-w6zlJX0hELCYSlZ2Y" + }, + "actions": [ + { + "clickTrackingParams": "CB8QhP8FGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "hideEnclosingAction": { + "hack": true + } + } + ] + } + }, + "toggledText": { + "runs": [ + { + "text": "Save album to library" + } + ] + }, + "toggledIcon": { + "iconType": "LIBRARY_ADD" + }, + "toggledServiceEndpoint": { + "clickTrackingParams": "CB8QhP8FGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "playlistId": "OLAK5uy_lnweRNCgBTHU2Wm-w6zlJX0hELCYSlZ2Y" + } + } + }, + "trackingParams": "CB8QhP8FGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CB0Q0aoFGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "offlinePlaylistEndpoint": { + "playlistId": "OLAK5uy_lnweRNCgBTHU2Wm-w6zlJX0hELCYSlZ2Y", + "action": "ACTION_ADD", + "offlineability": { + "offlineabilityRenderer": { + "offlineable": true, + "clickTrackingParams": "CB4QxzciEwiP7pvtu4SHAxUzBoMDHRRJCwcyC29mZmxpbmVsaXN0" + } + }, + "onAddCommand": { + "clickTrackingParams": "CB0Q0aoFGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "getDownloadActionCommand": { + "playlistId": "OLAK5uy_lnweRNCgBTHU2Wm-w6zlJX0hELCYSlZ2Y", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CB0Q0aoFGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CBwQw5QGGAYiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "addToPlaylistEndpoint": { + "playlistId": "OLAK5uy_lnweRNCgBTHU2Wm-w6zlJX0hELCYSlZ2Y" + } + }, + "trackingParams": "CBwQw5QGGAYiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CBsQkPsFGAciEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "UCprAFmT0C6O4X0ToEXpeFTQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CBsQkPsFGAciEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CBoQkfsFGAgiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "shareEntityEndpoint": { + "serializedShareEntity": "EilPTEFLNXV5X2xud2VSTkNnQlRIVTJXbS13NnpsSlgwaEVMQ1lTbFoyWQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CBoQkfsFGAgiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + } + ], + "trackingParams": "CBkQpzsiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "thumbnailOverlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "2147483648", + "0", + "0" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CBgQyN4CIhMIj-6b7buEhwMVMwaDAx0USQsH", + "watchEndpoint": { + "videoId": "l9fN-8NjrvI", + "playlistId": "OLAK5uy_lnweRNCgBTHU2Wm-w6zlJX0hELCYSlZ2Y", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GilPTEFLNXV5X2xud2VSTkNnQlRIVTJXbS13NnpsSlgwaEVMQ1lTbFoyWQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CBgQyN4CIhMIj-6b7buEhwMVMwaDAx0USQsH", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 2566914048, + "activeBackgroundColor": 4278190080, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 1308622847, + "activeScaleFactor": 1.2, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_MEDIUM", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play To Pimp A Butterfly" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause To Pimp A Butterfly" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_BOTTOM_RIGHT", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_HOVER" + } + }, + "subtitleBadges": [ + { + "musicInlineBadgeRenderer": { + "trackingParams": "CBcQoe0CGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "icon": { + "iconType": "MUSIC_EXPLICIT_BADGE" + }, + "accessibilityData": { + "accessibilityData": { + "label": "Explicit" + } + } + } + } + ] + } + } + ], + "trackingParams": "CBUQ6IsCGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "itemSize": "COLLECTION_STYLE_ITEM_SIZE_SMALL" + } + } + ], + "trackingParams": "CAgQui8iEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "header": { + "musicSideAlignedItemRenderer": { + "startItems": [ + { + "chipCloudRenderer": { + "chips": [ + { + "chipCloudChipRenderer": { + "navigationEndpoint": { + "clickTrackingParams": "CBQQ_V0YACITCI_um-27hIcDFTMGgwMdFEkLBw==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBQQ_V0YACITCI_um-27hIcDFTMGgwMdFEkLBw==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + }, + { + "clickTrackingParams": "CBQQ_V0YACITCI_um-27hIcDFTMGgwMdFEkLBw==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBQQ_V0YACITCI_um-27hIcDFTMGgwMdFEkLBw==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + } + } + } + ] + } + }, + "trackingParams": "CBQQ_V0YACITCI_um-27hIcDFTMGgwMdFEkLBw==", + "icon": { + "iconType": "CLOSE" + }, + "accessibilityData": { + "accessibilityData": { + "label": "Clear filters" + } + }, + "isSelected": true, + "onDeselectedCommand": { + "clickTrackingParams": "CBQQ_V0YACITCI_um-27hIcDFTMGgwMdFEkLBw==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBQQ_V0YACITCI_um-27hIcDFTMGgwMdFEkLBw==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + }, + { + "clickTrackingParams": "CBQQ_V0YACITCI_um-27hIcDFTMGgwMdFEkLBw==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBQQ_V0YACITCI_um-27hIcDFTMGgwMdFEkLBw==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + } + } + } + ] + } + } + } + }, + { + "chipCloudChipRenderer": { + "text": { + "runs": [ + { + "text": "Albums" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CBMQ_V0YASITCI_um-27hIcDFTMGgwMdFEkLBw==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBMQ_V0YASITCI_um-27hIcDFTMGgwMdFEkLBw==", + "browseEndpoint": { + "browseId": "FEmusic_liked_albums" + } + }, + { + "clickTrackingParams": "CBMQ_V0YASITCI_um-27hIcDFTMGgwMdFEkLBw==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBMQ_V0YASITCI_um-27hIcDFTMGgwMdFEkLBw==", + "browseEndpoint": { + "browseId": "FEmusic_liked_albums" + } + } + } + } + ] + } + }, + "trackingParams": "CBMQ_V0YASITCI_um-27hIcDFTMGgwMdFEkLBw==", + "accessibilityData": { + "accessibilityData": { + "label": "Show albums" + } + }, + "isSelected": true, + "onDeselectedCommand": { + "clickTrackingParams": "CBMQ_V0YASITCI_um-27hIcDFTMGgwMdFEkLBw==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBMQ_V0YASITCI_um-27hIcDFTMGgwMdFEkLBw==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + }, + { + "clickTrackingParams": "CBMQ_V0YASITCI_um-27hIcDFTMGgwMdFEkLBw==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBMQ_V0YASITCI_um-27hIcDFTMGgwMdFEkLBw==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + } + } + } + ] + } + }, + "uniqueId": "Albums" + } + } + ], + "trackingParams": "CBIQ_F0YACITCI_um-27hIcDFTMGgwMdFEkLBw==" + } + } + ], + "endItems": [ + { + "musicSortFilterButtonRenderer": { + "title": { + "runs": [ + { + "text": "Recently saved" + } + ] + }, + "icon": { + "iconType": "ARROW_DROP_DOWN" + }, + "menu": { + "musicMultiSelectMenuRenderer": { + "title": { + "musicMenuTitleRenderer": { + "primaryText": { + "runs": [ + { + "text": "Sort by" + } + ] + } + } + }, + "options": [ + { + "musicMultiSelectMenuItemRenderer": { + "title": { + "runs": [ + { + "text": "Recently saved" + } + ] + }, + "formItemEntityKey": "En1QQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9BRERFRF9USU1FU1RBTVBfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "selectedCommand": { + "clickTrackingParams": "CBAQk5QFGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBAQk5QFGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EnlQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9ERVNDRU5ESU5HIJEBKAE%3D", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CBAQk5QFGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "En1QQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9BRERFRF9USU1FU1RBTVBfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "newCheckedState": true + } + }, + { + "clickTrackingParams": "CBAQk5QFGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EnhQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9BU0NFTkRJTkcgkQEoAQ%3D%3D", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CBAQk5QFGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseSectionListReloadEndpoint": { + "continuation": { + "reloadContinuationData": { + "continuation": "4qmFsgIoEhRGRW11c2ljX2xpa2VkX2FsYnVtcxoQZ2dNR0tnUUlBQkFCb0FZQg%3D%3D", + "clickTrackingParams": "CBEQxqYCIhMIj-6b7buEhwMVMwaDAx0USQsH", + "showSpinnerOverlay": true + } + } + } + } + ] + } + }, + "trackingParams": "CBAQk5QFGAAiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "selectedIcon": { + "iconType": "CHECK" + }, + "selectedAccessibility": { + "accessibilityData": { + "label": "Recently saved selected" + } + }, + "deselectedAccessibility": { + "accessibilityData": { + "label": "Recently saved" + } + } + } + }, + { + "musicMultiSelectMenuItemRenderer": { + "title": { + "runs": [ + { + "text": "A to Z" + } + ] + }, + "formItemEntityKey": "EnhQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9BU0NFTkRJTkcgkQEoAQ%3D%3D", + "selectedCommand": { + "clickTrackingParams": "CA4Qk5QFGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CA4Qk5QFGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EnhQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9BU0NFTkRJTkcgkQEoAQ%3D%3D", + "newCheckedState": true + } + }, + { + "clickTrackingParams": "CA4Qk5QFGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "En1QQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9BRERFRF9USU1FU1RBTVBfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CA4Qk5QFGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EnlQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9ERVNDRU5ESU5HIJEBKAE%3D", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CA4Qk5QFGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseSectionListReloadEndpoint": { + "continuation": { + "reloadContinuationData": { + "continuation": "4qmFsgIoEhRGRW11c2ljX2xpa2VkX2FsYnVtcxoQZ2dNR0tnUUlBUkFBb0FZQg%3D%3D", + "clickTrackingParams": "CA8QxqYCIhMIj-6b7buEhwMVMwaDAx0USQsH", + "showSpinnerOverlay": true + } + } + } + } + ] + } + }, + "trackingParams": "CA4Qk5QFGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "selectedIcon": { + "iconType": "CHECK" + }, + "selectedAccessibility": { + "accessibilityData": { + "label": "A to Z selected" + } + }, + "deselectedAccessibility": { + "accessibilityData": { + "label": "A to Z" + } + } + } + }, + { + "musicMultiSelectMenuItemRenderer": { + "title": { + "runs": [ + { + "text": "Z to A" + } + ] + }, + "formItemEntityKey": "EnlQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9ERVNDRU5ESU5HIJEBKAE%3D", + "selectedCommand": { + "clickTrackingParams": "CAwQk5QFGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CAwQk5QFGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EnlQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9ERVNDRU5ESU5HIJEBKAE%3D", + "newCheckedState": true + } + }, + { + "clickTrackingParams": "CAwQk5QFGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "En1QQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9BRERFRF9USU1FU1RBTVBfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CAwQk5QFGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EnhQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9BU0NFTkRJTkcgkQEoAQ%3D%3D", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CAwQk5QFGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseSectionListReloadEndpoint": { + "continuation": { + "reloadContinuationData": { + "continuation": "4qmFsgIoEhRGRW11c2ljX2xpa2VkX2FsYnVtcxoQZ2dNR0tnUUlBUkFCb0FZQg%3D%3D", + "clickTrackingParams": "CA0QxqYCIhMIj-6b7buEhwMVMwaDAx0USQsH", + "showSpinnerOverlay": true + } + } + } + } + ] + } + }, + "trackingParams": "CAwQk5QFGAIiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "selectedIcon": { + "iconType": "CHECK" + }, + "selectedAccessibility": { + "accessibilityData": { + "label": "Z to A selected" + } + }, + "deselectedAccessibility": { + "accessibilityData": { + "label": "Z to A" + } + } + } + } + ], + "trackingParams": "CAsQkpQFIhMIj-6b7buEhwMVMwaDAx0USQsH", + "formEntityKey": "EkVQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UgkAEoAQ%3D%3D" + } + }, + "accessibility": { + "accessibilityData": { + "label": "Sort by - Recently saved selected" + } + }, + "trackingParams": "CAoQkZQFGAEiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + } + ], + "trackingParams": "CAkQxv4DIhMIj-6b7buEhwMVMwaDAx0USQsH" + } + } + } + }, + "tabIdentifier": "FEmusic_library_landing", + "trackingParams": "CAcQ8JMBGAQiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "tabRenderer": { + "endpoint": { + "clickTrackingParams": "CAQQ8JMBGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CAQQ8JMBGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CAQQ8JMBGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "FEmusic_offline" + } + } + } + }, + { + "clickTrackingParams": "CAQQ8JMBGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "FEmusic_offline", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_DOWNLOADS_CONTENT_LANDING_PAGE" + } + } + } + } + ] + } + }, + "title": "Downloads", + "selected": false, + "content": { + "sectionListRenderer": { + "continuations": [ + { + "reloadContinuationData": { + "continuation": "4qmFsgIdEg9GRW11c2ljX29mZmxpbmUaCnVnTUNDQUUlM0Q%3D", + "clickTrackingParams": "CAYQxqYCIhMIj-6b7buEhwMVMwaDAx0USQsH" + } + } + ], + "trackingParams": "CAUQui8iEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + "tabIdentifier": "FEmusic_offline", + "trackingParams": "CAQQ8JMBGAUiEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + { + "tabRenderer": { + "endpoint": { + "clickTrackingParams": "CAEQ8JMBGAYiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CAEQ8JMBGAYiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CAEQ8JMBGAYiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "FEmusic_library_privately_owned_landing" + } + } + } + }, + { + "clickTrackingParams": "CAEQ8JMBGAYiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "browseEndpoint": { + "browseId": "FEmusic_library_privately_owned_landing", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_PRIVATELY_OWNED_CONTENT_LANDING_PAGE" + } + } + } + } + ] + } + }, + "title": "Uploads", + "selected": false, + "content": { + "sectionListRenderer": { + "continuations": [ + { + "reloadContinuationData": { + "continuation": "4qmFsgI1EidGRW11c2ljX2xpYnJhcnlfcHJpdmF0ZWx5X293bmVkX2xhbmRpbmcaCnVnTUNDQUUlM0Q%3D", + "clickTrackingParams": "CAMQxqYCIhMIj-6b7buEhwMVMwaDAx0USQsH" + } + } + ], + "trackingParams": "CAIQui8iEwiP7pvtu4SHAxUzBoMDHRRJCwc=" + } + }, + "tabIdentifier": "FEmusic_library_privately_owned_landing", + "trackingParams": "CAEQ8JMBGAYiEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "targetId": "music-library-uploads-tab" + } + } + ] + } + }, + "trackingParams": "CAAQhGciEwiP7pvtu4SHAxUzBoMDHRRJCwc=", + "frameworkUpdates": { + "entityBatchUpdate": { + "mutations": [ + { + "entityKey": "EkVQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UgkAEoAQ%3D%3D", + "type": "ENTITY_MUTATION_TYPE_REPLACE", + "payload": { + "musicForm": { + "id": "EkVQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UgkAEoAQ%3D%3D", + "booleanChoiceEntityKeys": [ + "EnlQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9ERVNDRU5ESU5HIJEBKAE%3D", + "En1QQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9BRERFRF9USU1FU1RBTVBfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "EnhQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9BU0NFTkRJTkcgkQEoAQ%3D%3D" + ] + } + } + }, + { + "entityKey": "En1QQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9BRERFRF9USU1FU1RBTVBfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "type": "ENTITY_MUTATION_TYPE_REPLACE", + "payload": { + "musicFormBooleanChoice": { + "id": "En1QQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9BRERFRF9USU1FU1RBTVBfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "parentFormEntityKey": "EkVQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UgkAEoAQ%3D%3D", + "selected": true, + "opaqueToken": "SortSpec_Type_ADDED_TIMESTAMP_SortSpec_Order_DESCENDING" + } + } + }, + { + "entityKey": "EnhQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9BU0NFTkRJTkcgkQEoAQ%3D%3D", + "type": "ENTITY_MUTATION_TYPE_REPLACE", + "payload": { + "musicFormBooleanChoice": { + "id": "EnhQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9BU0NFTkRJTkcgkQEoAQ%3D%3D", + "parentFormEntityKey": "EkVQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UgkAEoAQ%3D%3D", + "selected": false, + "opaqueToken": "SortSpec_Type_ENTITY_NAME_SortSpec_Order_ASCENDING" + } + } + }, + { + "entityKey": "EnlQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9ERVNDRU5ESU5HIJEBKAE%3D", + "type": "ENTITY_MUTATION_TYPE_REPLACE", + "payload": { + "musicFormBooleanChoice": { + "id": "EnlQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UtU29ydFNwZWNfVHlwZV9FTlRJVFlfTkFNRV9Tb3J0U3BlY19PcmRlcl9ERVNDRU5ESU5HIJEBKAE%3D", + "parentFormEntityKey": "EkVQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1JFTEVBU0VTX1BBR0UgkAEoAQ%3D%3D", + "selected": false, + "opaqueToken": "SortSpec_Type_ENTITY_NAME_SortSpec_Order_DESCENDING" + } + } + } + ], + "timestamp": { + "seconds": "1719789691", + "nanos": 602750202 + } + } + } +} + diff --git a/ytmapi-rs/test_json/get_library_albums_20240701_output.txt b/ytmapi-rs/test_json/get_library_albums_20240701_output.txt new file mode 100644 index 00000000..713807c4 --- /dev/null +++ b/ytmapi-rs/test_json/get_library_albums_20240701_output.txt @@ -0,0 +1,68 @@ +[ + SearchResultAlbum { + title: "KID A MNESIA", + artist: "Radiohead", + year: "2021", + explicit: NotExplicit, + browse_id: ChannelID( + "MPREb_E7NpKw54NIT", + ), + album_type: Album, + thumbnails: [ + Thumbnail { + height: 226, + width: 226, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w226-h226-l90-rj", + }, + Thumbnail { + height: 544, + width: 544, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w544-h544-l90-rj", + }, + ], + }, + SearchResultAlbum { + title: "I'll Come Back", + artist: "Aj Lee & Blue Summit", + year: "2021", + explicit: NotExplicit, + browse_id: ChannelID( + "MPREb_tlzBJv4t1DX", + ), + album_type: Album, + thumbnails: [ + Thumbnail { + height: 226, + width: 226, + url: "https://lh3.googleusercontent.com/tYtZXhkW4vgvVZNhGX_0WulTu-YDXd_olELKV5li8l1Mk63Ptm9CUxuvuiOtD3O_GVsE1sFgcsguaaD4=w226-h226-l90-rj", + }, + Thumbnail { + height: 544, + width: 544, + url: "https://lh3.googleusercontent.com/tYtZXhkW4vgvVZNhGX_0WulTu-YDXd_olELKV5li8l1Mk63Ptm9CUxuvuiOtD3O_GVsE1sFgcsguaaD4=w544-h544-l90-rj", + }, + ], + }, + SearchResultAlbum { + title: "To Pimp A Butterfly", + artist: "Kendrick Lamar", + year: "2015", + explicit: IsExplicit, + browse_id: ChannelID( + "MPREb_3jGuGO44ziy", + ), + album_type: Album, + thumbnails: [ + Thumbnail { + height: 226, + width: 226, + url: "https://lh3.googleusercontent.com/L1iBW0CcjEQaXLP1coivJbjf7zSUncQ65_GpKHakOaRI81kS5pRV498PSg3VSmQg7LRMB0cJ6d-HzooO=w226-h226-l90-rj", + }, + Thumbnail { + height: 544, + width: 544, + url: "https://lh3.googleusercontent.com/L1iBW0CcjEQaXLP1coivJbjf7zSUncQ65_GpKHakOaRI81kS5pRV498PSg3VSmQg7LRMB0cJ6d-HzooO=w544-h544-l90-rj", + }, + ], + }, +] diff --git a/ytmapi-rs/test_json/get_library_artist_subscriptions_20240701.json b/ytmapi-rs/test_json/get_library_artist_subscriptions_20240701.json new file mode 100644 index 00000000..173c8a3c --- /dev/null +++ b/ytmapi-rs/test_json/get_library_artist_subscriptions_20240701.json @@ -0,0 +1,1162 @@ +{ + "responseContext": { + "serviceTrackingParams": [ + { + "service": "GFEEDBACK", + "params": [ + { + "key": "browse_id", + "value": "FEmusic_library_corpus_artists" + }, + { + "key": "browse_id_prefix", + "value": "" + }, + { + "key": "logged_in", + "value": "1" + }, + { + "key": "e", + "value": "23804281,23946420,23966208,23998056,24004644,24077241,24181174,24208765,24241378,24258343,24290971,24439361,24456089,24468724,24542367,24548627,24548629,24566687,51009781,51010235,51016856,51017346,51020570,51025415,51030103,51033765,51037342,51037353,51041512,51048489,51049131,51050361,51053689,51057842,51057853,51057863,51060353,51063643,51064835,51065188,51089007,51091331,51098297,51098299,51102409,51104988,51106995,51111738,51113656,51113661,51115184,51116067,51118058,51118932,51124104,51129209,51133103,51138613,51139379,51143864,51144926,51145218,51147415,51148687,51148976,51148983,51149607,51152050,51156037,51157411,51157841,51158514,51159332,51160545,51162170,51162595,51163639,51165467,51165568,51166922,51169131,51169754,51170247,51172674,51172688,51172691,51172702,51172707,51172712,51172719,51172726,51175733,51176511,51177818,51178314,51178329,51178340,51178355,51178982,51181298,51182274,51183910,51184022,51184066,51185177,51186494,51186528,51187241,51188417,51189505,51189514,51189826,51190059,51190073,51190080,51190087,51190198,51190211,51190220,51190229,51190652,51190724,51193593,51195231,51196515,51197687,51197690,51197697,51197706,51197960,51198197,51199193,51200020,51200047,51200249,51200256,51200291,51200298,51200569,51201331,51201352,51201363,51201374,51201383,51201426,51201433,51201440,51201447,51201814,51204109,51204329,51207182,51207193,51207200,51207215,51207486,51212142,51212464,51212553,51212569,51213732,51213785,51214208,51214404,51216387,51217235,51218765,51219243,51219303,51220612,51220799,51221011,51221150,51221181,51221342,51222374,51224921,51225439,51226707,51227393,51227772,51227902" + } + ] + }, + { + "service": "CSI", + "params": [ + { + "key": "c", + "value": "WEB_REMIX" + }, + { + "key": "cver", + "value": "1.20240624.01.00" + }, + { + "key": "yt_li", + "value": "1" + }, + { + "key": "GetBrowseSubscriptionsPage_rid", + "value": "0x69d9d94f2c1716cb" + } + ] + }, + { + "service": "ECATCHER", + "params": [ + { + "key": "client.version", + "value": "1.20000101" + }, + { + "key": "client.name", + "value": "WEB_REMIX" + } + ] + } + ] + }, + "contents": { + "singleColumnBrowseResultsRenderer": { + "tabs": [ + { + "tabRenderer": { + "endpoint": { + "clickTrackingParams": "CAcQ8JMBGAQiEwjivvf-vISHAxXgxTwCHdGSD90=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CAcQ8JMBGAQiEwjivvf-vISHAxXgxTwCHdGSD90=", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CAcQ8JMBGAQiEwjivvf-vISHAxXgxTwCHdGSD90=", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + } + } + }, + { + "clickTrackingParams": "CAcQ8JMBGAQiEwjivvf-vISHAxXgxTwCHdGSD90=", + "browseEndpoint": { + "browseId": "FEmusic_library_landing", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_LIBRARY_CONTENT_LANDING_PAGE" + } + } + } + } + ] + } + }, + "title": "Library", + "selected": true, + "content": { + "sectionListRenderer": { + "contents": [ + { + "musicShelfRenderer": { + "contents": [ + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CCMQyfQCGAAiEwjivvf-vISHAxXgxTwCHdGSD90=", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/ekgr9Uw3RvCzSov6-tEfVNKlH6w-C5rjm_AHQN842igNINVrJxD9eaXatLF2MLtCCWyd4TfDIeuIgGg=w60-h60-p-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/ekgr9Uw3RvCzSov6-tEfVNKlH6w-C5rjm_AHQN842igNINVrJxD9eaXatLF2MLtCCWyd4TfDIeuIgGg=w120-h120-p-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_CIRCLE", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CCgQhL8CIhMI4r73_ryEhwMV4MU8Ah3Rkg_d" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Calibre" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "19.2K subscribers" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCcQmvMFGAAiEwjivvf-vISHAxXgxTwCHdGSD90=", + "watchPlaylistEndpoint": { + "playlistId": "RDAOaBT7OiU7ouk981528QEBBQ", + "params": "wAEB8gECGAE%3D" + } + }, + "trackingParams": "CCcQmvMFGAAiEwjivvf-vISHAxXgxTwCHdGSD90=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCYQm_MFGAEiEwjivvf-vISHAxXgxTwCHdGSD90=", + "watchPlaylistEndpoint": { + "playlistId": "RDEMaBT7OiU7ouk981528QEBBQ", + "params": "wAEB" + } + }, + "trackingParams": "CCYQm_MFGAEiEwjivvf-vISHAxXgxTwCHdGSD90=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCUQkfsFGAIiEwjivvf-vISHAxXgxTwCHdGSD90=", + "shareEntityEndpoint": { + "serializedShareEntity": "GhhVQzQ4cjd2anF0aGtSRWY2TmRvTkV6d3c%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CCUQkfsFGAIiEwjivvf-vISHAxXgxTwCHdGSD90=" + } + } + ], + "trackingParams": "CCQQpzsiEwjivvf-vISHAxXgxTwCHdGSD90=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "flexColumnDisplayStyle": "MUSIC_RESPONSIVE_LIST_ITEM_FLEX_COLUMN_DISPLAY_STYLE_TWO_LINE_STACK", + "navigationEndpoint": { + "clickTrackingParams": "CCMQyfQCGAAiEwjivvf-vISHAxXgxTwCHdGSD90=", + "browseEndpoint": { + "browseId": "UC48r7vjqthkREf6NdoNEzww", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "itemHeight": "MUSIC_RESPONSIVE_LIST_ITEM_HEIGHT_TALL" + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CB0QyfQCGAEiEwjivvf-vISHAxXgxTwCHdGSD90=", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/dV3t3XLnMv0ah2iEoCvCH_FdN45qMH6jYUMsWmsH8t5LwAwgqPzvpDMioGqkgvWfZWrXbzpfenA2dcs=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/dV3t3XLnMv0ah2iEoCvCH_FdN45qMH6jYUMsWmsH8t5LwAwgqPzvpDMioGqkgvWfZWrXbzpfenA2dcs=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_CIRCLE", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CCIQhL8CIhMI4r73_ryEhwMV4MU8Ah3Rkg_d" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Have a Nice Life" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "22.3K subscribers" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCEQmvMFGAAiEwjivvf-vISHAxXgxTwCHdGSD90=", + "watchPlaylistEndpoint": { + "playlistId": "RDAO4UalgeEWwePLMk6awoiBDw", + "params": "wAEB8gECGAE%3D" + } + }, + "trackingParams": "CCEQmvMFGAAiEwjivvf-vISHAxXgxTwCHdGSD90=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCAQm_MFGAEiEwjivvf-vISHAxXgxTwCHdGSD90=", + "watchPlaylistEndpoint": { + "playlistId": "RDEM4UalgeEWwePLMk6awoiBDw", + "params": "wAEB" + } + }, + "trackingParams": "CCAQm_MFGAEiEwjivvf-vISHAxXgxTwCHdGSD90=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CB8QkfsFGAIiEwjivvf-vISHAxXgxTwCHdGSD90=", + "shareEntityEndpoint": { + "serializedShareEntity": "GhhVQ21jLXA1YTJDSHlDTnB5QWlJNDdNemc%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CB8QkfsFGAIiEwjivvf-vISHAxXgxTwCHdGSD90=" + } + } + ], + "trackingParams": "CB4QpzsiEwjivvf-vISHAxXgxTwCHdGSD90=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "flexColumnDisplayStyle": "MUSIC_RESPONSIVE_LIST_ITEM_FLEX_COLUMN_DISPLAY_STYLE_TWO_LINE_STACK", + "navigationEndpoint": { + "clickTrackingParams": "CB0QyfQCGAEiEwjivvf-vISHAxXgxTwCHdGSD90=", + "browseEndpoint": { + "browseId": "UCmc-p5a2CHyCNpyAiI47Mzg", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "itemHeight": "MUSIC_RESPONSIVE_LIST_ITEM_HEIGHT_TALL" + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CBcQyfQCGAIiEwjivvf-vISHAxXgxTwCHdGSD90=", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/h9i1qm_EXC_3-2E6OacFiwMB4tRYseuOps2PEHF71kmFQBYhOi-A-Np0PlPrEj5tikBRdnkk9yqKhQk=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/h9i1qm_EXC_3-2E6OacFiwMB4tRYseuOps2PEHF71kmFQBYhOi-A-Np0PlPrEj5tikBRdnkk9yqKhQk=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_CIRCLE", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FILL", + "trackingParams": "CBwQhL8CIhMI4r73_ryEhwMV4MU8Ah3Rkg_d" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "The Smile" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "152K subscribers" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle play" + } + ] + }, + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CBsQmvMFGAAiEwjivvf-vISHAxXgxTwCHdGSD90=", + "watchPlaylistEndpoint": { + "playlistId": "RDAOpvz-aaNM5RRdCVK-lFH-Jw", + "params": "wAEB8gECGAE%3D" + } + }, + "trackingParams": "CBsQmvMFGAAiEwjivvf-vISHAxXgxTwCHdGSD90=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CBoQm_MFGAEiEwjivvf-vISHAxXgxTwCHdGSD90=", + "watchPlaylistEndpoint": { + "playlistId": "RDEMpvz-aaNM5RRdCVK-lFH-Jw", + "params": "wAEB" + } + }, + "trackingParams": "CBoQm_MFGAEiEwjivvf-vISHAxXgxTwCHdGSD90=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CBkQkfsFGAIiEwjivvf-vISHAxXgxTwCHdGSD90=", + "shareEntityEndpoint": { + "serializedShareEntity": "GhhVQ2h5OHk3RXBVUkg0S19MWElIRU5ST0E%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CBkQkfsFGAIiEwjivvf-vISHAxXgxTwCHdGSD90=" + } + } + ], + "trackingParams": "CBgQpzsiEwjivvf-vISHAxXgxTwCHdGSD90=", + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "flexColumnDisplayStyle": "MUSIC_RESPONSIVE_LIST_ITEM_FLEX_COLUMN_DISPLAY_STYLE_TWO_LINE_STACK", + "navigationEndpoint": { + "clickTrackingParams": "CBcQyfQCGAIiEwjivvf-vISHAxXgxTwCHdGSD90=", + "browseEndpoint": { + "browseId": "UChy8y7EpURH4K_LXIHENROA", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "itemHeight": "MUSIC_RESPONSIVE_LIST_ITEM_HEIGHT_TALL" + } + } + ], + "trackingParams": "CBYQ-V4YACITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "shelfDivider": { + "musicShelfDividerRenderer": { + "hidden": true + } + } + } + } + ], + "trackingParams": "CAgQui8iEwjivvf-vISHAxXgxTwCHdGSD90=", + "header": { + "musicSideAlignedItemRenderer": { + "startItems": [ + { + "chipCloudRenderer": { + "chips": [ + { + "chipCloudChipRenderer": { + "navigationEndpoint": { + "clickTrackingParams": "CBUQ_V0YACITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBUQ_V0YACITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + }, + { + "clickTrackingParams": "CBUQ_V0YACITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBUQ_V0YACITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + } + } + } + ] + } + }, + "trackingParams": "CBUQ_V0YACITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "icon": { + "iconType": "CLOSE" + }, + "accessibilityData": { + "accessibilityData": { + "label": "Clear filters" + } + }, + "isSelected": true, + "onDeselectedCommand": { + "clickTrackingParams": "CBUQ_V0YACITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBUQ_V0YACITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + }, + { + "clickTrackingParams": "CBUQ_V0YACITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBUQ_V0YACITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + } + } + } + ] + } + } + } + }, + { + "chipCloudChipRenderer": { + "text": { + "runs": [ + { + "text": "Artists" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CBQQ_V0YASITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBQQ_V0YASITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "browseEndpoint": { + "browseId": "FEmusic_library_corpus_track_artists" + } + }, + { + "clickTrackingParams": "CBQQ_V0YASITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBQQ_V0YASITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "browseEndpoint": { + "browseId": "FEmusic_library_corpus_track_artists" + } + } + } + } + ] + } + }, + "trackingParams": "CBQQ_V0YASITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "accessibilityData": { + "accessibilityData": { + "label": "Show artists" + } + }, + "isSelected": true, + "onDeselectedCommand": { + "clickTrackingParams": "CBQQ_V0YASITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBQQ_V0YASITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + }, + { + "clickTrackingParams": "CBQQ_V0YASITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBQQ_V0YASITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + } + } + } + ] + } + }, + "uniqueId": "Artists" + } + }, + { + "chipCloudChipRenderer": { + "text": { + "runs": [ + { + "text": "Subscriptions" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CBMQ_V0YAiITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBMQ_V0YAiITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "browseEndpoint": { + "browseId": "FEmusic_library_corpus_artists", + "params": "ggMCCAU%3D" + } + }, + { + "clickTrackingParams": "CBMQ_V0YAiITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBMQ_V0YAiITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "browseEndpoint": { + "browseId": "FEmusic_library_corpus_artists", + "params": "ggMCCAU%3D" + } + } + } + } + ] + } + }, + "trackingParams": "CBMQ_V0YAiITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "accessibilityData": { + "accessibilityData": { + "label": "Show subscribed artists" + } + }, + "isSelected": true, + "onDeselectedCommand": { + "clickTrackingParams": "CBMQ_V0YAiITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBMQ_V0YAiITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "browseEndpoint": { + "browseId": "FEmusic_library_corpus_track_artists" + } + }, + { + "clickTrackingParams": "CBMQ_V0YAiITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBMQ_V0YAiITCOK-9_68hIcDFeDFPAId0ZIP3Q==", + "browseEndpoint": { + "browseId": "FEmusic_library_corpus_track_artists" + } + } + } + } + ] + } + }, + "uniqueId": "Subscriptions" + } + } + ], + "trackingParams": "CBIQ_F0YACITCOK-9_68hIcDFeDFPAId0ZIP3Q==" + } + } + ], + "endItems": [ + { + "musicSortFilterButtonRenderer": { + "title": { + + }, + "icon": { + "iconType": "ARROW_DROP_DOWN" + }, + "menu": { + "musicMultiSelectMenuRenderer": { + "title": { + "musicMenuTitleRenderer": { + "primaryText": { + "runs": [ + { + "text": "Sort by" + } + ] + } + } + }, + "options": [ + { + "musicMultiSelectMenuItemRenderer": { + "title": { + "runs": [ + { + "text": "Recently saved" + } + ] + }, + "formItemEntityKey": "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "selectedCommand": { + "clickTrackingParams": "CBAQk5QFGAAiEwjivvf-vISHAxXgxTwCHdGSD90=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBAQk5QFGAAiEwjivvf-vISHAxXgxTwCHdGSD90=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CBAQk5QFGAAiEwjivvf-vISHAxXgxTwCHdGSD90=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "newCheckedState": true + } + }, + { + "clickTrackingParams": "CBAQk5QFGAAiEwjivvf-vISHAxXgxTwCHdGSD90=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CBAQk5QFGAAiEwjivvf-vISHAxXgxTwCHdGSD90=", + "browseSectionListReloadEndpoint": { + "continuation": { + "reloadContinuationData": { + "continuation": "4qmFsgIyEh5GRW11c2ljX2xpYnJhcnlfY29ycHVzX2FydGlzdHMaEGdnTUdLZ1FJQUJBQm9BWUI%3D", + "clickTrackingParams": "CBEQxqYCIhMI4r73_ryEhwMV4MU8Ah3Rkg_d", + "showSpinnerOverlay": true + } + } + } + } + ] + } + }, + "trackingParams": "CBAQk5QFGAAiEwjivvf-vISHAxXgxTwCHdGSD90=", + "selectedIcon": { + "iconType": "CHECK" + }, + "selectedAccessibility": { + "accessibilityData": { + "label": "Recently saved selected" + } + }, + "deselectedAccessibility": { + "accessibilityData": { + "label": "Recently saved" + } + } + } + }, + { + "musicMultiSelectMenuItemRenderer": { + "title": { + "runs": [ + { + "text": "A to Z" + } + ] + }, + "formItemEntityKey": "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D", + "selectedCommand": { + "clickTrackingParams": "CA4Qk5QFGAEiEwjivvf-vISHAxXgxTwCHdGSD90=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CA4Qk5QFGAEiEwjivvf-vISHAxXgxTwCHdGSD90=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CA4Qk5QFGAEiEwjivvf-vISHAxXgxTwCHdGSD90=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CA4Qk5QFGAEiEwjivvf-vISHAxXgxTwCHdGSD90=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D", + "newCheckedState": true + } + }, + { + "clickTrackingParams": "CA4Qk5QFGAEiEwjivvf-vISHAxXgxTwCHdGSD90=", + "browseSectionListReloadEndpoint": { + "continuation": { + "reloadContinuationData": { + "continuation": "4qmFsgIyEh5GRW11c2ljX2xpYnJhcnlfY29ycHVzX2FydGlzdHMaEGdnTUdLZ1FJQVJBQW9BWUI%3D", + "clickTrackingParams": "CA8QxqYCIhMI4r73_ryEhwMV4MU8Ah3Rkg_d", + "showSpinnerOverlay": true + } + } + } + } + ] + } + }, + "trackingParams": "CA4Qk5QFGAEiEwjivvf-vISHAxXgxTwCHdGSD90=", + "selectedIcon": { + "iconType": "CHECK" + }, + "selectedAccessibility": { + "accessibilityData": { + "label": "A to Z selected" + } + }, + "deselectedAccessibility": { + "accessibilityData": { + "label": "A to Z" + } + } + } + }, + { + "musicMultiSelectMenuItemRenderer": { + "title": { + "runs": [ + { + "text": "Z to A" + } + ] + }, + "formItemEntityKey": "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "selectedCommand": { + "clickTrackingParams": "CAwQk5QFGAIiEwjivvf-vISHAxXgxTwCHdGSD90=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CAwQk5QFGAIiEwjivvf-vISHAxXgxTwCHdGSD90=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CAwQk5QFGAIiEwjivvf-vISHAxXgxTwCHdGSD90=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CAwQk5QFGAIiEwjivvf-vISHAxXgxTwCHdGSD90=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "newCheckedState": true + } + }, + { + "clickTrackingParams": "CAwQk5QFGAIiEwjivvf-vISHAxXgxTwCHdGSD90=", + "browseSectionListReloadEndpoint": { + "continuation": { + "reloadContinuationData": { + "continuation": "4qmFsgIyEh5GRW11c2ljX2xpYnJhcnlfY29ycHVzX2FydGlzdHMaEGdnTUdLZ1FJQVJBQm9BWUI%3D", + "clickTrackingParams": "CA0QxqYCIhMI4r73_ryEhwMV4MU8Ah3Rkg_d", + "showSpinnerOverlay": true + } + } + } + } + ] + } + }, + "trackingParams": "CAwQk5QFGAIiEwjivvf-vISHAxXgxTwCHdGSD90=", + "selectedIcon": { + "iconType": "CHECK" + }, + "selectedAccessibility": { + "accessibilityData": { + "label": "Z to A selected" + } + }, + "deselectedAccessibility": { + "accessibilityData": { + "label": "Z to A" + } + } + } + } + ], + "trackingParams": "CAsQkpQFIhMI4r73_ryEhwMV4MU8Ah3Rkg_d", + "formEntityKey": "EkNQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFIJABKAE%3D" + } + }, + "accessibility": { + "accessibilityData": { + "label": "Sort by - selected" + } + }, + "trackingParams": "CAoQkZQFGAEiEwjivvf-vISHAxXgxTwCHdGSD90=" + } + } + ], + "trackingParams": "CAkQxv4DIhMI4r73_ryEhwMV4MU8Ah3Rkg_d" + } + } + } + }, + "tabIdentifier": "FEmusic_library_landing", + "trackingParams": "CAcQ8JMBGAQiEwjivvf-vISHAxXgxTwCHdGSD90=" + } + }, + { + "tabRenderer": { + "endpoint": { + "clickTrackingParams": "CAQQ8JMBGAUiEwjivvf-vISHAxXgxTwCHdGSD90=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CAQQ8JMBGAUiEwjivvf-vISHAxXgxTwCHdGSD90=", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CAQQ8JMBGAUiEwjivvf-vISHAxXgxTwCHdGSD90=", + "browseEndpoint": { + "browseId": "FEmusic_offline" + } + } + } + }, + { + "clickTrackingParams": "CAQQ8JMBGAUiEwjivvf-vISHAxXgxTwCHdGSD90=", + "browseEndpoint": { + "browseId": "FEmusic_offline", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_DOWNLOADS_CONTENT_LANDING_PAGE" + } + } + } + } + ] + } + }, + "title": "Downloads", + "selected": false, + "content": { + "sectionListRenderer": { + "continuations": [ + { + "reloadContinuationData": { + "continuation": "4qmFsgIdEg9GRW11c2ljX29mZmxpbmUaCnVnTUNDQUUlM0Q%3D", + "clickTrackingParams": "CAYQxqYCIhMI4r73_ryEhwMV4MU8Ah3Rkg_d" + } + } + ], + "trackingParams": "CAUQui8iEwjivvf-vISHAxXgxTwCHdGSD90=" + } + }, + "tabIdentifier": "FEmusic_offline", + "trackingParams": "CAQQ8JMBGAUiEwjivvf-vISHAxXgxTwCHdGSD90=" + } + }, + { + "tabRenderer": { + "endpoint": { + "clickTrackingParams": "CAEQ8JMBGAYiEwjivvf-vISHAxXgxTwCHdGSD90=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CAEQ8JMBGAYiEwjivvf-vISHAxXgxTwCHdGSD90=", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CAEQ8JMBGAYiEwjivvf-vISHAxXgxTwCHdGSD90=", + "browseEndpoint": { + "browseId": "FEmusic_library_privately_owned_landing" + } + } + } + }, + { + "clickTrackingParams": "CAEQ8JMBGAYiEwjivvf-vISHAxXgxTwCHdGSD90=", + "browseEndpoint": { + "browseId": "FEmusic_library_privately_owned_landing", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_PRIVATELY_OWNED_CONTENT_LANDING_PAGE" + } + } + } + } + ] + } + }, + "title": "Uploads", + "selected": false, + "content": { + "sectionListRenderer": { + "continuations": [ + { + "reloadContinuationData": { + "continuation": "4qmFsgI1EidGRW11c2ljX2xpYnJhcnlfcHJpdmF0ZWx5X293bmVkX2xhbmRpbmcaCnVnTUNDQUUlM0Q%3D", + "clickTrackingParams": "CAMQxqYCIhMI4r73_ryEhwMV4MU8Ah3Rkg_d" + } + } + ], + "trackingParams": "CAIQui8iEwjivvf-vISHAxXgxTwCHdGSD90=" + } + }, + "tabIdentifier": "FEmusic_library_privately_owned_landing", + "trackingParams": "CAEQ8JMBGAYiEwjivvf-vISHAxXgxTwCHdGSD90=", + "targetId": "music-library-uploads-tab" + } + } + ] + } + }, + "trackingParams": "CAAQhGciEwjivvf-vISHAxXgxTwCHdGSD90=", + "frameworkUpdates": { + "entityBatchUpdate": { + "mutations": [ + { + "entityKey": "EkNQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFIJABKAE%3D", + "type": "ENTITY_MUTATION_TYPE_REPLACE", + "payload": { + "musicForm": { + "id": "EkNQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFIJABKAE%3D", + "booleanChoiceEntityKeys": [ + "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D" + ] + } + } + }, + { + "entityKey": "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "type": "ENTITY_MUTATION_TYPE_REPLACE", + "payload": { + "musicFormBooleanChoice": { + "id": "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "parentFormEntityKey": "EkNQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFIJABKAE%3D", + "selected": false, + "opaqueToken": "SortSpec_Type_ADDED_TIMESTAMP_SortSpec_Order_DESCENDING" + } + } + }, + { + "entityKey": "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D", + "type": "ENTITY_MUTATION_TYPE_REPLACE", + "payload": { + "musicFormBooleanChoice": { + "id": "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D", + "parentFormEntityKey": "EkNQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFIJABKAE%3D", + "selected": false, + "opaqueToken": "SortSpec_Type_ENTITY_NAME_SortSpec_Order_ASCENDING" + } + } + }, + { + "entityKey": "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "type": "ENTITY_MUTATION_TYPE_REPLACE", + "payload": { + "musicFormBooleanChoice": { + "id": "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "parentFormEntityKey": "EkNQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfU1VCU0NSSVBUSU9OU19QQUdFIJABKAE%3D", + "selected": false, + "opaqueToken": "SortSpec_Type_ENTITY_NAME_SortSpec_Order_DESCENDING" + } + } + } + ], + "timestamp": { + "seconds": "1719789997", + "nanos": 192245246 + } + } + } +} + diff --git a/ytmapi-rs/test_json/get_library_artist_subscriptions_20240701_output.txt b/ytmapi-rs/test_json/get_library_artist_subscriptions_20240701_output.txt new file mode 100644 index 00000000..54a254d2 --- /dev/null +++ b/ytmapi-rs/test_json/get_library_artist_subscriptions_20240701_output.txt @@ -0,0 +1,53 @@ +[ + GetLibraryArtistSubscription { + name: "Calibre", + subscribers: "19.2K subscribers", + channel_id: "UC48r7vjqthkREf6NdoNEzww", + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/ekgr9Uw3RvCzSov6-tEfVNKlH6w-C5rjm_AHQN842igNINVrJxD9eaXatLF2MLtCCWyd4TfDIeuIgGg=w60-h60-p-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/ekgr9Uw3RvCzSov6-tEfVNKlH6w-C5rjm_AHQN842igNINVrJxD9eaXatLF2MLtCCWyd4TfDIeuIgGg=w120-h120-p-l90-rj", + }, + ], + }, + GetLibraryArtistSubscription { + name: "Have a Nice Life", + subscribers: "22.3K subscribers", + channel_id: "UCmc-p5a2CHyCNpyAiI47Mzg", + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/dV3t3XLnMv0ah2iEoCvCH_FdN45qMH6jYUMsWmsH8t5LwAwgqPzvpDMioGqkgvWfZWrXbzpfenA2dcs=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/dV3t3XLnMv0ah2iEoCvCH_FdN45qMH6jYUMsWmsH8t5LwAwgqPzvpDMioGqkgvWfZWrXbzpfenA2dcs=w120-h120-l90-rj", + }, + ], + }, + GetLibraryArtistSubscription { + name: "The Smile", + subscribers: "152K subscribers", + channel_id: "UChy8y7EpURH4K_LXIHENROA", + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/h9i1qm_EXC_3-2E6OacFiwMB4tRYseuOps2PEHF71kmFQBYhOi-A-Np0PlPrEj5tikBRdnkk9yqKhQk=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/h9i1qm_EXC_3-2E6OacFiwMB4tRYseuOps2PEHF71kmFQBYhOi-A-Np0PlPrEj5tikBRdnkk9yqKhQk=w120-h120-l90-rj", + }, + ], + }, +] diff --git a/ytmapi-rs/test_json/get_library_songs_20240701.json b/ytmapi-rs/test_json/get_library_songs_20240701.json new file mode 100644 index 00000000..153005bb --- /dev/null +++ b/ytmapi-rs/test_json/get_library_songs_20240701.json @@ -0,0 +1,13184 @@ +{ + "responseContext": { + "serviceTrackingParams": [ + { + "service": "GFEEDBACK", + "params": [ + { + "key": "browse_id", + "value": "FEmusic_liked_videos" + }, + { + "key": "browse_id_prefix", + "value": "" + }, + { + "key": "logged_in", + "value": "1" + }, + { + "key": "e", + "value": "23804281,23946420,23966208,23998056,24004644,24077241,24181174,24208765,24241378,24258343,24290971,24439361,24456089,24468724,24542367,24548627,24548629,24566687,51009781,51010235,51016856,51017346,51020570,51025415,51030103,51033765,51037342,51037353,51041512,51048489,51049131,51050361,51053689,51057842,51057853,51057863,51060353,51063643,51064835,51065188,51089007,51091331,51098297,51098299,51102409,51104988,51106995,51111738,51113656,51113661,51115184,51116067,51118058,51118932,51124104,51129209,51133103,51138613,51139379,51143864,51144926,51145218,51147415,51148687,51148976,51148983,51149607,51152050,51156037,51157411,51157841,51158514,51159332,51160545,51162170,51162595,51163639,51165467,51165568,51166922,51169131,51169754,51170247,51172674,51172688,51172691,51172702,51172707,51172712,51172719,51172726,51175733,51176511,51177818,51178314,51178329,51178340,51178355,51178982,51181298,51182274,51183910,51184022,51184066,51185177,51186494,51186528,51187241,51188417,51189505,51189514,51189826,51190059,51190073,51190080,51190087,51190198,51190211,51190220,51190229,51190652,51190724,51193593,51195231,51196515,51197687,51197690,51197697,51197706,51197960,51198197,51199193,51200020,51200047,51200249,51200256,51200291,51200298,51200569,51201331,51201352,51201363,51201374,51201383,51201426,51201433,51201440,51201447,51201814,51204109,51204329,51207182,51207193,51207200,51207215,51207486,51212142,51212464,51212553,51212569,51213732,51213785,51214208,51214404,51216387,51217235,51218765,51219243,51219303,51220612,51220799,51221011,51221150,51221181,51221342,51222374,51224921,51225439,51226707,51227393,51227772,51227902" + } + ] + }, + { + "service": "CSI", + "params": [ + { + "key": "c", + "value": "WEB_REMIX" + }, + { + "key": "cver", + "value": "1.20240624.01.00" + }, + { + "key": "yt_li", + "value": "1" + }, + { + "key": "GetBrowseCorpusTracksPage_rid", + "value": "0x11d2c21f3259b911" + } + ] + }, + { + "service": "ECATCHER", + "params": [ + { + "key": "client.version", + "value": "1.20000101" + }, + { + "key": "client.name", + "value": "WEB_REMIX" + } + ] + } + ] + }, + "contents": { + "singleColumnBrowseResultsRenderer": { + "tabs": [ + { + "tabRenderer": { + "endpoint": { + "clickTrackingParams": "CAcQ8JMBGAQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CAcQ8JMBGAQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CAcQ8JMBGAQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + } + } + }, + { + "clickTrackingParams": "CAcQ8JMBGAQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "FEmusic_library_landing", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_LIBRARY_CONTENT_LANDING_PAGE" + } + } + } + } + ] + } + }, + "title": "Library", + "selected": true, + "content": { + "sectionListRenderer": { + "contents": [ + { + "musicShelfRenderer": { + "contents": [ + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CKkDEMn0AhgAIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicIconBadgeRenderer": { + "trackingParams": "CKoDEN_qAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "icon": { + "iconType": "MUSIC_SHUFFLE" + }, + "backgroundColor": 4280098077 + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Shuffle all" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + } + ], + "navigationEndpoint": { + "clickTrackingParams": "CKkDEMn0AhgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchPlaylistEndpoint": { + "playlistId": "MLCT", + "params": "wAEB8gECKAE%3D" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CJcDEMn0AhgBIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/8_5wtd1RFFiVSrps7PcqY2rMdzI3I00WK6ATtBK6c3oIEzLVp0eg6kFprjEJfXqay8hFPJIE0o5OJYLt=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/8_5wtd1RFFiVSrps7PcqY2rMdzI3I00WK6ATtBK6c3oIEzLVp0eg6kFprjEJfXqay8hFPJIE0o5OJYLt=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CKgDEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CKcDEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "0Toq8VrbLTQ", + "playlistId": "MLCT", + "index": 1, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CKcDEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play The Winter of Our Passing - Katatonia - 3 minutes, 19 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause The Winter of Our Passing - Katatonia - 3 minutes, 19 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "The Winter of Our Passing", + "navigationEndpoint": { + "clickTrackingParams": "CJcDEMn0AhgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "0Toq8VrbLTQ", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Katatonia", + "navigationEndpoint": { + "clickTrackingParams": "CJcDEMn0AhgBIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCO1Ue7PBwGgYjTVgA_yrtHQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "City Burials", + "navigationEndpoint": { + "clickTrackingParams": "CJcDEMn0AhgBIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_6SxVm1I0tl9", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "3:19" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKYDEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "0Toq8VrbLTQ", + "playlistId": "RDAMVM0Toq8VrbLTQ", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk0wVG9xOFZyYkxUUQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CKYDEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKQDEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "0Toq8VrbLTQ", + "onEmptyQueue": { + "clickTrackingParams": "CKQDEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "0Toq8VrbLTQ" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CKQDEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CKUDEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CKQDEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKIDEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "0Toq8VrbLTQ", + "onEmptyQueue": { + "clickTrackingParams": "CKIDEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "0Toq8VrbLTQ" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CKIDEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CKMDEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CKIDEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "toggleMenuServiceItemRenderer": { + "defaultText": { + "runs": [ + { + "text": "Remove from library" + } + ] + }, + "defaultIcon": { + "iconType": "LIBRARY_SAVED" + }, + "defaultServiceEndpoint": { + "clickTrackingParams": "CKEDEIT_BRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "feedbackEndpoint": { + "feedbackToken": "AB9zfpJweMFK78ZGc4BVhcuxCGJtNl71EWLk8ZA7fWlN7V_jx2YL9oIqabHbfm2csGUByk0CMZpQcs0v0Ty46j_pgZdwlQsjrA", + "actions": [ + { + "clickTrackingParams": "CKEDEIT_BRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "hideEnclosingAction": { + "hack": true + } + } + ] + } + }, + "toggledText": { + "runs": [ + { + "text": "Save to library" + } + ] + }, + "toggledIcon": { + "iconType": "LIBRARY_ADD" + }, + "toggledServiceEndpoint": { + "clickTrackingParams": "CKEDEIT_BRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "feedbackEndpoint": { + "feedbackToken": "AB9zfpKKiYM8ID11llmuHbgtddkSkXfhixNrFwD25CginkqpNM9KBvl1E3fszJOXruitt256O5_17FvUx9chLjB5WVAdLUDrLw" + } + }, + "trackingParams": "CKEDEIT_BRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CKADENGqBRgEIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "0Toq8VrbLTQ", + "onAddCommand": { + "clickTrackingParams": "CKADENGqBRgEIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "0Toq8VrbLTQ", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CKADENGqBRgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJ8DEMOUBhgFIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "0Toq8VrbLTQ" + } + }, + "trackingParams": "CJ8DEMOUBhgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJ4DEI_7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_6SxVm1I0tl9", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CJ4DEI_7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJ0DEJD7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCO1Ue7PBwGgYjTVgA_yrtHQ", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CJ0DEJD7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJwDEJH7BRgIIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgswVG9xOFZyYkxUUQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CJwDEJH7BRgIIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CJoDEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "0Toq8VrbLTQ" + }, + "likeStatus": "LIKE", + "trackingParams": "CJsDEKVBGAkiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CJsDEKVBGAkiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "0Toq8VrbLTQ" + }, + "actions": [ + { + "clickTrackingParams": "CJsDEKVBGAkiEwio_smWvISHAxXvu0sFHd1oAh0=", + "musicLibraryStatusUpdateCommand": { + "libraryStatus": "MUSIC_LIBRARY_STATUS_IN_LIBRARY", + "addToLibraryFeedbackToken": "AB9zfpKKiYM8ID11llmuHbgtddkSkXfhixNrFwD25CginkqpNM9KBvl1E3fszJOXruitt256O5_17FvUx9chLjB5WVAdLUDrLw" + } + } + ] + } + }, + { + "clickTrackingParams": "CJsDEKVBGAkiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "0Toq8VrbLTQ" + } + } + }, + { + "clickTrackingParams": "CJsDEKVBGAkiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "0Toq8VrbLTQ" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "badges": [ + { + "musicInlineBadgeRenderer": { + "trackingParams": "CJkDEKHtAhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "icon": { + "iconType": "MUSIC_EXPLICIT_BADGE" + }, + "accessibilityData": { + "accessibilityData": { + "label": "Explicit" + } + } + } + } + ], + "playlistItemData": { + "videoId": "0Toq8VrbLTQ" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CJgDEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KCzBUb3E4VnJiTFRREgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CJgDEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CIcDEMn0AhgCIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CJYDEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CJUDEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "-7avE0GKZrA", + "playlistId": "MLCT", + "index": 2, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CJUDEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Pyramid Strings - Radiohead - 1 minute, 19 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Pyramid Strings - Radiohead - 1 minute, 19 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Pyramid Strings", + "navigationEndpoint": { + "clickTrackingParams": "CIcDEMn0AhgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "-7avE0GKZrA", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CIcDEMn0AhgCIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CIcDEMn0AhgCIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "1:19" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJQDEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "-7avE0GKZrA", + "playlistId": "RDAMVM-7avE0GKZrA", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk0tN2F2RTBHS1pyQQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CJQDEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJIDEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "-7avE0GKZrA", + "onEmptyQueue": { + "clickTrackingParams": "CJIDEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "-7avE0GKZrA" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CJIDEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CJMDEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CJIDEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJADEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "-7avE0GKZrA", + "onEmptyQueue": { + "clickTrackingParams": "CJADEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "-7avE0GKZrA" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CJADEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CJEDEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CJADEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CI8DENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "-7avE0GKZrA", + "onAddCommand": { + "clickTrackingParams": "CI8DENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "-7avE0GKZrA", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CI8DENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CI4DEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "-7avE0GKZrA" + } + }, + "trackingParams": "CI4DEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CI0DEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CI0DEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIwDEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CIwDEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIsDEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgstN2F2RTBHS1pyQQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CIsDEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CIkDEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "-7avE0GKZrA" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CIoDEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CIoDEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "-7avE0GKZrA" + } + } + }, + { + "clickTrackingParams": "CIoDEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "-7avE0GKZrA" + } + } + }, + { + "clickTrackingParams": "CIoDEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "-7avE0GKZrA" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "-7avE0GKZrA" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CIgDEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KCy03YXZFMEdLWnJBEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CIgDEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CPcCEMn0AhgDIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CIYDEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CIUDEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "1ACmCuuIaMQ", + "playlistId": "MLCT", + "index": 3, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CIUDEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play How to Disappear into Strings - Radiohead - 5 minutes, 33 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause How to Disappear into Strings - Radiohead - 5 minutes, 33 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "How to Disappear into Strings", + "navigationEndpoint": { + "clickTrackingParams": "CPcCEMn0AhgDIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "1ACmCuuIaMQ", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CPcCEMn0AhgDIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CPcCEMn0AhgDIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "5:33" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIQDEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "1ACmCuuIaMQ", + "playlistId": "RDAMVM1ACmCuuIaMQ", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk0xQUNtQ3V1SWFNUQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CIQDEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIIDEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "1ACmCuuIaMQ", + "onEmptyQueue": { + "clickTrackingParams": "CIIDEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "1ACmCuuIaMQ" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CIIDEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CIMDEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CIIDEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIADEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "1ACmCuuIaMQ", + "onEmptyQueue": { + "clickTrackingParams": "CIADEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "1ACmCuuIaMQ" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CIADEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CIEDEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CIADEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CP8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "1ACmCuuIaMQ", + "onAddCommand": { + "clickTrackingParams": "CP8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "1ACmCuuIaMQ", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CP8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CP4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "1ACmCuuIaMQ" + } + }, + "trackingParams": "CP4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CP0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CP0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CPwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgsxQUNtQ3V1SWFNUQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CPsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CPkCEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "1ACmCuuIaMQ" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CPoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CPoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "1ACmCuuIaMQ" + } + } + }, + { + "clickTrackingParams": "CPoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "1ACmCuuIaMQ" + } + } + }, + { + "clickTrackingParams": "CPoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "1ACmCuuIaMQ" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "1ACmCuuIaMQ" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CPgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KCzFBQ21DdXVJYU1REgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CPgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "COcCEMn0AhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CPYCEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CPUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "1WzCN1syZfc", + "playlistId": "MLCT", + "index": 4, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CPUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Untitled v2 - Radiohead - 47 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Untitled v2 - Radiohead - 47 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Untitled v2", + "navigationEndpoint": { + "clickTrackingParams": "COcCEMn0AhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "1WzCN1syZfc", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "COcCEMn0AhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "COcCEMn0AhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "0:47" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "1WzCN1syZfc", + "playlistId": "RDAMVM1WzCN1syZfc", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk0xV3pDTjFzeVpmYw%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CPQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "1WzCN1syZfc", + "onEmptyQueue": { + "clickTrackingParams": "CPICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "1WzCN1syZfc" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CPICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CPMCEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CPICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "1WzCN1syZfc", + "onEmptyQueue": { + "clickTrackingParams": "CPACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "1WzCN1syZfc" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CPACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CPECEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CPACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CO8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "1WzCN1syZfc", + "onAddCommand": { + "clickTrackingParams": "CO8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "1WzCN1syZfc", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CO8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CO4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "1WzCN1syZfc" + } + }, + "trackingParams": "CO4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CO0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CO0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "COwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "COwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "COsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgsxV3pDTjFzeVpmYw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "COsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "COkCEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "1WzCN1syZfc" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "COoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "COoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "1WzCN1syZfc" + } + } + }, + { + "clickTrackingParams": "COoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "1WzCN1syZfc" + } + } + }, + { + "clickTrackingParams": "COoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "1WzCN1syZfc" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "1WzCN1syZfc" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "COgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KCzFXekNOMXN5WmZjEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "COgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CNcCEMn0AhgFIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "COYCEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "COUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "1pTnps5RQeE", + "playlistId": "MLCT", + "index": 5, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "COUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Morning Bell - Radiohead - 4 minutes, 36 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Morning Bell - Radiohead - 4 minutes, 36 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Morning Bell", + "navigationEndpoint": { + "clickTrackingParams": "CNcCEMn0AhgFIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "1pTnps5RQeE", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CNcCEMn0AhgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CNcCEMn0AhgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "4:36" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "COQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "1pTnps5RQeE", + "playlistId": "RDAMVM1pTnps5RQeE", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk0xcFRucHM1UlFlRQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "COQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "COICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "1pTnps5RQeE", + "onEmptyQueue": { + "clickTrackingParams": "COICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "1pTnps5RQeE" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "COICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "COMCEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "COICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "COACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "1pTnps5RQeE", + "onEmptyQueue": { + "clickTrackingParams": "COACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "1pTnps5RQeE" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "COACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "COECEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "COACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CN8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "1pTnps5RQeE", + "onAddCommand": { + "clickTrackingParams": "CN8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "1pTnps5RQeE", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CN8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CN4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "1pTnps5RQeE" + } + }, + "trackingParams": "CN4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CN0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CN0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CNwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgsxcFRucHM1UlFlRQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CNsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CNkCEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "1pTnps5RQeE" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CNoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CNoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "1pTnps5RQeE" + } + } + }, + { + "clickTrackingParams": "CNoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "1pTnps5RQeE" + } + } + }, + { + "clickTrackingParams": "CNoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "1pTnps5RQeE" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "1pTnps5RQeE" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CNgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KCzFwVG5wczVSUWVFEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CNgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CMcCEMn0AhgGIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CNYCEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CNUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "2Hjrxn8qeig", + "playlistId": "MLCT", + "index": 6, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CNUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Untitled - Radiohead - 53 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Untitled - Radiohead - 53 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Untitled", + "navigationEndpoint": { + "clickTrackingParams": "CMcCEMn0AhgGIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "2Hjrxn8qeig", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CMcCEMn0AhgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CMcCEMn0AhgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "0:53" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "2Hjrxn8qeig", + "playlistId": "RDAMVM2Hjrxn8qeig", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk0ySGpyeG44cWVpZw%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CNQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "2Hjrxn8qeig", + "onEmptyQueue": { + "clickTrackingParams": "CNICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "2Hjrxn8qeig" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CNICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CNMCEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CNICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "2Hjrxn8qeig", + "onEmptyQueue": { + "clickTrackingParams": "CNACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "2Hjrxn8qeig" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CNACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CNECEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CNACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CM8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "2Hjrxn8qeig", + "onAddCommand": { + "clickTrackingParams": "CM8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "2Hjrxn8qeig", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CM8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CM4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "2Hjrxn8qeig" + } + }, + "trackingParams": "CM4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CM0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CM0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CMwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgsySGpyeG44cWVpZw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CMsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CMkCEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "2Hjrxn8qeig" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CMoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CMoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "2Hjrxn8qeig" + } + } + }, + { + "clickTrackingParams": "CMoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "2Hjrxn8qeig" + } + } + }, + { + "clickTrackingParams": "CMoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "2Hjrxn8qeig" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "2Hjrxn8qeig" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CMgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KCzJIanJ4bjhxZWlnEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CMgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CLcCEMn0AhgHIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CMYCEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CMUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "9vPi8mWg-_8", + "playlistId": "MLCT", + "index": 7, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CMUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Fog (Again Again Version) - Radiohead - 2 minutes, 26 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Fog (Again Again Version) - Radiohead - 2 minutes, 26 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Fog (Again Again Version)", + "navigationEndpoint": { + "clickTrackingParams": "CLcCEMn0AhgHIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "9vPi8mWg-_8", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CLcCEMn0AhgHIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CLcCEMn0AhgHIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "2:26" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "9vPi8mWg-_8", + "playlistId": "RDAMVM9vPi8mWg-_8", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk05dlBpOG1XZy1fOA%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CMQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "9vPi8mWg-_8", + "onEmptyQueue": { + "clickTrackingParams": "CMICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "9vPi8mWg-_8" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CMICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CMMCEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CMICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "9vPi8mWg-_8", + "onEmptyQueue": { + "clickTrackingParams": "CMACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "9vPi8mWg-_8" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CMACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CMECEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CMACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CL8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "9vPi8mWg-_8", + "onAddCommand": { + "clickTrackingParams": "CL8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "9vPi8mWg-_8", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CL8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CL4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "9vPi8mWg-_8" + } + }, + "trackingParams": "CL4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CL0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CL0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CLwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "Cgs5dlBpOG1XZy1fOA%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CLsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CLkCEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "9vPi8mWg-_8" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CLoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CLoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "9vPi8mWg-_8" + } + } + }, + { + "clickTrackingParams": "CLoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "9vPi8mWg-_8" + } + } + }, + { + "clickTrackingParams": "CLoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "9vPi8mWg-_8" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "9vPi8mWg-_8" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CLgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KCzl2UGk4bVdnLV84EgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CLgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CKcCEMn0AhgIIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CLYCEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CLUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "DWoL_N4zXUI", + "playlistId": "MLCT", + "index": 8, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CLUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Morning Bell/Amnesiac - Radiohead - 3 minutes, 15 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Morning Bell/Amnesiac - Radiohead - 3 minutes, 15 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Morning Bell/Amnesiac", + "navigationEndpoint": { + "clickTrackingParams": "CKcCEMn0AhgIIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "DWoL_N4zXUI", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CKcCEMn0AhgIIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CKcCEMn0AhgIIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "3:15" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "DWoL_N4zXUI", + "playlistId": "RDAMVMDWoL_N4zXUI", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1EV29MX040elhVSQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CLQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "DWoL_N4zXUI", + "onEmptyQueue": { + "clickTrackingParams": "CLICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "DWoL_N4zXUI" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CLICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CLMCEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CLICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "DWoL_N4zXUI", + "onEmptyQueue": { + "clickTrackingParams": "CLACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "DWoL_N4zXUI" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CLACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CLECEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CLACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CK8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "DWoL_N4zXUI", + "onAddCommand": { + "clickTrackingParams": "CK8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "DWoL_N4zXUI", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CK8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CK4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "DWoL_N4zXUI" + } + }, + "trackingParams": "CK4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CK0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CK0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CKwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtEV29MX040elhVSQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CKsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CKkCEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "DWoL_N4zXUI" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CKoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CKoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "DWoL_N4zXUI" + } + } + }, + { + "clickTrackingParams": "CKoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "DWoL_N4zXUI" + } + } + }, + { + "clickTrackingParams": "CKoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "DWoL_N4zXUI" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "DWoL_N4zXUI" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CKgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC0RXb0xfTjR6WFVJEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CKgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CJcCEMn0AhgJIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CKYCEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CKUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "GcIyKK8m4qo", + "playlistId": "MLCT", + "index": 9, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CKUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play If You Say the Word - Radiohead - 4 minutes, 21 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause If You Say the Word - Radiohead - 4 minutes, 21 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "If You Say the Word", + "navigationEndpoint": { + "clickTrackingParams": "CJcCEMn0AhgJIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "GcIyKK8m4qo", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CJcCEMn0AhgJIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CJcCEMn0AhgJIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "4:21" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "GcIyKK8m4qo", + "playlistId": "RDAMVMGcIyKK8m4qo", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1HY0l5S0s4bTRxbw%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CKQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "GcIyKK8m4qo", + "onEmptyQueue": { + "clickTrackingParams": "CKICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "GcIyKK8m4qo" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CKICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CKMCEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CKICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "GcIyKK8m4qo", + "onEmptyQueue": { + "clickTrackingParams": "CKACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "GcIyKK8m4qo" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CKACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CKECEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CKACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJ8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "GcIyKK8m4qo", + "onAddCommand": { + "clickTrackingParams": "CJ8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "GcIyKK8m4qo", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CJ8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJ4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "GcIyKK8m4qo" + } + }, + "trackingParams": "CJ4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJ0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CJ0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CJwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtHY0l5S0s4bTRxbw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CJsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CJkCEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "GcIyKK8m4qo" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CJoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CJoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "GcIyKK8m4qo" + } + } + }, + { + "clickTrackingParams": "CJoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "GcIyKK8m4qo" + } + } + }, + { + "clickTrackingParams": "CJoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "GcIyKK8m4qo" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "GcIyKK8m4qo" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CJgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC0djSXlLSzhtNHFvEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CJgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CIcCEMn0AhgKIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CJYCEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CJUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "Gy9sQ_7bMk8", + "playlistId": "MLCT", + "index": 10, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CJUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Motion Picture Soundtrack - Radiohead - 3 minutes, 21 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Motion Picture Soundtrack - Radiohead - 3 minutes, 21 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Motion Picture Soundtrack", + "navigationEndpoint": { + "clickTrackingParams": "CIcCEMn0AhgKIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "Gy9sQ_7bMk8", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CIcCEMn0AhgKIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CIcCEMn0AhgKIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "3:21" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "Gy9sQ_7bMk8", + "playlistId": "RDAMVMGy9sQ_7bMk8", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1HeTlzUV83Yk1rOA%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CJQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "Gy9sQ_7bMk8", + "onEmptyQueue": { + "clickTrackingParams": "CJICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "Gy9sQ_7bMk8" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CJICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CJMCEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CJICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "Gy9sQ_7bMk8", + "onEmptyQueue": { + "clickTrackingParams": "CJACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "Gy9sQ_7bMk8" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CJACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CJECEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CJACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CI8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "Gy9sQ_7bMk8", + "onAddCommand": { + "clickTrackingParams": "CI8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "Gy9sQ_7bMk8", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CI8CENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CI4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "Gy9sQ_7bMk8" + } + }, + "trackingParams": "CI4CEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CI0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CI0CEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CIwCEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtHeTlzUV83Yk1rOA%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CIsCEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CIkCEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "Gy9sQ_7bMk8" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CIoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CIoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "Gy9sQ_7bMk8" + } + } + }, + { + "clickTrackingParams": "CIoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "Gy9sQ_7bMk8" + } + } + }, + { + "clickTrackingParams": "CIoCEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "Gy9sQ_7bMk8" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "Gy9sQ_7bMk8" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CIgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC0d5OXNRXzdiTWs4EgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CIgCEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CPcBEMn0AhgLIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CIYCEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CIUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "HY_UbJ3rEfY", + "playlistId": "MLCT", + "index": 11, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CIUCEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play How to Disappear Completely - Radiohead - 5 minutes, 57 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause How to Disappear Completely - Radiohead - 5 minutes, 57 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "How to Disappear Completely", + "navigationEndpoint": { + "clickTrackingParams": "CPcBEMn0AhgLIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "HY_UbJ3rEfY", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CPcBEMn0AhgLIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CPcBEMn0AhgLIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "5:57" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "HY_UbJ3rEfY", + "playlistId": "RDAMVMHY_UbJ3rEfY", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1IWV9VYkozckVmWQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CIQCEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "HY_UbJ3rEfY", + "onEmptyQueue": { + "clickTrackingParams": "CIICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "HY_UbJ3rEfY" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CIICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CIMCEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CIICEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "HY_UbJ3rEfY", + "onEmptyQueue": { + "clickTrackingParams": "CIACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "HY_UbJ3rEfY" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CIACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CIECEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CIACEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CP8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "HY_UbJ3rEfY", + "onAddCommand": { + "clickTrackingParams": "CP8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "HY_UbJ3rEfY", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CP8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CP4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "HY_UbJ3rEfY" + } + }, + "trackingParams": "CP4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CP0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CP0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CPwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtIWV9VYkozckVmWQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CPsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CPkBEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "HY_UbJ3rEfY" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CPoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CPoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "HY_UbJ3rEfY" + } + } + }, + { + "clickTrackingParams": "CPoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "HY_UbJ3rEfY" + } + } + }, + { + "clickTrackingParams": "CPoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "HY_UbJ3rEfY" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "HY_UbJ3rEfY" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CPgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC0hZX1ViSjNyRWZZEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CPgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "COcBEMn0AhgMIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CPYBEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CPUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "JFMq6lCJdHA", + "playlistId": "MLCT", + "index": 12, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CPUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Packt Like Sardines In a Crushd Tin Box - Radiohead - 4 minutes, 1 second" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Packt Like Sardines In a Crushd Tin Box - Radiohead - 4 minutes, 1 second" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Packt Like Sardines In a Crushd Tin Box", + "navigationEndpoint": { + "clickTrackingParams": "COcBEMn0AhgMIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "JFMq6lCJdHA", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "COcBEMn0AhgMIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "COcBEMn0AhgMIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "4:01" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CPQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "JFMq6lCJdHA", + "playlistId": "RDAMVMJFMq6lCJdHA", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1KRk1xNmxDSmRIQQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CPQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "JFMq6lCJdHA", + "onEmptyQueue": { + "clickTrackingParams": "CPIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "JFMq6lCJdHA" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CPIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CPMBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CPIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CPABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "JFMq6lCJdHA", + "onEmptyQueue": { + "clickTrackingParams": "CPABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "JFMq6lCJdHA" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CPABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CPEBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CPABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CO8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "JFMq6lCJdHA", + "onAddCommand": { + "clickTrackingParams": "CO8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "JFMq6lCJdHA", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CO8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CO4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "JFMq6lCJdHA" + } + }, + "trackingParams": "CO4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CO0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CO0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "COwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "COwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "COsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtKRk1xNmxDSmRIQQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "COsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "COkBEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "JFMq6lCJdHA" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "COoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "COoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "JFMq6lCJdHA" + } + } + }, + { + "clickTrackingParams": "COoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "JFMq6lCJdHA" + } + } + }, + { + "clickTrackingParams": "COoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "JFMq6lCJdHA" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "JFMq6lCJdHA" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "COgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC0pGTXE2bENKZEhBEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "COgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CNcBEMn0AhgNIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "COYBEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "COUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "LyVB_52G4pg", + "playlistId": "MLCT", + "index": 13, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "COUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Idioteque - Radiohead - 5 minutes, 10 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Idioteque - Radiohead - 5 minutes, 10 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Idioteque", + "navigationEndpoint": { + "clickTrackingParams": "CNcBEMn0AhgNIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "LyVB_52G4pg", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CNcBEMn0AhgNIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CNcBEMn0AhgNIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "5:10" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "COQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "LyVB_52G4pg", + "playlistId": "RDAMVMLyVB_52G4pg", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1MeVZCXzUyRzRwZw%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "COQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "COIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "LyVB_52G4pg", + "onEmptyQueue": { + "clickTrackingParams": "COIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "LyVB_52G4pg" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "COIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "COMBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "COIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "COABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "LyVB_52G4pg", + "onEmptyQueue": { + "clickTrackingParams": "COABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "LyVB_52G4pg" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "COABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "COEBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "COABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CN8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "LyVB_52G4pg", + "onAddCommand": { + "clickTrackingParams": "CN8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "LyVB_52G4pg", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CN8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CN4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "LyVB_52G4pg" + } + }, + "trackingParams": "CN4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CN0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CN0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CNwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtMeVZCXzUyRzRwZw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CNsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CNkBEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "LyVB_52G4pg" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CNoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CNoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "LyVB_52G4pg" + } + } + }, + { + "clickTrackingParams": "CNoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "LyVB_52G4pg" + } + } + }, + { + "clickTrackingParams": "CNoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "LyVB_52G4pg" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "LyVB_52G4pg" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CNgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC0x5VkJfNTJHNHBnEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CNgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CMcBEMn0AhgOIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CNYBEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CNUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "NGL_j8T1YVE", + "playlistId": "MLCT", + "index": 14, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CNUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Dollars and Cents - Radiohead - 4 minutes, 52 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Dollars and Cents - Radiohead - 4 minutes, 52 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Dollars and Cents", + "navigationEndpoint": { + "clickTrackingParams": "CMcBEMn0AhgOIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "NGL_j8T1YVE", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CMcBEMn0AhgOIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CMcBEMn0AhgOIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "4:52" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CNQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "NGL_j8T1YVE", + "playlistId": "RDAMVMNGL_j8T1YVE", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1OR0xfajhUMVlWRQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CNQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "NGL_j8T1YVE", + "onEmptyQueue": { + "clickTrackingParams": "CNIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "NGL_j8T1YVE" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CNIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CNMBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CNIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CNABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "NGL_j8T1YVE", + "onEmptyQueue": { + "clickTrackingParams": "CNABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "NGL_j8T1YVE" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CNABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CNEBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CNABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CM8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "NGL_j8T1YVE", + "onAddCommand": { + "clickTrackingParams": "CM8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "NGL_j8T1YVE", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CM8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CM4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "NGL_j8T1YVE" + } + }, + "trackingParams": "CM4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CM0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CM0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CMwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtOR0xfajhUMVlWRQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CMsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CMkBEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "NGL_j8T1YVE" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CMoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CMoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "NGL_j8T1YVE" + } + } + }, + { + "clickTrackingParams": "CMoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "NGL_j8T1YVE" + } + } + }, + { + "clickTrackingParams": "CMoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "NGL_j8T1YVE" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "NGL_j8T1YVE" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CMgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC05HTF9qOFQxWVZFEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CMgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CLcBEMn0AhgPIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CMYBEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CMUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "OYe7gqwrkro", + "playlistId": "MLCT", + "index": 15, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CMUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play I Might Be Wrong - Radiohead - 4 minutes, 54 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause I Might Be Wrong - Radiohead - 4 minutes, 54 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "I Might Be Wrong", + "navigationEndpoint": { + "clickTrackingParams": "CLcBEMn0AhgPIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "OYe7gqwrkro", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CLcBEMn0AhgPIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CLcBEMn0AhgPIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "4:54" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CMQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "OYe7gqwrkro", + "playlistId": "RDAMVMOYe7gqwrkro", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1PWWU3Z3F3cmtybw%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CMQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "OYe7gqwrkro", + "onEmptyQueue": { + "clickTrackingParams": "CMIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "OYe7gqwrkro" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CMIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CMMBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CMIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CMABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "OYe7gqwrkro", + "onEmptyQueue": { + "clickTrackingParams": "CMABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "OYe7gqwrkro" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CMABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CMEBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CMABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CL8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "OYe7gqwrkro", + "onAddCommand": { + "clickTrackingParams": "CL8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "OYe7gqwrkro", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CL8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CL4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "OYe7gqwrkro" + } + }, + "trackingParams": "CL4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CL0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CL0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CLwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtPWWU3Z3F3cmtybw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CLsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CLkBEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "OYe7gqwrkro" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CLoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CLoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "OYe7gqwrkro" + } + } + }, + { + "clickTrackingParams": "CLoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "OYe7gqwrkro" + } + } + }, + { + "clickTrackingParams": "CLoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "OYe7gqwrkro" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "OYe7gqwrkro" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CLgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC09ZZTdncXdya3JvEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CLgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CKcBEMn0AhgQIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CLYBEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CLUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "Ps6txeTlzkg", + "playlistId": "MLCT", + "index": 16, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CLUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Pulk/Pull Revolving Doors - Radiohead - 4 minutes, 8 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Pulk/Pull Revolving Doors - Radiohead - 4 minutes, 8 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Pulk/Pull Revolving Doors", + "navigationEndpoint": { + "clickTrackingParams": "CKcBEMn0AhgQIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "Ps6txeTlzkg", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CKcBEMn0AhgQIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CKcBEMn0AhgQIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "4:08" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CLQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "Ps6txeTlzkg", + "playlistId": "RDAMVMPs6txeTlzkg", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1QczZ0eGVUbHprZw%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CLQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "Ps6txeTlzkg", + "onEmptyQueue": { + "clickTrackingParams": "CLIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "Ps6txeTlzkg" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CLIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CLMBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CLIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CLABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "Ps6txeTlzkg", + "onEmptyQueue": { + "clickTrackingParams": "CLABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "Ps6txeTlzkg" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CLABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CLEBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CLABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CK8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "Ps6txeTlzkg", + "onAddCommand": { + "clickTrackingParams": "CK8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "Ps6txeTlzkg", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CK8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CK4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "Ps6txeTlzkg" + } + }, + "trackingParams": "CK4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CK0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CK0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CKwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtQczZ0eGVUbHprZw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CKsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CKkBEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "Ps6txeTlzkg" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CKoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CKoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "Ps6txeTlzkg" + } + } + }, + { + "clickTrackingParams": "CKoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "Ps6txeTlzkg" + } + } + }, + { + "clickTrackingParams": "CKoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "Ps6txeTlzkg" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "Ps6txeTlzkg" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CKgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC1BzNnR4ZVRsemtnEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CKgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CJcBEMn0AhgRIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CKYBEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CKUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "QhHMJkeF8zo", + "playlistId": "MLCT", + "index": 17, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CKUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Like Spinning Plates ('Why Us?' Version) - Radiohead - 5 minutes, 5 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Like Spinning Plates ('Why Us?' Version) - Radiohead - 5 minutes, 5 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Like Spinning Plates ('Why Us?' Version)", + "navigationEndpoint": { + "clickTrackingParams": "CJcBEMn0AhgRIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "QhHMJkeF8zo", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CJcBEMn0AhgRIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CJcBEMn0AhgRIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "5:05" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CKQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "QhHMJkeF8zo", + "playlistId": "RDAMVMQhHMJkeF8zo", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1RaEhNSmtlRjh6bw%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CKQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "QhHMJkeF8zo", + "onEmptyQueue": { + "clickTrackingParams": "CKIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "QhHMJkeF8zo" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CKIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CKMBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CKIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CKABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "QhHMJkeF8zo", + "onEmptyQueue": { + "clickTrackingParams": "CKABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "QhHMJkeF8zo" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CKABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CKEBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CKABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CJ8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "QhHMJkeF8zo", + "onAddCommand": { + "clickTrackingParams": "CJ8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "QhHMJkeF8zo", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CJ8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJ4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "QhHMJkeF8zo" + } + }, + "trackingParams": "CJ4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJ0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CJ0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CJwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtRaEhNSmtlRjh6bw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CJsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CJkBEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "QhHMJkeF8zo" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CJoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CJoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "QhHMJkeF8zo" + } + } + }, + { + "clickTrackingParams": "CJoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "QhHMJkeF8zo" + } + } + }, + { + "clickTrackingParams": "CJoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "QhHMJkeF8zo" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "QhHMJkeF8zo" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CJgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC1FoSE1Ka2VGOHpvEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CJgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CIcBEMn0AhgSIhMIqP7JlryEhwMV77tLBR3daAId", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CJYBEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CJUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "SKUdDojvq4E", + "playlistId": "MLCT", + "index": 18, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CJUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Like Spinning Plates - Radiohead - 3 minutes, 58 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Like Spinning Plates - Radiohead - 3 minutes, 58 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Like Spinning Plates", + "navigationEndpoint": { + "clickTrackingParams": "CIcBEMn0AhgSIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "SKUdDojvq4E", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CIcBEMn0AhgSIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CIcBEMn0AhgSIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "3:58" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CJQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "SKUdDojvq4E", + "playlistId": "RDAMVMSKUdDojvq4E", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1TS1VkRG9qdnE0RQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CJQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "SKUdDojvq4E", + "onEmptyQueue": { + "clickTrackingParams": "CJIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "SKUdDojvq4E" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CJIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CJMBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CJIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CJABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "SKUdDojvq4E", + "onEmptyQueue": { + "clickTrackingParams": "CJABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "SKUdDojvq4E" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CJABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CJEBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CJABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CI8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "offlineVideoEndpoint": { + "videoId": "SKUdDojvq4E", + "onAddCommand": { + "clickTrackingParams": "CI8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId", + "getDownloadActionCommand": { + "videoId": "SKUdDojvq4E", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CI8BENGqBRgDIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CI4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId", + "addToPlaylistEndpoint": { + "videoId": "SKUdDojvq4E" + } + }, + "trackingParams": "CI4BEMOUBhgEIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CI0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CI0BEI_7BRgFIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CIwBEJD7BRgGIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtTS1VkRG9qdnE0RQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CIsBEJH7BRgHIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CIkBEKc7IhMIqP7JlryEhwMV77tLBR3daAId", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "SKUdDojvq4E" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CIoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CIoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "SKUdDojvq4E" + } + } + }, + { + "clickTrackingParams": "CIoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "SKUdDojvq4E" + } + } + }, + { + "clickTrackingParams": "CIoBEKVBGAgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "SKUdDojvq4E" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "SKUdDojvq4E" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CIgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC1NLVWREb2p2cTRFEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CIgBEL6-CSITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CHcQyfQCGBMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CIYBEIS_AiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CIUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "watchEndpoint": { + "videoId": "TOfU3wVpwZQ", + "playlistId": "MLCT", + "index": 19, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CIUBEMjeAiITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Kid A - Radiohead - 4 minutes, 45 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Kid A - Radiohead - 4 minutes, 45 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Kid A", + "navigationEndpoint": { + "clickTrackingParams": "CHcQyfQCGBMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "TOfU3wVpwZQ", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CHcQyfQCGBMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CHcQyfQCGBMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "4:45" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CIQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "TOfU3wVpwZQ", + "playlistId": "RDAMVMTOfU3wVpwZQ", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1UT2ZVM3dWcHdaUQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CIQBEJvzBRgAIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "TOfU3wVpwZQ", + "onEmptyQueue": { + "clickTrackingParams": "CIIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "TOfU3wVpwZQ" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CIIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CIMBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CIIBEL7uBRgBIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CIABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "TOfU3wVpwZQ", + "onEmptyQueue": { + "clickTrackingParams": "CIABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "TOfU3wVpwZQ" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CIABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CIEBEMrHAyITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + } + } + ] + } + }, + "trackingParams": "CIABEPvvBRgCIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CH8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "offlineVideoEndpoint": { + "videoId": "TOfU3wVpwZQ", + "onAddCommand": { + "clickTrackingParams": "CH8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "getDownloadActionCommand": { + "videoId": "TOfU3wVpwZQ", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CH8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CH4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToPlaylistEndpoint": { + "videoId": "TOfU3wVpwZQ" + } + }, + "trackingParams": "CH4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CH0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CH0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CHwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CHwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CHsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtUT2ZVM3dWcHdaUQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CHsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=" + } + } + ], + "trackingParams": "CHkQpzsiEwio_smWvISHAxXvu0sFHd1oAh0=", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "TOfU3wVpwZQ" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CHoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CHoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "TOfU3wVpwZQ" + } + } + }, + { + "clickTrackingParams": "CHoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "TOfU3wVpwZQ" + } + } + }, + { + "clickTrackingParams": "CHoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "TOfU3wVpwZQ" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "TOfU3wVpwZQ" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CHgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC1RPZlUzd1Zwd1pREgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CHgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CGcQyfQCGBQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CHYQhL8CIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CHUQyN4CIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "ZTvniQgAQ0o", + "playlistId": "MLCT", + "index": 20, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CHUQyN4CIhMIqP7JlryEhwMV77tLBR3daAId", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Untitled v1 - Radiohead - 1 minute, 49 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Untitled v1 - Radiohead - 1 minute, 49 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Untitled v1", + "navigationEndpoint": { + "clickTrackingParams": "CGcQyfQCGBQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "ZTvniQgAQ0o", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CGcQyfQCGBQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CGcQyfQCGBQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "1:49" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CHQQm_MFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "ZTvniQgAQ0o", + "playlistId": "RDAMVMZTvniQgAQ0o", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1aVHZuaVFnQVEwbw%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CHQQm_MFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CHIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "ZTvniQgAQ0o", + "onEmptyQueue": { + "clickTrackingParams": "CHIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "ZTvniQgAQ0o" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CHIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CHMQyscDIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + } + ] + } + }, + "trackingParams": "CHIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CHAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "ZTvniQgAQ0o", + "onEmptyQueue": { + "clickTrackingParams": "CHAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "ZTvniQgAQ0o" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CHAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CHEQyscDIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + } + ] + } + }, + "trackingParams": "CHAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CG8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "offlineVideoEndpoint": { + "videoId": "ZTvniQgAQ0o", + "onAddCommand": { + "clickTrackingParams": "CG8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "getDownloadActionCommand": { + "videoId": "ZTvniQgAQ0o", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CG8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CG4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToPlaylistEndpoint": { + "videoId": "ZTvniQgAQ0o" + } + }, + "trackingParams": "CG4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CG0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CG0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CGwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CGwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CGsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtaVHZuaVFnQVEwbw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CGsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=" + } + } + ], + "trackingParams": "CGkQpzsiEwio_smWvISHAxXvu0sFHd1oAh0=", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "ZTvniQgAQ0o" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CGoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CGoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "ZTvniQgAQ0o" + } + } + }, + { + "clickTrackingParams": "CGoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "ZTvniQgAQ0o" + } + } + }, + { + "clickTrackingParams": "CGoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "ZTvniQgAQ0o" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "ZTvniQgAQ0o" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CGgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC1pUdm5pUWdBUTBvEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CGgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CFcQyfQCGBUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CGYQhL8CIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CGUQyN4CIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "ZtdW3HTUQqo", + "playlistId": "MLCT", + "index": 21, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CGUQyN4CIhMIqP7JlryEhwMV77tLBR3daAId", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Hunting Bears - Radiohead - 2 minutes, 2 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Hunting Bears - Radiohead - 2 minutes, 2 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Hunting Bears", + "navigationEndpoint": { + "clickTrackingParams": "CFcQyfQCGBUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "ZtdW3HTUQqo", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CFcQyfQCGBUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CFcQyfQCGBUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "2:02" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CGQQm_MFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "ZtdW3HTUQqo", + "playlistId": "RDAMVMZtdW3HTUQqo", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1adGRXM0hUVVFxbw%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CGQQm_MFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CGIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "ZtdW3HTUQqo", + "onEmptyQueue": { + "clickTrackingParams": "CGIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "ZtdW3HTUQqo" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CGIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CGMQyscDIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + } + ] + } + }, + "trackingParams": "CGIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CGAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "ZtdW3HTUQqo", + "onEmptyQueue": { + "clickTrackingParams": "CGAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "ZtdW3HTUQqo" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CGAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CGEQyscDIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + } + ] + } + }, + "trackingParams": "CGAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CF8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "offlineVideoEndpoint": { + "videoId": "ZtdW3HTUQqo", + "onAddCommand": { + "clickTrackingParams": "CF8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "getDownloadActionCommand": { + "videoId": "ZtdW3HTUQqo", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CF8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CF4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToPlaylistEndpoint": { + "videoId": "ZtdW3HTUQqo" + } + }, + "trackingParams": "CF4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CF0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CF0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CFwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CFwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CFsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtadGRXM0hUVVFxbw%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CFsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=" + } + } + ], + "trackingParams": "CFkQpzsiEwio_smWvISHAxXvu0sFHd1oAh0=", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "ZtdW3HTUQqo" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CFoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CFoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "ZtdW3HTUQqo" + } + } + }, + { + "clickTrackingParams": "CFoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "ZtdW3HTUQqo" + } + } + }, + { + "clickTrackingParams": "CFoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "ZtdW3HTUQqo" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "ZtdW3HTUQqo" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CFgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC1p0ZFczSFRVUXFvEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CFgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CEcQyfQCGBYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CFYQhL8CIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CFUQyN4CIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "cDQ7raytW0M", + "playlistId": "MLCT", + "index": 22, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CFUQyN4CIhMIqP7JlryEhwMV77tLBR3daAId", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Pulk/Pull (True Love Waits Version) - Radiohead - 2 minutes, 47 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Pulk/Pull (True Love Waits Version) - Radiohead - 2 minutes, 47 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Pulk/Pull (True Love Waits Version)", + "navigationEndpoint": { + "clickTrackingParams": "CEcQyfQCGBYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "cDQ7raytW0M", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CEcQyfQCGBYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CEcQyfQCGBYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "2:47" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CFQQm_MFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "cDQ7raytW0M", + "playlistId": "RDAMVMcDQ7raytW0M", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1jRFE3cmF5dFcwTQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CFQQm_MFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CFIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "cDQ7raytW0M", + "onEmptyQueue": { + "clickTrackingParams": "CFIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "cDQ7raytW0M" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CFIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CFMQyscDIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + } + ] + } + }, + "trackingParams": "CFIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CFAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "cDQ7raytW0M", + "onEmptyQueue": { + "clickTrackingParams": "CFAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "cDQ7raytW0M" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CFAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CFEQyscDIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + } + ] + } + }, + "trackingParams": "CFAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CE8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "offlineVideoEndpoint": { + "videoId": "cDQ7raytW0M", + "onAddCommand": { + "clickTrackingParams": "CE8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "getDownloadActionCommand": { + "videoId": "cDQ7raytW0M", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CE8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CE4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToPlaylistEndpoint": { + "videoId": "cDQ7raytW0M" + } + }, + "trackingParams": "CE4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CE0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CE0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CEwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CEwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CEsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtjRFE3cmF5dFcwTQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CEsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=" + } + } + ], + "trackingParams": "CEkQpzsiEwio_smWvISHAxXvu0sFHd1oAh0=", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "cDQ7raytW0M" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CEoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CEoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "cDQ7raytW0M" + } + } + }, + { + "clickTrackingParams": "CEoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "cDQ7raytW0M" + } + } + }, + { + "clickTrackingParams": "CEoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "cDQ7raytW0M" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "cDQ7raytW0M" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CEgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC2NEUTdyYXl0VzBNEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CEgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CDcQyfQCGBciEwio_smWvISHAxXvu0sFHd1oAh0=", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CEYQhL8CIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CEUQyN4CIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "d9zk2j3JPK4", + "playlistId": "MLCT", + "index": 23, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CEUQyN4CIhMIqP7JlryEhwMV77tLBR3daAId", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Everything In Its Right Place - Radiohead - 4 minutes, 12 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Everything In Its Right Place - Radiohead - 4 minutes, 12 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Everything In Its Right Place", + "navigationEndpoint": { + "clickTrackingParams": "CDcQyfQCGBciEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "d9zk2j3JPK4", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CDcQyfQCGBciEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CDcQyfQCGBciEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "4:12" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CEQQm_MFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "d9zk2j3JPK4", + "playlistId": "RDAMVMd9zk2j3JPK4", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1kOXprMmozSlBLNA%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CEQQm_MFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CEIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "d9zk2j3JPK4", + "onEmptyQueue": { + "clickTrackingParams": "CEIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "d9zk2j3JPK4" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CEIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CEMQyscDIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + } + ] + } + }, + "trackingParams": "CEIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CEAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "d9zk2j3JPK4", + "onEmptyQueue": { + "clickTrackingParams": "CEAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "d9zk2j3JPK4" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CEAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CEEQyscDIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + } + ] + } + }, + "trackingParams": "CEAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CD8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "offlineVideoEndpoint": { + "videoId": "d9zk2j3JPK4", + "onAddCommand": { + "clickTrackingParams": "CD8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "getDownloadActionCommand": { + "videoId": "d9zk2j3JPK4", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CD8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CD4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToPlaylistEndpoint": { + "videoId": "d9zk2j3JPK4" + } + }, + "trackingParams": "CD4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CD0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CD0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CDwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtkOXprMmozSlBLNA%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CDsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=" + } + } + ], + "trackingParams": "CDkQpzsiEwio_smWvISHAxXvu0sFHd1oAh0=", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "d9zk2j3JPK4" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CDoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CDoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "d9zk2j3JPK4" + } + } + }, + { + "clickTrackingParams": "CDoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "d9zk2j3JPK4" + } + } + }, + { + "clickTrackingParams": "CDoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "d9zk2j3JPK4" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "d9zk2j3JPK4" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CDgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC2Q5emsyajNKUEs0EgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CDgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CCcQyfQCGBgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CDYQhL8CIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CDUQyN4CIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "dJV-1zkaTq8", + "playlistId": "MLCT", + "index": 24, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CDUQyN4CIhMIqP7JlryEhwMV77tLBR3daAId", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Alt. Fast Track - Radiohead - 1 minute, 33 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Alt. Fast Track - Radiohead - 1 minute, 33 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Alt. Fast Track", + "navigationEndpoint": { + "clickTrackingParams": "CCcQyfQCGBgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "dJV-1zkaTq8", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CCcQyfQCGBgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CCcQyfQCGBgiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "1:33" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CDQQm_MFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "dJV-1zkaTq8", + "playlistId": "RDAMVMdJV-1zkaTq8", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1kSlYtMXprYVRxOA%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CDQQm_MFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CDIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "dJV-1zkaTq8", + "onEmptyQueue": { + "clickTrackingParams": "CDIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "dJV-1zkaTq8" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CDIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CDMQyscDIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + } + ] + } + }, + "trackingParams": "CDIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CDAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "dJV-1zkaTq8", + "onEmptyQueue": { + "clickTrackingParams": "CDAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "dJV-1zkaTq8" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CDAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CDEQyscDIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + } + ] + } + }, + "trackingParams": "CDAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CC8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "offlineVideoEndpoint": { + "videoId": "dJV-1zkaTq8", + "onAddCommand": { + "clickTrackingParams": "CC8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "getDownloadActionCommand": { + "videoId": "dJV-1zkaTq8", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CC8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CC4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToPlaylistEndpoint": { + "videoId": "dJV-1zkaTq8" + } + }, + "trackingParams": "CC4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CC0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CC0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CCwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtkSlYtMXprYVRxOA%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CCsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=" + } + } + ], + "trackingParams": "CCkQpzsiEwio_smWvISHAxXvu0sFHd1oAh0=", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "dJV-1zkaTq8" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CCoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CCoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "dJV-1zkaTq8" + } + } + }, + { + "clickTrackingParams": "CCoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "dJV-1zkaTq8" + } + } + }, + { + "clickTrackingParams": "CCoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "dJV-1zkaTq8" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "dJV-1zkaTq8" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CCgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC2RKVi0xemthVHE4EgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CCgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + }, + { + "musicResponsiveListItemRenderer": { + "trackingParams": "CBcQyfQCGBkiEwio_smWvISHAxXvu0sFHd1oAh0=", + "thumbnail": { + "musicThumbnailRenderer": { + "thumbnail": { + "thumbnails": [ + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + "width": 60, + "height": 60 + }, + { + "url": "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + "width": 120, + "height": 120 + } + ] + }, + "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED", + "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT", + "trackingParams": "CCYQhL8CIhMIqP7JlryEhwMV77tLBR3daAId" + } + }, + "overlay": { + "musicItemThumbnailOverlayRenderer": { + "background": { + "verticalGradient": { + "gradientLayerColors": [ + "3422552064", + "3422552064" + ] + } + }, + "content": { + "musicPlayButtonRenderer": { + "playNavigationEndpoint": { + "clickTrackingParams": "CCUQyN4CIhMIqP7JlryEhwMV77tLBR3daAId", + "watchEndpoint": { + "videoId": "gA0J1V1_pXM", + "playlistId": "MLCT", + "index": 25, + "params": "8gENMgsIARACGgVlbi1HQg%3D%3D", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CCUQyN4CIhMIqP7JlryEhwMV77tLBR3daAId", + "playIcon": { + "iconType": "PLAY_ARROW" + }, + "pauseIcon": { + "iconType": "PAUSE" + }, + "iconColor": 4294967295, + "backgroundColor": 0, + "activeBackgroundColor": 0, + "loadingIndicatorColor": 4294901760, + "playingIcon": { + "iconType": "VOLUME_UP" + }, + "iconLoadingColor": 0, + "activeScaleFactor": 1, + "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL", + "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF", + "accessibilityPlayData": { + "accessibilityData": { + "label": "Play Treefingers - Radiohead - 3 minutes, 43 seconds" + } + }, + "accessibilityPauseData": { + "accessibilityData": { + "label": "Pause Treefingers - Radiohead - 3 minutes, 43 seconds" + } + } + } + }, + "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED", + "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT" + } + }, + "flexColumns": [ + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Treefingers", + "navigationEndpoint": { + "clickTrackingParams": "CBcQyfQCGBkiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "gA0J1V1_pXM", + "playlistId": "MLCT", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GgRNTENU" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "Radiohead", + "navigationEndpoint": { + "clickTrackingParams": "CBcQyfQCGBkiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH" + } + }, + { + "musicResponsiveListItemFlexColumnRenderer": { + "text": { + "runs": [ + { + "text": "KID A MNESIA", + "navigationEndpoint": { + "clickTrackingParams": "CBcQyfQCGBkiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + } + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM" + } + } + ], + "fixedColumns": [ + { + "musicResponsiveListItemFixedColumnRenderer": { + "text": { + "runs": [ + { + "text": "3:43" + } + ] + }, + "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH", + "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL" + } + } + ], + "menu": { + "menuRenderer": { + "items": [ + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Start radio" + } + ] + }, + "icon": { + "iconType": "MIX" + }, + "navigationEndpoint": { + "clickTrackingParams": "CCQQm_MFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "gA0J1V1_pXM", + "playlistId": "RDAMVMgA0J1V1_pXM", + "params": "wAEB", + "loggingContext": { + "vssLoggingContext": { + "serializedContextData": "GhFSREFNVk1nQTBKMVYxX3BYTQ%3D%3D" + } + }, + "watchEndpointMusicSupportedConfigs": { + "watchEndpointMusicConfig": { + "musicVideoType": "MUSIC_VIDEO_TYPE_ATV" + } + } + } + }, + "trackingParams": "CCQQm_MFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Play next" + } + ] + }, + "icon": { + "iconType": "QUEUE_PLAY_NEXT" + }, + "serviceEndpoint": { + "clickTrackingParams": "CCIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "gA0J1V1_pXM", + "onEmptyQueue": { + "clickTrackingParams": "CCIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "gA0J1V1_pXM" + } + } + }, + "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO", + "commands": [ + { + "clickTrackingParams": "CCIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song will play next" + } + ] + }, + "trackingParams": "CCMQyscDIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + } + ] + } + }, + "trackingParams": "CCIQvu4FGAEiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemRenderer": { + "text": { + "runs": [ + { + "text": "Add to queue" + } + ] + }, + "icon": { + "iconType": "ADD_TO_REMOTE_QUEUE" + }, + "serviceEndpoint": { + "clickTrackingParams": "CCAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "queueAddEndpoint": { + "queueTarget": { + "videoId": "gA0J1V1_pXM", + "onEmptyQueue": { + "clickTrackingParams": "CCAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "watchEndpoint": { + "videoId": "gA0J1V1_pXM" + } + } + }, + "queueInsertPosition": "INSERT_AT_END", + "commands": [ + { + "clickTrackingParams": "CCAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToToastAction": { + "item": { + "notificationTextRenderer": { + "successResponseText": { + "runs": [ + { + "text": "Song added to queue" + } + ] + }, + "trackingParams": "CCEQyscDIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + } + ] + } + }, + "trackingParams": "CCAQ--8FGAIiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuServiceItemDownloadRenderer": { + "serviceEndpoint": { + "clickTrackingParams": "CB8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "offlineVideoEndpoint": { + "videoId": "gA0J1V1_pXM", + "onAddCommand": { + "clickTrackingParams": "CB8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=", + "getDownloadActionCommand": { + "videoId": "gA0J1V1_pXM", + "params": "CAI%3D" + } + } + } + }, + "trackingParams": "CB8Q0aoFGAMiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Save to playlist" + } + ] + }, + "icon": { + "iconType": "ADD_TO_PLAYLIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CB4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=", + "addToPlaylistEndpoint": { + "videoId": "gA0J1V1_pXM" + } + }, + "trackingParams": "CB4Qw5QGGAQiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to album" + } + ] + }, + "icon": { + "iconType": "ALBUM" + }, + "navigationEndpoint": { + "clickTrackingParams": "CB0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "MPREb_E7NpKw54NIT", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ALBUM" + } + } + } + }, + "trackingParams": "CB0Qj_sFGAUiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Go to artist" + } + ] + }, + "icon": { + "iconType": "ARTIST" + }, + "navigationEndpoint": { + "clickTrackingParams": "CBwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "UCr_iyUANcn9OX_yy9piYoLw", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_ARTIST" + } + } + } + }, + "trackingParams": "CBwQkPsFGAYiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "menuNavigationItemRenderer": { + "text": { + "runs": [ + { + "text": "Share" + } + ] + }, + "icon": { + "iconType": "SHARE" + }, + "navigationEndpoint": { + "clickTrackingParams": "CBsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=", + "shareEntityEndpoint": { + "serializedShareEntity": "CgtnQTBKMVYxX3BYTQ%3D%3D", + "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL" + } + }, + "trackingParams": "CBsQkfsFGAciEwio_smWvISHAxXvu0sFHd1oAh0=" + } + } + ], + "trackingParams": "CBkQpzsiEwio_smWvISHAxXvu0sFHd1oAh0=", + "topLevelButtons": [ + { + "likeButtonRenderer": { + "target": { + "videoId": "gA0J1V1_pXM" + }, + "likeStatus": "INDIFFERENT", + "trackingParams": "CBoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likesAllowed": true, + "serviceEndpoints": [ + { + "clickTrackingParams": "CBoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "LIKE", + "target": { + "videoId": "gA0J1V1_pXM" + } + } + }, + { + "clickTrackingParams": "CBoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "DISLIKE", + "target": { + "videoId": "gA0J1V1_pXM" + } + } + }, + { + "clickTrackingParams": "CBoQpUEYCCITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "likeEndpoint": { + "status": "INDIFFERENT", + "target": { + "videoId": "gA0J1V1_pXM" + } + } + } + ] + } + } + ], + "accessibility": { + "accessibilityData": { + "label": "Action menu" + } + } + } + }, + "playlistItemData": { + "videoId": "gA0J1V1_pXM" + }, + "multiSelectCheckbox": { + "checkboxRenderer": { + "onSelectionChangeCommand": { + "clickTrackingParams": "CBgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId", + "updateMultiSelectStateCommand": { + "multiSelectParams": "CAUSBE1MQ1Q=", + "multiSelectItem": "Cg8KC2dBMEoxVjFfcFhNEgA=" + } + }, + "checkedState": "CHECKBOX_CHECKED_STATE_UNCHECKED", + "trackingParams": "CBgQvr4JIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + } + ], + "trackingParams": "CBUQ-V4YACITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "continuations": [ + { + "nextContinuationData": { + "continuation": "4qmFsgJcEhRGRW11c2ljX2xpa2VkX3ZpZGVvcxpEQ0JwNktrTkNhMUZIVW05TVEwRkZVVUZvYjBaYVZ6UjBVakJKYVVSQmFsTXdXV1V3UW1oRVQzbGFTMUpCVVElM0QlM0Q%3D", + "clickTrackingParams": "CBYQybcCIhMIqP7JlryEhwMV77tLBR3daAId", + "autoloadEnabled": true, + "autoloadImmediately": true + } + } + ], + "shelfDivider": { + "musicShelfDividerRenderer": { + "hidden": true + } + }, + "autoReloadWhenEmpty": false, + "contentsMultiSelectable": true + } + } + ], + "trackingParams": "CAgQui8iEwio_smWvISHAxXvu0sFHd1oAh0=", + "header": { + "musicSideAlignedItemRenderer": { + "startItems": [ + { + "chipCloudRenderer": { + "chips": [ + { + "chipCloudChipRenderer": { + "navigationEndpoint": { + "clickTrackingParams": "CBQQ_V0YACITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBQQ_V0YACITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + }, + { + "clickTrackingParams": "CBQQ_V0YACITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBQQ_V0YACITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + } + } + } + ] + } + }, + "trackingParams": "CBQQ_V0YACITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "icon": { + "iconType": "CLOSE" + }, + "accessibilityData": { + "accessibilityData": { + "label": "Clear filters" + } + }, + "isSelected": true, + "onDeselectedCommand": { + "clickTrackingParams": "CBQQ_V0YACITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBQQ_V0YACITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + }, + { + "clickTrackingParams": "CBQQ_V0YACITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBQQ_V0YACITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + } + } + } + ] + } + } + } + }, + { + "chipCloudChipRenderer": { + "text": { + "runs": [ + { + "text": "Songs" + } + ] + }, + "navigationEndpoint": { + "clickTrackingParams": "CBMQ_V0YASITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBMQ_V0YASITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "browseEndpoint": { + "browseId": "FEmusic_liked_videos" + } + }, + { + "clickTrackingParams": "CBMQ_V0YASITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBMQ_V0YASITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "browseEndpoint": { + "browseId": "FEmusic_liked_videos" + } + } + } + } + ] + } + }, + "trackingParams": "CBMQ_V0YASITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "accessibilityData": { + "accessibilityData": { + "label": "Show songs" + } + }, + "isSelected": true, + "onDeselectedCommand": { + "clickTrackingParams": "CBMQ_V0YASITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBMQ_V0YASITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + }, + { + "clickTrackingParams": "CBMQ_V0YASITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CBMQ_V0YASITCKj-yZa8hIcDFe-7SwUd3WgCHQ==", + "browseEndpoint": { + "browseId": "FEmusic_library_landing" + } + } + } + } + ] + } + }, + "uniqueId": "Songs" + } + } + ], + "trackingParams": "CBIQ_F0YACITCKj-yZa8hIcDFe-7SwUd3WgCHQ==" + } + } + ], + "endItems": [ + { + "musicSortFilterButtonRenderer": { + "title": { + "runs": [ + { + "text": "Recently saved" + } + ] + }, + "icon": { + "iconType": "ARROW_DROP_DOWN" + }, + "menu": { + "musicMultiSelectMenuRenderer": { + "title": { + "musicMenuTitleRenderer": { + "primaryText": { + "runs": [ + { + "text": "Sort by" + } + ] + } + } + }, + "options": [ + { + "musicMultiSelectMenuItemRenderer": { + "title": { + "runs": [ + { + "text": "Recently saved" + } + ] + }, + "formItemEntityKey": "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "selectedCommand": { + "clickTrackingParams": "CBAQk5QFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CBAQk5QFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CBAQk5QFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "newCheckedState": true + } + }, + { + "clickTrackingParams": "CBAQk5QFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CBAQk5QFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseSectionListReloadEndpoint": { + "continuation": { + "reloadContinuationData": { + "continuation": "4qmFsgIoEhRGRW11c2ljX2xpa2VkX3ZpZGVvcxoQZ2dNR0tnUUlBQkFCb0FZQg%3D%3D", + "clickTrackingParams": "CBEQxqYCIhMIqP7JlryEhwMV77tLBR3daAId", + "showSpinnerOverlay": true + } + } + } + } + ] + } + }, + "trackingParams": "CBAQk5QFGAAiEwio_smWvISHAxXvu0sFHd1oAh0=", + "selectedIcon": { + "iconType": "CHECK" + }, + "selectedAccessibility": { + "accessibilityData": { + "label": "Recently saved selected" + } + }, + "deselectedAccessibility": { + "accessibilityData": { + "label": "Recently saved" + } + } + } + }, + { + "musicMultiSelectMenuItemRenderer": { + "title": { + "runs": [ + { + "text": "A to Z" + } + ] + }, + "formItemEntityKey": "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D", + "selectedCommand": { + "clickTrackingParams": "CA4Qk5QFGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CA4Qk5QFGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CA4Qk5QFGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CA4Qk5QFGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D", + "newCheckedState": true + } + }, + { + "clickTrackingParams": "CA4Qk5QFGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseSectionListReloadEndpoint": { + "continuation": { + "reloadContinuationData": { + "continuation": "4qmFsgIoEhRGRW11c2ljX2xpa2VkX3ZpZGVvcxoQZ2dNR0tnUUlBUkFBb0FZQg%3D%3D", + "clickTrackingParams": "CA8QxqYCIhMIqP7JlryEhwMV77tLBR3daAId", + "showSpinnerOverlay": true + } + } + } + } + ] + } + }, + "trackingParams": "CA4Qk5QFGAEiEwio_smWvISHAxXvu0sFHd1oAh0=", + "selectedIcon": { + "iconType": "CHECK" + }, + "selectedAccessibility": { + "accessibilityData": { + "label": "A to Z selected" + } + }, + "deselectedAccessibility": { + "accessibilityData": { + "label": "A to Z" + } + } + } + }, + { + "musicMultiSelectMenuItemRenderer": { + "title": { + "runs": [ + { + "text": "Z to A" + } + ] + }, + "formItemEntityKey": "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "selectedCommand": { + "clickTrackingParams": "CAwQk5QFGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CAwQk5QFGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CAwQk5QFGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "newCheckedState": false + } + }, + { + "clickTrackingParams": "CAwQk5QFGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "musicCheckboxFormItemMutatedCommand": { + "formItemEntityKey": "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "newCheckedState": true + } + }, + { + "clickTrackingParams": "CAwQk5QFGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseSectionListReloadEndpoint": { + "continuation": { + "reloadContinuationData": { + "continuation": "4qmFsgIoEhRGRW11c2ljX2xpa2VkX3ZpZGVvcxoQZ2dNR0tnUUlBUkFCb0FZQg%3D%3D", + "clickTrackingParams": "CA0QxqYCIhMIqP7JlryEhwMV77tLBR3daAId", + "showSpinnerOverlay": true + } + } + } + } + ] + } + }, + "trackingParams": "CAwQk5QFGAIiEwio_smWvISHAxXvu0sFHd1oAh0=", + "selectedIcon": { + "iconType": "CHECK" + }, + "selectedAccessibility": { + "accessibilityData": { + "label": "Z to A selected" + } + }, + "deselectedAccessibility": { + "accessibilityData": { + "label": "Z to A" + } + } + } + } + ], + "trackingParams": "CAsQkpQFIhMIqP7JlryEhwMV77tLBR3daAId", + "formEntityKey": "EkNQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFIJABKAE%3D" + } + }, + "accessibility": { + "accessibilityData": { + "label": "Sort by - Recently saved selected" + } + }, + "trackingParams": "CAoQkZQFGAEiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + } + ], + "trackingParams": "CAkQxv4DIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + } + }, + "tabIdentifier": "FEmusic_library_landing", + "trackingParams": "CAcQ8JMBGAQiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "tabRenderer": { + "endpoint": { + "clickTrackingParams": "CAQQ8JMBGAUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CAQQ8JMBGAUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CAQQ8JMBGAUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "FEmusic_offline" + } + } + } + }, + { + "clickTrackingParams": "CAQQ8JMBGAUiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "FEmusic_offline", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_DOWNLOADS_CONTENT_LANDING_PAGE" + } + } + } + } + ] + } + }, + "title": "Downloads", + "selected": false, + "content": { + "sectionListRenderer": { + "continuations": [ + { + "reloadContinuationData": { + "continuation": "4qmFsgIdEg9GRW11c2ljX29mZmxpbmUaCnVnTUNDQUUlM0Q%3D", + "clickTrackingParams": "CAYQxqYCIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CAUQui8iEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + "tabIdentifier": "FEmusic_offline", + "trackingParams": "CAQQ8JMBGAUiEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + { + "tabRenderer": { + "endpoint": { + "clickTrackingParams": "CAEQ8JMBGAYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "commandExecutorCommand": { + "commands": [ + { + "clickTrackingParams": "CAEQ8JMBGAYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "musicLibraryPersistLaunchNavigationCommand": { + "command": { + "clickTrackingParams": "CAEQ8JMBGAYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "FEmusic_library_privately_owned_landing" + } + } + } + }, + { + "clickTrackingParams": "CAEQ8JMBGAYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "browseEndpoint": { + "browseId": "FEmusic_library_privately_owned_landing", + "browseEndpointContextSupportedConfigs": { + "browseEndpointContextMusicConfig": { + "pageType": "MUSIC_PAGE_TYPE_PRIVATELY_OWNED_CONTENT_LANDING_PAGE" + } + } + } + } + ] + } + }, + "title": "Uploads", + "selected": false, + "content": { + "sectionListRenderer": { + "continuations": [ + { + "reloadContinuationData": { + "continuation": "4qmFsgI1EidGRW11c2ljX2xpYnJhcnlfcHJpdmF0ZWx5X293bmVkX2xhbmRpbmcaCnVnTUNDQUUlM0Q%3D", + "clickTrackingParams": "CAMQxqYCIhMIqP7JlryEhwMV77tLBR3daAId" + } + } + ], + "trackingParams": "CAIQui8iEwio_smWvISHAxXvu0sFHd1oAh0=" + } + }, + "tabIdentifier": "FEmusic_library_privately_owned_landing", + "trackingParams": "CAEQ8JMBGAYiEwio_smWvISHAxXvu0sFHd1oAh0=", + "targetId": "music-library-uploads-tab" + } + } + ] + } + }, + "trackingParams": "CAAQhGciEwio_smWvISHAxXvu0sFHd1oAh0=", + "frameworkUpdates": { + "entityBatchUpdate": { + "mutations": [ + { + "entityKey": "EkNQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFIJABKAE%3D", + "type": "ENTITY_MUTATION_TYPE_REPLACE", + "payload": { + "musicForm": { + "id": "EkNQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFIJABKAE%3D", + "booleanChoiceEntityKeys": [ + "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D", + "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB" + ] + } + } + }, + { + "entityKey": "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "type": "ENTITY_MUTATION_TYPE_REPLACE", + "payload": { + "musicFormBooleanChoice": { + "id": "EntQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfQURERURfVElNRVNUQU1QX1NvcnRTcGVjX09yZGVyX0RFU0NFTkRJTkcgkQEoAQ%3D%3D", + "parentFormEntityKey": "EkNQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFIJABKAE%3D", + "selected": true, + "opaqueToken": "SortSpec_Type_ADDED_TIMESTAMP_SortSpec_Order_DESCENDING" + } + } + }, + { + "entityKey": "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D", + "type": "ENTITY_MUTATION_TYPE_REPLACE", + "payload": { + "musicFormBooleanChoice": { + "id": "EnZQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfQVNDRU5ESU5HIJEBKAE%3D", + "parentFormEntityKey": "EkNQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFIJABKAE%3D", + "selected": false, + "opaqueToken": "SortSpec_Type_ENTITY_NAME_SortSpec_Order_ASCENDING" + } + } + }, + { + "entityKey": "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "type": "ENTITY_MUTATION_TYPE_REPLACE", + "payload": { + "musicFormBooleanChoice": { + "id": "EndQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFLVNvcnRTcGVjX1R5cGVfRU5USVRZX05BTUVfU29ydFNwZWNfT3JkZXJfREVTQ0VORElORyCRASgB", + "parentFormEntityKey": "EkNQQUdFX1RZUEVfTElCUkFSWV9MQU5ESU5HX1BBR0UtUEFHRV9UWVBFX0xJQlJBUllfQ09SUFVTX1RSQUNLU19QQUdFIJABKAE%3D", + "selected": false, + "opaqueToken": "SortSpec_Type_ENTITY_NAME_SortSpec_Order_DESCENDING" + } + } + } + ], + "timestamp": { + "seconds": "1719789778", + "nanos": 340662597 + } + } + } +} + diff --git a/ytmapi-rs/test_json/get_library_songs_output.txt b/ytmapi-rs/test_json/get_library_songs_output.txt new file mode 100644 index 00000000..e69de29b From 011afd31cd41ada84c3014a6261c20ea34b8c3a8 Mon Sep 17 00:00:00 2001 From: Nick Dowsett Date: Mon, 1 Jul 2024 19:45:51 +0800 Subject: [PATCH 4/8] Implement IntoIter method for JsonCrawler --- ytmapi-rs/src/crawler.rs | 85 +++++++++++++------ ytmapi-rs/src/parse/library.rs | 14 +-- ... => get_library_songs_20240701_output.txt} | 0 3 files changed, 68 insertions(+), 31 deletions(-) rename ytmapi-rs/test_json/{get_library_songs_output.txt => get_library_songs_20240701_output.txt} (100%) diff --git a/ytmapi-rs/src/crawler.rs b/ytmapi-rs/src/crawler.rs index 717234b3..52da0a1d 100644 --- a/ytmapi-rs/src/crawler.rs +++ b/ytmapi-rs/src/crawler.rs @@ -5,7 +5,7 @@ use crate::{ Error, Result, }; use serde::de::DeserializeOwned; -use std::{slice::IterMut, sync::Arc}; +use std::{slice::IterMut, sync::Arc, vec::IntoIter}; #[derive(Clone, PartialEq, Debug)] pub enum JsonPath { @@ -36,7 +36,12 @@ pub(crate) struct JsonCrawlerArrayIterMut<'a> { array: IterMut<'a, serde_json::Value>, path: PathList, cur: usize, - len: usize, +} +pub(crate) struct JsonCrawlerArrayIntoIter { + source: Arc, + array: IntoIter, + path: PathList, + cur: usize, } impl From> for JsonCrawler { fn from(value: ProcessedResult) -> Self { @@ -80,34 +85,53 @@ impl From<&PathList> for String { } } -impl<'a> JsonCrawlerArrayIterMut<'a> { - /// Total length of the iterator from when first set up. - /// Note - not adjusted after some elements have been consumed, will always - /// show total length. - pub fn len(&self) -> usize { - self.len - } -} - impl<'a> Iterator for JsonCrawlerArrayIterMut<'a> { type Item = JsonCrawlerBorrowed<'a>; fn next(&mut self) -> Option { - if self.len < self.cur + 1 { - return None; - } + let crawler = self.array.next()?; self.path.pop(); self.path.push(JsonPath::IndexNum(self.cur)); self.cur += 1; Some(JsonCrawlerBorrowed { + // Low cost as this is an Arc + source: self.source.clone(), + crawler, // Ideally there should be a Borrowed version of this struct - otherwise we need to // clone every time here. + path: self.path.clone(), + }) + } + // Required to be exact to implement ExactSizeIterator. + fn size_hint(&self) -> (usize, Option) { + (self.array.len(), Some(self.array.len())) + } +} +// Default implementation is correct, due to implementation of size_hint. +impl<'a> ExactSizeIterator for JsonCrawlerArrayIterMut<'a> {} + +impl Iterator for JsonCrawlerArrayIntoIter { + type Item = JsonCrawler; + fn next(&mut self) -> Option { + let crawler = self.array.next()?; + self.path.pop(); + self.path.push(JsonPath::IndexNum(self.cur)); + self.cur += 1; + Some(JsonCrawler { + // Low cost as this is an Arc source: self.source.clone(), - crawler: self.array.next()?, - // As above - needs to be cloned every time. + crawler, + // Ideally there should be a Borrowed version of this struct - otherwise we need to + // clone every time here. path: self.path.clone(), }) } + // Required to be exact to implement ExactSizeIterator. + fn size_hint(&self) -> (usize, Option) { + (self.array.len(), Some(self.array.len())) + } } +// Default implementation is correct, due to implementation of size_hint. +impl<'a> ExactSizeIterator for JsonCrawlerArrayIntoIter {} impl<'a> JsonCrawlerBorrowed<'a> { pub fn into_array_iter_mut(self) -> Result> { @@ -115,12 +139,10 @@ impl<'a> JsonCrawlerBorrowed<'a> { .crawler .as_array_mut() .ok_or_else(|| Error::parsing(&self.path, self.source.clone(), ParseTarget::Array))?; - let len = json_array.len(); let mut path_clone = self.path.clone(); path_clone.push(JsonPath::IndexNum(0)); Ok(JsonCrawlerArrayIterMut { source: self.source, - len, array: json_array.iter_mut(), path: path_clone, cur: 0, @@ -131,12 +153,10 @@ impl<'a> JsonCrawlerBorrowed<'a> { .crawler .as_array_mut() .ok_or_else(|| Error::parsing(&self.path, self.source.clone(), ParseTarget::Array))?; - let len = json_array.len(); let mut path_clone = self.path.clone(); path_clone.push(JsonPath::IndexNum(0)); Ok(JsonCrawlerArrayIterMut { source: self.source.clone(), - len, array: json_array.iter_mut(), path: path_clone, cur: 0, @@ -208,19 +228,36 @@ impl<'a> JsonCrawlerBorrowed<'a> { } impl JsonCrawler { - // TODO: Implement into_array_iter_mut. - // See std::Vec::into_iter() as an example of this. + pub fn into_array_into_iter(self) -> Result { + if let JsonCrawler { + source, + crawler: serde_json::Value::Array(array), + mut path, + } = self + { + path.push(JsonPath::IndexNum(0)); + return Ok(JsonCrawlerArrayIntoIter { + source, + array: array.into_iter(), + path, + cur: 0, + }); + } + return Err(Error::parsing( + &self.path, + self.source.clone(), + ParseTarget::Array, + )); + } pub fn as_array_iter_mut(&mut self) -> Result> { let json_array = self .crawler .as_array_mut() .ok_or_else(|| Error::parsing(&self.path, self.source.clone(), ParseTarget::Array))?; - let len = json_array.len(); let mut path_clone = self.path.clone(); path_clone.push(JsonPath::IndexNum(0)); Ok(JsonCrawlerArrayIterMut { source: self.source.clone(), - len, array: json_array.iter_mut(), path: path_clone, cur: 0, diff --git a/ytmapi-rs/src/parse/library.rs b/ytmapi-rs/src/parse/library.rs index fed43b54..9686aeb0 100644 --- a/ytmapi-rs/src/parse/library.rs +++ b/ytmapi-rs/src/parse/library.rs @@ -79,14 +79,14 @@ impl ParseFrom for Vec { fn parse_library_albums( json_crawler: JsonCrawler, ) -> std::prelude::v1::Result, crate::Error> { - let mut items = json_crawler.navigate_pointer(concatcp!( + let items = json_crawler.navigate_pointer(concatcp!( SINGLE_COLUMN_TAB, SECTION_LIST_ITEM, GRID_ITEMS ))?; items - .as_array_iter_mut()? - .map(|mut r| parse_item_list_albums(&mut r)) + .into_array_into_iter()? + .map(|r| parse_item_list_albums(r)) .collect() } fn parse_library_songs(json_crawler: JsonCrawler) -> std::prelude::v1::Result<(), crate::Error> { @@ -102,8 +102,8 @@ fn parse_library_artist_subscriptions( "/contents" ))?; contents - .as_array_iter_mut()? - .map(|mut r| parse_content_list_artist_subscriptions(&mut r)) + .into_array_into_iter()? + .map(|mut r| parse_content_list_artist_subscriptions(r)) .collect() } @@ -162,7 +162,7 @@ fn process_library_contents_music_shelf(mut json_crawler: JsonCrawler) -> Option } } -fn parse_item_list_albums(json_crawler: &mut JsonCrawlerBorrowed) -> Result { +fn parse_item_list_albums(mut json_crawler: JsonCrawler) -> Result { let mut data = json_crawler.borrow_pointer("/musicTwoRowItemRenderer")?; let browse_id = data.take_value_pointer(NAVIGATION_BROWSE_ID)?; let thumbnails = data.take_value_pointer(THUMBNAIL_RENDERER)?; @@ -187,7 +187,7 @@ fn parse_item_list_albums(json_crawler: &mut JsonCrawlerBorrowed) -> Result Result { let mut data = json_crawler.borrow_pointer(MRLIR)?; let channel_id = data.take_value_pointer(NAVIGATION_BROWSE_ID)?; diff --git a/ytmapi-rs/test_json/get_library_songs_output.txt b/ytmapi-rs/test_json/get_library_songs_20240701_output.txt similarity index 100% rename from ytmapi-rs/test_json/get_library_songs_output.txt rename to ytmapi-rs/test_json/get_library_songs_20240701_output.txt From 653705d1223352d83508c5a36f9b097d9841ab08 Mon Sep 17 00:00:00 2001 From: Nick Dowsett Date: Mon, 1 Jul 2024 20:12:55 +0800 Subject: [PATCH 5/8] Implement GetLibrarySongs, add message from YTM to error code type --- ytmapi-rs/src/auth/browser.rs | 7 +- ytmapi-rs/src/auth/oauth.rs | 7 +- ytmapi-rs/src/error.rs | 18 +- ytmapi-rs/src/lib.rs | 4 +- ytmapi-rs/src/parse/library.rs | 25 +- ytmapi-rs/src/query/library.rs | 4 +- .../get_library_songs_20240701_output.txt | 1178 +++++++++++++++++ 7 files changed, 1224 insertions(+), 19 deletions(-) diff --git a/ytmapi-rs/src/auth/browser.rs b/ytmapi-rs/src/auth/browser.rs index 7f10fded..e8f77746 100644 --- a/ytmapi-rs/src/auth/browser.rs +++ b/ytmapi-rs/src/auth/browser.rs @@ -74,12 +74,17 @@ impl AuthToken for BrowserToken { "Error message received from server, but doesn't have an error code", )); }; + let message = error + .pointer("/message") + .and_then(|s| s.as_str()) + .map(|s| s.to_string()) + .unwrap_or_default(); match code { // Assuming Error:NotAuthenticated means browser token has expired. // May be incorrect - browser token may be invalid? // TODO: Investigate. 401 => return Err(Error::browser_authentication_failed()), - other => return Err(Error::other_code(other)), + other => return Err(Error::other_code(other, message)), } } Ok(processed) diff --git a/ytmapi-rs/src/auth/oauth.rs b/ytmapi-rs/src/auth/oauth.rs index ba32c109..7f46e6df 100644 --- a/ytmapi-rs/src/auth/oauth.rs +++ b/ytmapi-rs/src/auth/oauth.rs @@ -182,11 +182,16 @@ impl AuthToken for OAuthToken { "Error message received from server, but doesn't have an error code", )); }; + let message = error + .pointer("/message") + .and_then(|s| s.as_str()) + .map(|s| s.to_string()) + .unwrap_or_default(); match code { // TODO: Add some errors for specific cases for this token - example below from // BrowserToken 401 => return // Err(Error::browser_authentication_failed()), - other => return Err(Error::other_code(other)), + other => return Err(Error::other_code(other, message)), } } Ok(processed) diff --git a/ytmapi-rs/src/error.rs b/ytmapi-rs/src/error.rs index ce192b52..710c274d 100644 --- a/ytmapi-rs/src/error.rs +++ b/ytmapi-rs/src/error.rs @@ -67,7 +67,10 @@ pub enum ErrorKind { // This is a u64 not a usize as that is what serde_json will deserialize to. // TODO: Could use a library to handle these. /// Recieved an error code in the Json reply from InnerTube. - OtherErrorCodeInResponse(u64), + OtherErrorCodeInResponse { + code: u64, + message: String, + }, } /// The type we were attempting to pass from the Json. #[derive(Debug, Clone)] @@ -109,7 +112,7 @@ impl Error { | ErrorKind::Header | ErrorKind::Other(_) | ErrorKind::UnableToSerializeGoogleOAuthToken { .. } - | ErrorKind::OtherErrorCodeInResponse(_) + | ErrorKind::OtherErrorCodeInResponse { .. } | ErrorKind::OAuthTokenExpired | ErrorKind::BrowserAuthenticationFailed | ErrorKind::InvalidUserAgent(_) => None, @@ -172,9 +175,9 @@ impl Error { inner: Box::new(ErrorKind::Other(msg.into())), } } - pub(crate) fn other_code(code: u64) -> Self { + pub(crate) fn other_code(code: u64, message: String) -> Self { Self { - inner: Box::new(ErrorKind::OtherErrorCodeInResponse(code)), + inner: Box::new(ErrorKind::OtherErrorCodeInResponse { code, message }), } } } @@ -190,8 +193,11 @@ impl Display for ErrorKind { write!(f, "Response is invalid json - unable to deserialize.") } ErrorKind::Other(msg) => write!(f, "Generic error - {msg} - recieved."), - ErrorKind::OtherErrorCodeInResponse(code) => { - write!(f, "Http error code {code} recieved in response.") + ErrorKind::OtherErrorCodeInResponse { code, message } => { + write!( + f, + "Http error code {code} recieved in response. Message: <{message}>." + ) } ErrorKind::Navigation { key, json: _ } => { write!(f, "Key {key} not found in Api response.") diff --git a/ytmapi-rs/src/lib.rs b/ytmapi-rs/src/lib.rs index 43e096b1..792869e1 100644 --- a/ytmapi-rs/src/lib.rs +++ b/ytmapi-rs/src/lib.rs @@ -57,7 +57,7 @@ use parse::{ AddPlaylistItem, AlbumParams, ApiSuccess, ArtistParams, GetLibraryArtistSubscription, GetPlaylist, ParseFrom, ProcessedResult, SearchResultAlbum, SearchResultArtist, SearchResultEpisode, SearchResultFeaturedPlaylist, SearchResultPlaylist, SearchResultPodcast, - SearchResultProfile, SearchResultSong, SearchResultVideo, SearchResults, + SearchResultProfile, SearchResultSong, SearchResultVideo, SearchResults, SongResult, }; pub use process::RawResult; use query::{ @@ -312,7 +312,7 @@ impl YtMusic { ) -> Result> { query.call(self).await } - pub async fn get_library_songs(&self, query: GetLibrarySongsQuery) -> Result<()> { + pub async fn get_library_songs(&self, query: GetLibrarySongsQuery) -> Result> { query.call(self).await } pub async fn get_library_albums( diff --git a/ytmapi-rs/src/parse/library.rs b/ytmapi-rs/src/parse/library.rs index 9686aeb0..d02d563e 100644 --- a/ytmapi-rs/src/parse/library.rs +++ b/ytmapi-rs/src/parse/library.rs @@ -1,6 +1,7 @@ use super::{ - parse_item_text, ParseFrom, ProcessedResult, SearchResultAlbum, BADGE_LABEL, SUBTITLE, - SUBTITLE2, SUBTITLE3, SUBTITLE_BADGE_LABEL, THUMBNAILS, TWO_COLUMN, + parse_item_text, parse_playlist_items, ParseFrom, ProcessedResult, SearchResultAlbum, + SongResult, BADGE_LABEL, SUBTITLE, SUBTITLE2, SUBTITLE3, SUBTITLE_BADGE_LABEL, THUMBNAILS, + TWO_COLUMN, }; use crate::common::library::{LibraryArtist, Playlist}; use crate::common::{AlbumType, Explicit, PlaylistID}; @@ -45,7 +46,7 @@ impl ParseFrom for Vec { } } -impl ParseFrom for () { +impl ParseFrom for Vec { fn parse_from( p: ProcessedResult, ) -> crate::Result<::Output> { @@ -89,13 +90,23 @@ fn parse_library_albums( .map(|r| parse_item_list_albums(r)) .collect() } -fn parse_library_songs(json_crawler: JsonCrawler) -> std::prelude::v1::Result<(), crate::Error> { - todo!() +fn parse_library_songs( + json_crawler: JsonCrawler, +) -> std::prelude::v1::Result, crate::Error> { + let mut contents = json_crawler.navigate_pointer(concatcp!( + SINGLE_COLUMN_TAB, + SECTION_LIST_ITEM, + MUSIC_SHELF, + "/contents" + ))?; + parse_playlist_items(super::MusicShelfContents { + json: contents.borrow_mut(), + }) } fn parse_library_artist_subscriptions( json_crawler: JsonCrawler, ) -> std::prelude::v1::Result, crate::Error> { - let mut contents = json_crawler.navigate_pointer(concatcp!( + let contents = json_crawler.navigate_pointer(concatcp!( SINGLE_COLUMN_TAB, SECTION_LIST_ITEM, MUSIC_SHELF, @@ -103,7 +114,7 @@ fn parse_library_artist_subscriptions( ))?; contents .into_array_into_iter()? - .map(|mut r| parse_content_list_artist_subscriptions(r)) + .map(|r| parse_content_list_artist_subscriptions(r)) .collect() } diff --git a/ytmapi-rs/src/query/library.rs b/ytmapi-rs/src/query/library.rs index 6b13b561..dbe56446 100644 --- a/ytmapi-rs/src/query/library.rs +++ b/ytmapi-rs/src/query/library.rs @@ -1,7 +1,7 @@ use super::Query; use crate::{ common::library::{LibraryArtist, Playlist}, - parse::{GetLibraryArtistSubscription, SearchResultAlbum}, + parse::{GetLibraryArtistSubscription, SearchResultAlbum, SongResult}, }; use serde_json::json; use std::borrow::Cow; @@ -78,7 +78,7 @@ impl Query for GetLibraryArtistsQuery { } impl Query for GetLibrarySongsQuery { - type Output = () + type Output = Vec where Self: Sized; fn header(&self) -> serde_json::Map { diff --git a/ytmapi-rs/test_json/get_library_songs_20240701_output.txt b/ytmapi-rs/test_json/get_library_songs_20240701_output.txt index e69de29b..4b5d1bcd 100644 --- a/ytmapi-rs/test_json/get_library_songs_20240701_output.txt +++ b/ytmapi-rs/test_json/get_library_songs_20240701_output.txt @@ -0,0 +1,1178 @@ +[ + SongResult { + core: ResultCore { + set_video_id: None, + duration: None, + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Shuffle all", + like_status: None, + thumbnails: [], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "", + ), + track_no: 1, + album: None, + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "3:19", + ), + feedback_tok_add: Some( + "AB9zfpJweMFK78ZGc4BVhcuxCGJtNl71EWLk8ZA7fWlN7V_jx2YL9oIqabHbfm2csGUByk0CMZpQcs0v0Ty46j_pgZdwlQsjrA", + ), + feedback_tok_rem: Some( + "AB9zfpKKiYM8ID11llmuHbgtddkSkXfhixNrFwD25CginkqpNM9KBvl1E3fszJOXruitt256O5_17FvUx9chLjB5WVAdLUDrLw", + ), + title: "The Winter of Our Passing", + like_status: Some( + "LIKE", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/8_5wtd1RFFiVSrps7PcqY2rMdzI3I00WK6ATtBK6c3oIEzLVp0eg6kFprjEJfXqay8hFPJIE0o5OJYLt=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/8_5wtd1RFFiVSrps7PcqY2rMdzI3I00WK6ATtBK6c3oIEzLVp0eg6kFprjEJfXqay8hFPJIE0o5OJYLt=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: true, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "0Toq8VrbLTQ", + ), + track_no: 2, + album: Some( + ParsedSongAlbum { + name: Some( + "City Burials", + ), + id: Some( + "MPREb_6SxVm1I0tl9", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "1:19", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Pyramid Strings", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "-7avE0GKZrA", + ), + track_no: 3, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "5:33", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "How to Disappear into Strings", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "1ACmCuuIaMQ", + ), + track_no: 4, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "0:47", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Untitled v2", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "1WzCN1syZfc", + ), + track_no: 5, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "4:36", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Morning Bell", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "1pTnps5RQeE", + ), + track_no: 6, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "0:53", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Untitled", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "2Hjrxn8qeig", + ), + track_no: 7, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "2:26", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Fog (Again Again Version)", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "9vPi8mWg-_8", + ), + track_no: 8, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "3:15", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Morning Bell/Amnesiac", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "DWoL_N4zXUI", + ), + track_no: 9, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "4:21", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "If You Say the Word", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "GcIyKK8m4qo", + ), + track_no: 10, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "3:21", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Motion Picture Soundtrack", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "Gy9sQ_7bMk8", + ), + track_no: 11, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "5:57", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "How to Disappear Completely", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "HY_UbJ3rEfY", + ), + track_no: 12, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "4:01", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Packt Like Sardines In a Crushd Tin Box", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "JFMq6lCJdHA", + ), + track_no: 13, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "5:10", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Idioteque", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "LyVB_52G4pg", + ), + track_no: 14, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "4:52", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Dollars and Cents", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "NGL_j8T1YVE", + ), + track_no: 15, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "4:54", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "I Might Be Wrong", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "OYe7gqwrkro", + ), + track_no: 16, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "4:08", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Pulk/Pull Revolving Doors", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "Ps6txeTlzkg", + ), + track_no: 17, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "5:05", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Like Spinning Plates ('Why Us?' Version)", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "QhHMJkeF8zo", + ), + track_no: 18, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "3:58", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Like Spinning Plates", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "SKUdDojvq4E", + ), + track_no: 19, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "4:45", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Kid A", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "TOfU3wVpwZQ", + ), + track_no: 20, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "1:49", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Untitled v1", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "ZTvniQgAQ0o", + ), + track_no: 21, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "2:02", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Hunting Bears", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "ZtdW3HTUQqo", + ), + track_no: 22, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "2:47", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Pulk/Pull (True Love Waits Version)", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "cDQ7raytW0M", + ), + track_no: 23, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "4:12", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Everything In Its Right Place", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "d9zk2j3JPK4", + ), + track_no: 24, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "1:33", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Alt. Fast Track", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "dJV-1zkaTq8", + ), + track_no: 25, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, + SongResult { + core: ResultCore { + set_video_id: None, + duration: Some( + "3:43", + ), + feedback_tok_add: None, + feedback_tok_rem: None, + title: "Treefingers", + like_status: Some( + "INDIFFERENT", + ), + thumbnails: [ + Thumbnail { + height: 60, + width: 60, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w60-h60-l90-rj", + }, + Thumbnail { + height: 120, + width: 120, + url: "https://lh3.googleusercontent.com/xKX7vViVFA060KCM-JtJSpGBI3o-pt45fL1Nrl1WaOr0GVfdlcEeDyyAKnHF3-Urh0T36n0bx50_Woc=w120-h120-l90-rj", + }, + ], + is_available: true, + is_explicit: false, + video_type: None, + browse_id: None, + playlist_id: None, + playlist_subtitle: None, + }, + video_id: VideoID( + "gA0J1V1_pXM", + ), + track_no: 26, + album: Some( + ParsedSongAlbum { + name: Some( + "KID A MNESIA", + ), + id: Some( + "MPREb_E7NpKw54NIT", + ), + }, + ), + }, +] From ae097150799936d8acb7004f95c24af96fb6e80b Mon Sep 17 00:00:00 2001 From: Nick Dowsett Date: Mon, 1 Jul 2024 20:13:31 +0800 Subject: [PATCH 6/8] Linting --- youtui/src/app/view/draw.rs | 2 +- ytmapi-rs/src/parse/library.rs | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/youtui/src/app/view/draw.rs b/youtui/src/app/view/draw.rs index abafbb4d..7f2da29b 100644 --- a/youtui/src/app/view/draw.rs +++ b/youtui/src/app/view/draw.rs @@ -12,7 +12,7 @@ use ratatui::{ prelude::{Margin, Rect}, style::{Modifier, Style}, symbols::{block, line}, - text::{Line, Text}, + text::{Line}, widgets::{ block::{Position, Title}, Block, Borders, Cell, List, ListItem, ListState, Paragraph, Row, Scrollbar, diff --git a/ytmapi-rs/src/parse/library.rs b/ytmapi-rs/src/parse/library.rs index d02d563e..2f6a3fe0 100644 --- a/ytmapi-rs/src/parse/library.rs +++ b/ytmapi-rs/src/parse/library.rs @@ -1,11 +1,10 @@ use super::{ parse_item_text, parse_playlist_items, ParseFrom, ProcessedResult, SearchResultAlbum, - SongResult, BADGE_LABEL, SUBTITLE, SUBTITLE2, SUBTITLE3, SUBTITLE_BADGE_LABEL, THUMBNAILS, - TWO_COLUMN, + SongResult, SUBTITLE, SUBTITLE2, SUBTITLE3, SUBTITLE_BADGE_LABEL, THUMBNAILS, }; use crate::common::library::{LibraryArtist, Playlist}; use crate::common::{AlbumType, Explicit, PlaylistID}; -use crate::crawler::{JsonCrawler, JsonCrawlerBorrowed}; +use crate::crawler::{JsonCrawler}; use crate::nav_consts::{ GRID, GRID_ITEMS, ITEM_SECTION, MRLIR, MTRIR, MUSIC_SHELF, NAVIGATION_BROWSE_ID, SECTION_LIST, SECTION_LIST_ITEM, SINGLE_COLUMN_TAB, THUMBNAIL_RENDERER, TITLE, TITLE_TEXT, From 24621281ebcb4c809cf3c04144d9f55cce2a3513 Mon Sep 17 00:00:00 2001 From: Nick Dowsett Date: Mon, 1 Jul 2024 20:47:15 +0800 Subject: [PATCH 7/8] Linting - continued --- ytmapi-rs/src/auth/browser.rs | 4 +- ytmapi-rs/src/auth/oauth.rs | 10 ++--- ytmapi-rs/src/common.rs | 2 +- ytmapi-rs/src/crawler.rs | 6 +-- ytmapi-rs/src/error.rs | 16 ++------ ytmapi-rs/src/nav_consts.rs | 10 ++--- ytmapi-rs/src/parse/album.rs | 6 +-- ytmapi-rs/src/parse/artist.rs | 5 +-- ytmapi-rs/src/parse/library.rs | 6 +-- ytmapi-rs/src/parse/playlists.rs | 20 ++++------ ytmapi-rs/src/parse/search.rs | 26 ++++++------- ytmapi-rs/src/query.rs | 2 +- ytmapi-rs/src/query/playlist.rs | 18 ++++----- ytmapi-rs/src/query/playlist/edit.rs | 4 +- ytmapi-rs/src/query/search.rs | 12 +++--- ytmapi-rs/src/query/search/filteredsearch.rs | 40 ++++++++++---------- ytmapi-rs/src/tests.rs | 38 +++++++++---------- 17 files changed, 104 insertions(+), 121 deletions(-) diff --git a/ytmapi-rs/src/auth/browser.rs b/ytmapi-rs/src/auth/browser.rs index e8f77746..7397c08b 100644 --- a/ytmapi-rs/src/auth/browser.rs +++ b/ytmapi-rs/src/auth/browser.rs @@ -112,7 +112,7 @@ impl BrowserToken { .split_once("INNERTUBE_CLIENT_VERSION\":\"") .ok_or(Error::header())? .1 - .split_once("\"") + .split_once('\"') .ok_or(Error::header())? .0 .to_string(); @@ -120,7 +120,7 @@ impl BrowserToken { .split_once("SAPISID=") .ok_or(Error::header())? .1 - .split_once(";") + .split_once(';') .ok_or(Error::header())? .0 .to_string(); diff --git a/ytmapi-rs/src/auth/oauth.rs b/ytmapi-rs/src/auth/oauth.rs index 7f46e6df..34f05638 100644 --- a/ytmapi-rs/src/auth/oauth.rs +++ b/ytmapi-rs/src/auth/oauth.rs @@ -187,12 +187,8 @@ impl AuthToken for OAuthToken { .and_then(|s| s.as_str()) .map(|s| s.to_string()) .unwrap_or_default(); - match code { - // TODO: Add some errors for specific cases for this token - example below from - // BrowserToken 401 => return - // Err(Error::browser_authentication_failed()), - other => return Err(Error::other_code(other, message)), - } + // TODO: Error matching + return Err(Error::other_code(code, message)); } Ok(processed) } @@ -261,6 +257,6 @@ impl OAuthTokenGenerator { .await? .text() .await?; - Ok(serde_json::from_str(&result).map_err(|_| Error::response(&result))?) + serde_json::from_str(&result).map_err(|_| Error::response(&result)) } } diff --git a/ytmapi-rs/src/common.rs b/ytmapi-rs/src/common.rs index 82d395b7..f34f44c7 100644 --- a/ytmapi-rs/src/common.rs +++ b/ytmapi-rs/src/common.rs @@ -50,7 +50,7 @@ impl SearchSuggestion { pub fn get_text(&self) -> String { self.runs .iter() - .fold(String::new(), |acc, r| acc + &r.get_text()) + .fold(String::new(), |acc, r| acc + r.get_text()) } pub(crate) fn new(suggestion_type: SuggestionType, runs: Vec) -> Self { Self { diff --git a/ytmapi-rs/src/crawler.rs b/ytmapi-rs/src/crawler.rs index 52da0a1d..8bde38b6 100644 --- a/ytmapi-rs/src/crawler.rs +++ b/ytmapi-rs/src/crawler.rs @@ -131,7 +131,7 @@ impl Iterator for JsonCrawlerArrayIntoIter { } } // Default implementation is correct, due to implementation of size_hint. -impl<'a> ExactSizeIterator for JsonCrawlerArrayIntoIter {} +impl ExactSizeIterator for JsonCrawlerArrayIntoIter {} impl<'a> JsonCrawlerBorrowed<'a> { pub fn into_array_iter_mut(self) -> Result> { @@ -243,11 +243,11 @@ impl JsonCrawler { cur: 0, }); } - return Err(Error::parsing( + Err(Error::parsing( &self.path, self.source.clone(), ParseTarget::Array, - )); + )) } pub fn as_array_iter_mut(&mut self) -> Result> { let json_array = self diff --git a/ytmapi-rs/src/error.rs b/ytmapi-rs/src/error.rs index 710c274d..f5f37019 100644 --- a/ytmapi-rs/src/error.rs +++ b/ytmapi-rs/src/error.rs @@ -86,26 +86,18 @@ impl Error { } // Only used for tests currently. pub(crate) fn is_oauth_expired(&self) -> bool { - if let ErrorKind::OAuthTokenExpired = *self.inner { - true - } else { - false - } + matches!(*self.inner, ErrorKind::OAuthTokenExpired) } // Only used for tests currently. pub(crate) fn is_browser_authentication_failed(&self) -> bool { - if let ErrorKind::BrowserAuthenticationFailed = *self.inner { - true - } else { - false - } + matches!(*self.inner, ErrorKind::BrowserAuthenticationFailed) } /// If an error is a Navigation or Parsing error, return the source Json and /// key at the location of the error. pub fn get_json_and_key(&self) -> Option<(String, &String)> { match self.inner.as_ref() { - ErrorKind::Navigation { json, key } => Some((json.to_string(), &key)), - ErrorKind::Parsing { json, key, .. } => Some((json.to_string(), &key)), + ErrorKind::Navigation { json, key } => Some((json.to_string(), key)), + ErrorKind::Parsing { json, key, .. } => Some((json.to_string(), key)), ErrorKind::Web(_) | ErrorKind::Io(_) | ErrorKind::InvalidResponse { .. } diff --git a/ytmapi-rs/src/nav_consts.rs b/ytmapi-rs/src/nav_consts.rs index 6a1cc985..7bfbc249 100644 --- a/ytmapi-rs/src/nav_consts.rs +++ b/ytmapi-rs/src/nav_consts.rs @@ -18,13 +18,13 @@ pub const PLAY_BUTTON: &str = pub const NAVIGATION_BROWSE: &str = "/navigationEndpoint/browseEndpoint"; pub const _PAGE_TYPE: &str = "/browseEndpointContextSupportedConfigs/browseEndpointContextMusicConfig/pageType"; -pub const WATCH_VIDEO_ID: &str = "/watchEndpoint/videoId"; +pub const _WATCH_VIDEO_ID: &str = "/watchEndpoint/videoId"; pub const NAVIGATION_WATCH_PLAYLIST_ID: &str = "/navigationEndpoint/watchPlaylistEndpoint/playlistId"; pub const NAVIGATION_VIDEO_TYPE: &str = "/watchEndpoint/watchEndpointMusicSupportedConfigs/watchEndpointMusicConfig,musicVideoType"; pub const TITLE: &str = "/title/runs/0"; -pub const TEXT_RUNS: &str = "/text/runs"; +pub const _TEXT_RUNS: &str = "/text/runs"; pub const SUBTITLE_RUNS: &str = "/subtitle/runs"; pub const SECOND_SUBTITLE_RUNS: &str = "/secondSubtitle/runs"; pub const THUMBNAIL: &str = "/thumbnail/thumbnails"; @@ -48,7 +48,7 @@ pub const _IMMERSIVE_CAROUSEL: &str = "/musicImmersiveCarouselShelfRenderer"; pub const _FRAMEWORK_MUTATIONS: &str = "/frameworkUpdates/entityBatchUpdate/mutations"; pub const RESPONSIVE_HEADER: &str = "/musicResponsiveHeaderRenderer"; pub const TITLE_TEXT: &str = concatcp!("/title", RUN_TEXT); -pub const _NAVIGATION_VIDEO_ID: &str = concatcp!("/navigationEndpoint", WATCH_VIDEO_ID); +pub const _NAVIGATION_VIDEO_ID: &str = concatcp!("/navigationEndpoint", _WATCH_VIDEO_ID); pub const PLAYLIST_ITEM_VIDEO_ID: &str = "/playlistItemData/videoId"; pub const SINGLE_COLUMN_TAB: &str = concatcp!(SINGLE_COLUMN, TAB_CONTENT); pub const SECTION_LIST_ITEM: &str = concatcp!("/sectionListRenderer", CONTENT); @@ -59,8 +59,8 @@ pub const MENU_LIKE_STATUS: &str = concatcp!(MENU, "/topLevelButtons/0/likeButtonRenderer/likeStatus"); pub const NAVIGATION_BROWSE_ID: &str = concatcp!(NAVIGATION_BROWSE, "/browseId"); pub const NAVIGATION_PLAYLIST_ID: &str = concatcp!("/navigationEndpoint/watchEndpoint/playlistId"); -pub const TEXT_RUN: &str = concatcp!(TEXT_RUNS, "/0"); -pub const TEXT_RUN_TEXT: &str = concatcp!(TEXT_RUN, "/text"); +pub const _TEXT_RUN: &str = concatcp!(_TEXT_RUNS, "/0"); +pub const _TEXT_RUN_TEXT: &str = concatcp!(_TEXT_RUN, "/text"); pub const SUBTITLE: &str = concatcp!("/subtitle", RUN_TEXT); pub const SUBTITLE2: &str = concatcp!(SUBTITLE_RUNS, "/2/text"); pub const SUBTITLE3: &str = concatcp!(SUBTITLE_RUNS, "/4/text"); diff --git a/ytmapi-rs/src/parse/album.rs b/ytmapi-rs/src/parse/album.rs index 946f8f26..04d4876c 100644 --- a/ytmapi-rs/src/parse/album.rs +++ b/ytmapi-rs/src/parse/album.rs @@ -46,7 +46,7 @@ pub struct AlbumParams { pub(crate) struct MusicShelfContents<'a> { pub json: JsonCrawlerBorrowed<'a>, } -impl<'a, 'b> MusicShelfContents<'a> { +impl<'a> MusicShelfContents<'a> { pub fn from_crawler(crawler: JsonCrawlerBorrowed<'a>) -> Self { Self { json: crawler } } @@ -167,7 +167,7 @@ fn parse_album_query(p: ProcessedResult) -> Result { .and_then(|s| s.into_array_iter_mut().ok()) .and_then(|mut a| { if a.len() > 1 { - a.nth(0) + a.next() .and_then(|mut v| v.take_value_pointer("/text").ok()) } else { None @@ -182,7 +182,7 @@ fn parse_album_query(p: ProcessedResult) -> Result { a.nth(2) .and_then(|mut v| v.take_value_pointer("/text").ok()) } else { - a.nth(0) + a.next() .and_then(|mut v| v.take_value_pointer("/text").ok()) } }) diff --git a/ytmapi-rs/src/parse/artist.rs b/ytmapi-rs/src/parse/artist.rs index 62997e23..89737a71 100644 --- a/ytmapi-rs/src/parse/artist.rs +++ b/ytmapi-rs/src/parse/artist.rs @@ -115,7 +115,7 @@ impl<'a> ParseFrom> for ArtistParams { CAROUSEL_TITLE, "/navigationEndpoint/browseEndpoint/params" )) - .map(|params| BrowseParams::from_raw(params)) + .map(BrowseParams::from_raw) .ok(); // TODO: finish other categories match category { @@ -128,7 +128,7 @@ impl<'a> ParseFrom> for ArtistParams { results.push(parse_album_from_mtrir(i.navigate_pointer(MTRIR)?)?); } let albums = GetArtistAlbums { - browse_id: browse_id.map(|id| AlbumID::from_raw(id)), + browse_id: browse_id.map(AlbumID::from_raw), params, results, }; @@ -461,7 +461,6 @@ impl<'a> ParseFrom> for Vec { for mut r in json_crawler .borrow_mut() .into_array_iter_mut()? - .into_iter() .flat_map(|i| i.navigate_pointer(MTRIR)) { let browse_id = r.take_value_pointer(concatcp!(TITLE, NAVIGATION_BROWSE_ID))?; diff --git a/ytmapi-rs/src/parse/library.rs b/ytmapi-rs/src/parse/library.rs index 2f6a3fe0..55fca44c 100644 --- a/ytmapi-rs/src/parse/library.rs +++ b/ytmapi-rs/src/parse/library.rs @@ -4,7 +4,7 @@ use super::{ }; use crate::common::library::{LibraryArtist, Playlist}; use crate::common::{AlbumType, Explicit, PlaylistID}; -use crate::crawler::{JsonCrawler}; +use crate::crawler::JsonCrawler; use crate::nav_consts::{ GRID, GRID_ITEMS, ITEM_SECTION, MRLIR, MTRIR, MUSIC_SHELF, NAVIGATION_BROWSE_ID, SECTION_LIST, SECTION_LIST_ITEM, SINGLE_COLUMN_TAB, THUMBNAIL_RENDERER, TITLE, TITLE_TEXT, @@ -86,7 +86,7 @@ fn parse_library_albums( ))?; items .into_array_into_iter()? - .map(|r| parse_item_list_albums(r)) + .map(parse_item_list_albums) .collect() } fn parse_library_songs( @@ -113,7 +113,7 @@ fn parse_library_artist_subscriptions( ))?; contents .into_array_into_iter()? - .map(|r| parse_content_list_artist_subscriptions(r)) + .map(parse_content_list_artist_subscriptions) .collect() } diff --git a/ytmapi-rs/src/parse/playlists.rs b/ytmapi-rs/src/parse/playlists.rs index e4cc55e6..6549cbf6 100644 --- a/ytmapi-rs/src/parse/playlists.rs +++ b/ytmapi-rs/src/parse/playlists.rs @@ -51,7 +51,7 @@ pub struct AddPlaylistItem { impl<'a> ParseFrom> for ApiSuccess { fn parse_from( - p: ProcessedResult>, + _: ProcessedResult>, ) -> crate::Result< as crate::query::Query>::Output> { Ok(ApiSuccess {}) } @@ -72,9 +72,7 @@ impl<'a, T: SpecialisedQuery> ParseFrom> for Vec (), - "STATUS_FAILED" => { - return Err(Error::other(format!("STATUS_FAILED received from API"))) - } + "STATUS_FAILED" => return Err(Error::other("STATUS_FAILED received from API")), other => { return Err(Error::other(format!( "Unknown status {other} received from API" @@ -101,18 +99,16 @@ impl<'a> ParseFrom> for ApiSuccess { let json_crawler: JsonCrawler = p.into(); let status: String = json_crawler.navigate_pointer("/status")?.take_value()?; match status.as_str() { - "STATUS_SUCCEEDED" => return Ok(ApiSuccess {}), - other => { - return Err(Error::other(format!( - "Unknown status {other} received from API" - ))) - } + "STATUS_SUCCEEDED" => Ok(ApiSuccess {}), + other => Err(Error::other(format!( + "Unknown status {other} received from API" + ))), } } } impl<'a> ParseFrom> for ApiSuccess { fn parse_from( - p: ProcessedResult>, + _: ProcessedResult>, ) -> crate::Result< as crate::query::Query>::Output> { Ok(ApiSuccess {}) } @@ -277,7 +273,7 @@ mod tests { PlaylistID::from_raw(""), ); let output = YtMusic::::process_json(source, query); - let err: crate::Result<()> = Err(Error::other(format!("STATUS_FAILED received from API"))); + let err: crate::Result<()> = Err(Error::other("STATUS_FAILED received from API")); assert_eq!(format!("{:?}", err), format!("{:?}", output)); } #[tokio::test] diff --git a/ytmapi-rs/src/parse/search.rs b/ytmapi-rs/src/parse/search.rs index 235ac61d..de293061 100644 --- a/ytmapi-rs/src/parse/search.rs +++ b/ytmapi-rs/src/parse/search.rs @@ -309,7 +309,7 @@ fn parse_album_search_result_from_music_shelf_contents( ) -> Result { let mut mrlir = music_shelf_contents.navigate_pointer("/musicResponsiveListItemRenderer")?; let artist = parse_item_text(&mut mrlir, 0, 0)?; - let album_type = parse_item_text(&mut mrlir, 1, 0).and_then(|a| AlbumType::try_from_str(a))?; + let album_type = parse_item_text(&mut mrlir, 1, 0).and_then(AlbumType::try_from_str)?; let title = parse_item_text(&mut mrlir, 1, 2)?; let year = parse_item_text(&mut mrlir, 1, 4)?; let explicit = if mrlir.path_exists(BADGE_LABEL) { @@ -374,14 +374,14 @@ fn parse_video_search_result_from_music_shelf_contents( let length = parse_item_text(&mut mrlir, 1, 6)?; let video_id = mrlir.take_value_pointer(PLAYLIST_ITEM_VIDEO_ID)?; let thumbnails: Vec = mrlir.take_value_pointer(THUMBNAILS)?; - return Ok(SearchResultVideo::Video { + Ok(SearchResultVideo::Video { title, channel_name, views, length, thumbnails, video_id, - }); + }) } "Episode" => { //TODO: Handle live episode @@ -391,13 +391,13 @@ fn parse_video_search_result_from_music_shelf_contents( let channel_name = parse_item_text(&mut mrlir, 1, 4)?; let video_id = mrlir.take_value_pointer(PLAYLIST_ITEM_VIDEO_ID)?; let thumbnails: Vec = mrlir.take_value_pointer(THUMBNAILS)?; - return Ok(SearchResultVideo::VideoEpisode { + Ok(SearchResultVideo::VideoEpisode { title, channel_name, date, thumbnails, video_id, - }); + }) } _ => { // Assume that if a watch endpoint exists, it's a video. @@ -407,26 +407,26 @@ fn parse_video_search_result_from_music_shelf_contents( let length = parse_item_text(&mut mrlir, 1, 4)?; let video_id = mrlir.take_value_pointer(PLAYLIST_ITEM_VIDEO_ID)?; let thumbnails: Vec = mrlir.take_value_pointer(THUMBNAILS)?; - return Ok(SearchResultVideo::Video { + Ok(SearchResultVideo::Video { title, channel_name: first_field, views, length, thumbnails, video_id, - }); + }) } else { let channel_name = parse_item_text(&mut mrlir, 1, 2)?; let video_id = mrlir.take_value_pointer(PLAYLIST_ITEM_VIDEO_ID)?; let thumbnails: Vec = mrlir.take_value_pointer(THUMBNAILS)?; - return Ok(SearchResultVideo::VideoEpisode { + Ok(SearchResultVideo::VideoEpisode { title, channel_name, //TODO: Handle live episode date: EpisodeDate::Recorded { date: first_field }, thumbnails, video_id, - }); + }) } } } @@ -893,9 +893,9 @@ impl<'a> ParseFrom> for Vec { { for mut r in search_suggestion.into_array_iter_mut()? { if let Ok(true) = r.take_value_pointer("/bold") { - runs.push(r.take_value_pointer("/text").map(|s| TextRun::Bold(s))?) + runs.push(r.take_value_pointer("/text").map(TextRun::Bold)?) } else { - runs.push(r.take_value_pointer("/text").map(|s| TextRun::Normal(s))?) + runs.push(r.take_value_pointer("/text").map(TextRun::Normal)?) } } results.push(SearchSuggestion::new(SuggestionType::Prediction, runs)) @@ -905,9 +905,9 @@ impl<'a> ParseFrom> for Vec { .into_array_iter_mut()? { if let Ok(true) = r.take_value_pointer("/bold") { - runs.push(r.take_value_pointer("/text").map(|s| TextRun::Bold(s))?) + runs.push(r.take_value_pointer("/text").map(TextRun::Bold)?) } else { - runs.push(r.take_value_pointer("/text").map(|s| TextRun::Normal(s))?) + runs.push(r.take_value_pointer("/text").map(TextRun::Normal)?) } } results.push(SearchSuggestion::new(SuggestionType::History, runs)) diff --git a/ytmapi-rs/src/query.rs b/ytmapi-rs/src/query.rs index 29b723a1..83e6b92e 100644 --- a/ytmapi-rs/src/query.rs +++ b/ytmapi-rs/src/query.rs @@ -85,7 +85,7 @@ pub mod continuations { } impl<'a> ParseFrom>> for () { fn parse_from( - p: ProcessedResult>>, + _: ProcessedResult>>, ) -> crate::Result<> as Query>::Output> { todo!() diff --git a/ytmapi-rs/src/query/playlist.rs b/ytmapi-rs/src/query/playlist.rs index 533b851d..345347cf 100644 --- a/ytmapi-rs/src/query/playlist.rs +++ b/ytmapi-rs/src/query/playlist.rs @@ -9,7 +9,7 @@ pub use create::*; pub use edit::*; use serde::{Deserialize, Serialize}; use serde_json::json; -use std::borrow::Cow; +use std::{borrow::Cow, fmt::Display}; pub mod additems; pub mod create; @@ -41,14 +41,14 @@ impl TryFrom<&str> for PrivacyStatus { } } } -impl ToString for PrivacyStatus { - fn to_string(&self) -> String { - match self { +impl Display for PrivacyStatus { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + let str = match self { PrivacyStatus::Public => "PUBLIC", PrivacyStatus::Private => "PRIVATE", PrivacyStatus::Unlisted => "UNLISTED", - } - .to_string() + }; + write!(f, "{}", str) } } @@ -123,9 +123,9 @@ impl<'a> Query for DeletePlaylistQuery<'a> { None } } -impl<'a> Into> for PlaylistID<'a> { - fn into(self) -> DeletePlaylistQuery<'a> { - DeletePlaylistQuery { id: self } +impl<'a> From> for DeletePlaylistQuery<'a> { + fn from(value: PlaylistID<'a>) -> Self { + DeletePlaylistQuery { id: value } } } diff --git a/ytmapi-rs/src/query/playlist/edit.rs b/ytmapi-rs/src/query/playlist/edit.rs index 859e41e3..f8e6f056 100644 --- a/ytmapi-rs/src/query/playlist/edit.rs +++ b/ytmapi-rs/src/query/playlist/edit.rs @@ -53,7 +53,7 @@ impl<'a> EditPlaylistQuery<'a> { Self { id, new_title: None, - new_privacy_status: Some(new_privacy_status.into()), + new_privacy_status: Some(new_privacy_status), new_description: None, swap_videos_order: None, change_add_order: None, @@ -79,7 +79,7 @@ impl<'a> EditPlaylistQuery<'a> { Self { id, new_title: None, - change_add_order: Some(change_add_order.into()), + change_add_order: Some(change_add_order), new_privacy_status: None, swap_videos_order: None, new_description: None, diff --git a/ytmapi-rs/src/query/search.rs b/ytmapi-rs/src/query/search.rs index afff55d7..25a2919f 100644 --- a/ytmapi-rs/src/query/search.rs +++ b/ytmapi-rs/src/query/search.rs @@ -51,8 +51,8 @@ pub struct UploadSearch; impl SearchType for BasicSearch { fn specialised_params(&self, spelling_mode: &SpellingMode) -> Option> { match spelling_mode { - SpellingMode::ExactMatch => return Some("EhGKAQ4IARABGAEgASgAOAFAAUICCAE%3D".into()), - SpellingMode::WithSuggestions => return None, + SpellingMode::ExactMatch => Some("EhGKAQ4IARABGAEgASgAOAFAAUICCAE%3D".into()), + SpellingMode::WithSuggestions => None, } } } @@ -77,13 +77,13 @@ impl UnfilteredSearchType for LibrarySearch {} impl<'a, S: UnfilteredSearchType> Query for SearchQuery<'a, S> { type Output = SearchResults; fn header(&self) -> serde_json::Map { - search_query_header(&self) + search_query_header(self) } fn path(&self) -> &str { SEARCH_QUERY_PATH } fn params(&self) -> Option> { - search_query_params(&self) + search_query_params(self) } } @@ -229,8 +229,8 @@ impl<'a> Query for GetSearchSuggestionsQuery<'a> { } } -fn search_query_header<'a, S: SearchType>( - query: &SearchQuery<'a, S>, +fn search_query_header( + query: &SearchQuery, ) -> serde_json::Map { let value = query.query.as_ref().into(); serde_json::Map::from_iter([("query".to_string(), value)]) diff --git a/ytmapi-rs/src/query/search/filteredsearch.rs b/ytmapi-rs/src/query/search/filteredsearch.rs index 95f3e1b0..5a37d811 100644 --- a/ytmapi-rs/src/query/search/filteredsearch.rs +++ b/ytmapi-rs/src/query/search/filteredsearch.rs @@ -155,120 +155,120 @@ impl FilteredSearchType for ProfilesFilter { impl<'a> Query for SearchQuery<'a, FilteredSearch> { type Output = Vec; fn header(&self) -> serde_json::Map { - search_query_header(&self) + search_query_header(self) } fn path(&self) -> &str { SEARCH_QUERY_PATH } fn params(&self) -> Option> { - search_query_params(&self) + search_query_params(self) } } impl<'a> Query for SearchQuery<'a, FilteredSearch> { type Output = Vec; fn header(&self) -> serde_json::Map { - search_query_header(&self) + search_query_header(self) } fn path(&self) -> &str { SEARCH_QUERY_PATH } fn params(&self) -> Option> { - search_query_params(&self) + search_query_params(self) } } impl<'a> Query for SearchQuery<'a, FilteredSearch> { type Output = Vec; fn header(&self) -> serde_json::Map { - search_query_header(&self) + search_query_header(self) } fn path(&self) -> &str { SEARCH_QUERY_PATH } fn params(&self) -> Option> { - search_query_params(&self) + search_query_params(self) } } impl<'a> Query for SearchQuery<'a, FilteredSearch> { type Output = Vec; fn header(&self) -> serde_json::Map { - search_query_header(&self) + search_query_header(self) } fn path(&self) -> &str { SEARCH_QUERY_PATH } fn params(&self) -> Option> { - search_query_params(&self) + search_query_params(self) } } impl<'a> Query for SearchQuery<'a, FilteredSearch> { type Output = Vec; fn header(&self) -> serde_json::Map { - search_query_header(&self) + search_query_header(self) } fn path(&self) -> &str { SEARCH_QUERY_PATH } fn params(&self) -> Option> { - search_query_params(&self) + search_query_params(self) } } impl<'a> Query for SearchQuery<'a, FilteredSearch> { type Output = Vec; fn header(&self) -> serde_json::Map { - search_query_header(&self) + search_query_header(self) } fn path(&self) -> &str { SEARCH_QUERY_PATH } fn params(&self) -> Option> { - search_query_params(&self) + search_query_params(self) } } impl<'a> Query for SearchQuery<'a, FilteredSearch> { type Output = Vec; fn header(&self) -> serde_json::Map { - search_query_header(&self) + search_query_header(self) } fn path(&self) -> &str { SEARCH_QUERY_PATH } fn params(&self) -> Option> { - search_query_params(&self) + search_query_params(self) } } impl<'a> Query for SearchQuery<'a, FilteredSearch> { type Output = Vec; fn header(&self) -> serde_json::Map { - search_query_header(&self) + search_query_header(self) } fn path(&self) -> &str { SEARCH_QUERY_PATH } fn params(&self) -> Option> { - search_query_params(&self) + search_query_params(self) } } impl<'a> Query for SearchQuery<'a, FilteredSearch> { type Output = Vec; fn header(&self) -> serde_json::Map { - search_query_header(&self) + search_query_header(self) } fn path(&self) -> &str { SEARCH_QUERY_PATH } fn params(&self) -> Option> { - search_query_params(&self) + search_query_params(self) } } impl<'a> Query for SearchQuery<'a, FilteredSearch> { type Output = Vec; fn header(&self) -> serde_json::Map { - search_query_header(&self) + search_query_header(self) } fn path(&self) -> &str { SEARCH_QUERY_PATH } fn params(&self) -> Option> { - search_query_params(&self) + search_query_params(self) } } diff --git a/ytmapi-rs/src/tests.rs b/ytmapi-rs/src/tests.rs index aac84e80..f236dcf7 100644 --- a/ytmapi-rs/src/tests.rs +++ b/ytmapi-rs/src/tests.rs @@ -122,7 +122,7 @@ async fn test_basic_search_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let _res = api.search("Beatles").await.unwrap(); } #[tokio::test] @@ -130,7 +130,7 @@ async fn test_search_artists_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let _res = api.search_artists("Beatles").await.unwrap(); } #[tokio::test] @@ -243,7 +243,7 @@ async fn test_get_playlist_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); api.get_playlist(GetPlaylistQuery::new(PlaylistID::from_raw( "VLPL0jp-uZ7a4g9FQWW5R_u0pz4yzV4RiOXu", ))) @@ -265,7 +265,7 @@ async fn test_search_songs_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let _res = api.search_songs("Beatles").await.unwrap(); } #[tokio::test] @@ -278,7 +278,7 @@ async fn test_search_albums_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let _res = api.search_albums("Beatles").await.unwrap(); } #[tokio::test] @@ -291,7 +291,7 @@ async fn test_search_videos_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let _res = api.search_videos("Beatles").await.unwrap(); } #[tokio::test] @@ -304,7 +304,7 @@ async fn test_search_episodes_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let _res = api.search_episodes("Beatles").await.unwrap(); } #[tokio::test] @@ -317,7 +317,7 @@ async fn test_search_podcasts_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let _res = api.search_podcasts("Beatles").await.unwrap(); } #[tokio::test] @@ -330,7 +330,7 @@ async fn test_search_profiles_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let _res = api.search_profiles("Beatles").await.unwrap(); } #[tokio::test] @@ -343,7 +343,7 @@ async fn test_search_featured_playlists_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let _res = api.search_featured_playlists("Beatles").await.unwrap(); } #[tokio::test] @@ -356,7 +356,7 @@ async fn test_search_community_playlists_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let _res = api.search_community_playlists("Beatles").await.unwrap(); } #[tokio::test] @@ -369,7 +369,7 @@ async fn test_search_playlists_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let _res = api.search_playlists("Beatles").await.unwrap(); } #[tokio::test] @@ -382,32 +382,32 @@ async fn test_get_library_playlists_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let res = api.get_library_playlists().await.unwrap(); - assert!(res.len() > 0); + assert!(!res.is_empty()); } #[tokio::test] async fn test_get_library_playlists() { let api = new_standard_api().await.unwrap(); let res = api.get_library_playlists().await.unwrap(); - assert!(res.len() > 0); + assert!(!res.is_empty()); } #[tokio::test] async fn test_get_library_artists_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let query = GetLibraryArtistsQuery::default(); let res = api.get_library_artists(query).await.unwrap(); - assert!(res.len() > 0); + assert!(!res.is_empty()); } #[tokio::test] async fn test_get_library_artists() { let api = new_standard_api().await.unwrap(); let query = GetLibraryArtistsQuery::default(); let res = api.get_library_artists(query).await.unwrap(); - assert!(res.len() > 0); + assert!(!res.is_empty()); } #[tokio::test] async fn test_watch_playlist() { @@ -451,7 +451,7 @@ async fn test_search_suggestions_oauth() { let mut api = new_standard_oauth_api().await.unwrap(); // Don't stuff around trying the keep the local OAuth secret up to date, just // refresh it each time. - api.refresh_token().await; + api.refresh_token().await.unwrap(); let res = api.get_search_suggestions("faded").await.unwrap(); let example = SearchSuggestion::new( common::SuggestionType::Prediction, From d39bd6bf1d6074223522761213661517c71e1763 Mon Sep 17 00:00:00 2001 From: Nick Dowsett Date: Mon, 1 Jul 2024 21:50:02 +0800 Subject: [PATCH 8/8] Update README --- README.md | 102 ++++++++++++++++++++++++------------------------------ 1 file changed, 46 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index 015ec502..97329771 100644 --- a/README.md +++ b/README.md @@ -63,66 +63,56 @@ Chrome example (Select manually and paste): - [x] OAuth authentication - [ ] i18n -|Endpoint | Implemented | +|Endpoint | Implemented: Query | Implemented: Continuations | |--- | --- | -|GetArtist | [x] | -|GetAlbum | [x] | -|GetArtistAlbums | [x] | -|Search | [ ]\* | -|GetSearchSuggestions|[x]| -|GetHome|[ ]| -|GetAlbumBrowseId|[ ]| -|GetUser|[ ]| -|GetUserPlaylists|[ ]| -|GetSong|[ ]| -|GetSongRelated|[ ]| -|GetLyrics|[x]| -|GetTasteProfile|[ ]| -|SetTasteProfile|[ ]| -|GetMoodCategories|[ ]| -|GetMoodPlaylists|[ ]| -|GetCharts|[ ]| -|GetWatchPlaylist|[ ]\*| -|GetLibraryPlaylists|[ ]\*| -|GetLibrarySongs|[ ]| -|GetLibraryAlbums|[ ]| -|GetLibraryArtists|[ ]\*| -|GetLibrarySubscriptions|[ ]| -|GetLikedSongs|[ ]| -|GetHistory|[ ]| -|AddHistoryItem|[ ]| -|RemoveHistoryItem|[ ]| -|RateSong|[ ]| -|EditSongLibraryStatus|[ ]| -|RatePlaylist|[ ]| -|SubscribeArtists|[ ]| -|UnsubscribeArtists|[ ]| -|GetPlaylist|[ ]*| -|CreatePlaylist|[x]| -|EditPlaylist|[x]| -|DeletePlaylist|[x]| -|AddPlaylistItems|[x]| -|RemovePlaylistItems|[x]| -|GetLibraryUploadSongs|[ ]| -|GetLibraryUploadArtists|[ ]| -|GetLibraryUploadAlbums|[ ]| -|GetLibraryUploadArtist|[ ]| -|GetLibraryUploadAlbum|[ ]| -|UploadAlbum|[ ]| -|DeleteUploadEntity|[ ]| - -\* search is partially implemented only -- does not implement continuations - only first x results returned. +|GetArtist | [x] || +|GetAlbum | [x] || +|GetArtistAlbums | [x] || +|Search | [x] |[ ]| +|GetSearchSuggestions|[x]|| +|GetHome|[ ]|| +|GetAlbumBrowseId|[ ]|| +|GetUser|[ ]|| +|GetUserPlaylists|[ ]|| +|GetSong|[ ]|| +|GetSongRelated|[ ]|| +|GetLyrics|[x]|| +|GetTasteProfile|[ ]|| +|SetTasteProfile|[ ]|| +|GetMoodCategories|[ ]|| +|GetMoodPlaylists|[ ]|| +|GetCharts|[ ]|| +|GetWatchPlaylist|[ ]\*|[ ]| +|GetLibraryPlaylists|[x]|[ ]| +|GetLibrarySongs|[x]|[ ]| +|GetLibraryAlbums|[x]|[ ]| +|GetLibraryArtists|[x]|[ ]| +|GetLibrarySubscriptions|[x]|[ ]| +|GetLikedSongs|[ ]|| +|GetHistory|[ ]|| +|AddHistoryItem|[ ]|| +|RemoveHistoryItem|[ ]|| +|RateSong|[ ]|| +|EditSongLibraryStatus|[ ]|| +|RatePlaylist|[ ]|| +|SubscribeArtists|[ ]|| +|UnsubscribeArtists|[ ]|| +|GetPlaylist|[x]|[ ]| +|CreatePlaylist|[x]|| +|EditPlaylist|[x]|| +|DeletePlaylist|[x]|| +|AddPlaylistItems|[x]|| +|RemovePlaylistItems|[x]|| +|GetLibraryUploadSongs|[ ]|| +|GetLibraryUploadArtists|[ ]|| +|GetLibraryUploadAlbums|[ ]|| +|GetLibraryUploadArtist|[ ]|| +|GetLibraryUploadAlbum|[ ]|| +|UploadAlbum|[ ]|| +|DeleteUploadEntity|[ ]|| \* get watch playlist is partially implemented only - only returns playlist and lyrics ids -- does not implement continuations - only first x results returned. - -\* get library playlists & artists are partially implemented only -- does not implement continuations - only first x results returned. - -\* get playlist is partially implemented only -- does not implement continuations - only first x results returned. # Additional information See the wiki for additional information