Files
2023-04-02 16:53:29 +00:00

64 lines
1.6 KiB
Go

package lib
import (
"codeberg.org/Hyperpipe/hyperpipe-backend/utils"
"github.com/tidwall/gjson"
)
type Options struct {
Default string `json:"default"`
All []Item `json:"all"`
}
type Charts struct {
Options Options `json:"options"`
Artists []Item `json:"artists"`
Trending []Item `json:"trending"`
}
func parseCharts(raw string) Charts {
j := gjson.Parse(raw)
c := j.Get("contents.singleColumnBrowseResultsRenderer.tabs.0").Get("tabRenderer.content.sectionListRenderer.contents")
o := c.Get(
"0.musicShelfRenderer.subheaders.0.musicSideAlignedItemRenderer",
).Get(
"startItems.0.musicSortFilterButtonRenderer",
)
a := c.Get(
"#(musicCarouselShelfRenderer.header.musicCarouselShelfBasicHeaderRenderer.title.runs.0.text == Top artists)",
).Get("musicCarouselShelfRenderer.contents")
t := c.Get(
"#(musicCarouselShelfRenderer.header.musicCarouselShelfBasicHeaderRenderer.title.runs.0.text == Trending)",
).Get("musicCarouselShelfRenderer.contents")
opts := o.Get(
"menu.musicMultiSelectMenuRenderer.options.#.musicMultiSelectMenuItemRenderer",
)
ref := j.Get("frameworkUpdates.entityBatchUpdate.mutations")
return Charts{
Options: Options{
Default: RunsText(o.Get("title")),
All: MultiSelectMenuItemRenderer(opts, ref),
},
Artists: ResponsiveListItemRendererCH(a),
Trending: ResponsiveListItemRenderer(t),
}
}
func GetCharts(params, code string) (Charts, int) {
context := utils.TypeBrowseForm("FEmusic_charts", params, code)
raw, status := utils.FetchBrowse(context)
res := parseCharts(raw)
return res, status
}