fix: album/singles continuation

This commit is contained in:
Shiny Nematoda
2024-07-22 14:09:56 +00:00
parent 3135b73b65
commit 0fadefeb21
+21 -32
View File
@@ -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
}