mirror of
https://codeberg.org/Hyperpipe/hyperpipe-backend
synced 2024-12-06 19:26:30 +01:00
fix: album/singles continuation
This commit is contained in:
+21
-32
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user