diff --git a/lib/artist.go b/lib/artist.go index 3219ab2..8a5454b 100644 --- a/lib/artist.go +++ b/lib/artist.go @@ -13,9 +13,10 @@ type Items struct { } type MoreItem struct { - Params string `json:"params"` - Click string `json:"click"` - Visit string `json:"visit"` + BrowseId string `json:"id"` + Params string `json:"params"` + Click string `json:"click"` + Visit string `json:"visit"` } type ArtistMore struct { @@ -39,36 +40,34 @@ type Artist struct { More ArtistMore `json:"more"` } -func parseMoreButton(raw, v gjson.Result) MoreItem { +func parseMoreButton(raw gjson.Result, v string) MoreItem { nav := raw.Get("header.musicCarouselShelfBasicHeaderRenderer.moreContentButton.buttonRenderer.navigationEndpoint") return MoreItem{ + BrowseId: nav.Get("browseEndpoint.browseId").String(), Params: nav.Get("browseEndpoint.params").String(), Click: nav.Get("clickTrackingParams").String(), - Visit: v.String(), + Visit: v, } } func parseArtist(raw string) Artist { - j := gjson.Parse(raw) + visitorData := j.Get("responseContext.visitorData").String() h := j.Get("header.musicImmersiveHeaderRenderer") c := j.Get( "contents.singleColumnBrowseResultsRenderer.tabs.0.tabRenderer.content.sectionListRenderer.contents", ) - s := c.Get("#(musicShelfRenderer.title.runs.0.text == Songs).musicShelfRenderer") - - a := c.Get( + songs := c.Get("#(musicShelfRenderer.title.runs.0.text == Songs).musicShelfRenderer") + albums := c.Get( "#(musicCarouselShelfRenderer.header.musicCarouselShelfBasicHeaderRenderer.title.runs.0.text == Albums).musicCarouselShelfRenderer", ) - - m := c.Get( + singles := c.Get( "#(musicCarouselShelfRenderer.header.musicCarouselShelfBasicHeaderRenderer.title.runs.0.text == Singles).musicCarouselShelfRenderer", ) - - u := c.Get( + users := c.Get( "#(musicCarouselShelfRenderer.header.musicCarouselShelfBasicHeaderRenderer.title.runs.0.text == Fans might also like).musicCarouselShelfRenderer", ) @@ -84,24 +83,23 @@ func parseArtist(raw string) Artist { BrowsePlaylistId: h.Get( "playButton.buttonRenderer.navigationEndpoint.watchEndpoint.playlistId", ).String(), - PlaylistId: s.Get( + PlaylistId: songs.Get( "contents.0.musicResponsiveListItemRenderer.flexColumns.0.musicResponsiveListItemFlexColumnRenderer", ).Get("text.runs.0.navigationEndpoint.watchEndpoint.playlistId").String(), Items: Items{ - Songs: ResponsiveListItemRenderer(s.Get("contents")), - Albums: TwoRowItemRenderer(a.Get("contents"), true), - Singles: TwoRowItemRenderer(m.Get("contents"), true), - Artists: TwoRowItemRenderer(u.Get("contents"), false), + Songs: ResponsiveListItemRenderer(songs.Get("contents")), + Albums: TwoRowItemRenderer(albums.Get("contents"), true), + Singles: TwoRowItemRenderer(singles.Get("contents"), true), + Artists: TwoRowItemRenderer(users.Get("contents"), false), }, More: ArtistMore{ - Album: parseMoreButton(a, j.Get("responseContext.visitorData")), - Singles: parseMoreButton(m, j.Get("responseContext.visitorData")), + Album: parseMoreButton(albums, visitorData), + Singles: parseMoreButton(singles, visitorData), }, } } func parseArtistNext(raw string) ArtistNext { - j := gjson.Parse(raw) return ArtistNext{ @@ -116,27 +114,18 @@ func parseArtistNext(raw string) ArtistNext { } func GetArtist(id string) (Artist, int) { - context := utils.TypeBrowsePage(id, "artist") - raw, status := utils.FetchBrowse(context) - - res := parseArtist(raw) - - return res, status + return parseArtist(raw), status } func GetArtistNext(id, params, ct, v string) (ArtistNext, int) { - if id == "" || params == "" || ct == "" || v == "" { return ArtistNext{}, 404 } context := utils.TypeBrowse(id, params, []string{ct, v}) - raw, status := utils.FetchBrowse(context) - res := parseArtistNext(raw) - - return res, status + return parseArtistNext(raw), status }