mirror of
https://codeberg.org/Hyperpipe/hyperpipe-backend
synced 2024-12-06 19:26:30 +01:00
Support for Multiple Chart Regions
This commit is contained in:
+6
-2
@@ -205,7 +205,7 @@ func NavigationButton(s gjson.Result) []Item {
|
||||
return r
|
||||
}
|
||||
|
||||
func MultiSelectMenuItemRenderer(j gjson.Result) []Item {
|
||||
func MultiSelectMenuItemRenderer(j, ref gjson.Result) []Item {
|
||||
|
||||
r := []Item{}
|
||||
|
||||
@@ -219,8 +219,12 @@ func MultiSelectMenuItemRenderer(j gjson.Result) []Item {
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
|
||||
steg := v.Get("formItemEntityKey").String()
|
||||
id := ref.Get("#(entityKey == " + steg + ")" +
|
||||
".payload.musicFormBooleanChoice.opaqueToken")
|
||||
|
||||
r = append(r, Item{
|
||||
Id: v.Get("selectedCommand.commandExecutorCommand.commands.#(musicBrowseFormBinderCommand).musicBrowseFormBinderCommand.browseEndpoint.params").String(),
|
||||
Id: id.String(),
|
||||
Title: RunsText(v.Get("title")),
|
||||
})
|
||||
}()
|
||||
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
|
||||
func Fetch(path string, data []byte) (string, int, error) {
|
||||
|
||||
url := "https://music.youtube.com/youtubei/v1/" + path + "?key=AIzaSyC9XL3ZjWddXya6X74dJoCTL-WEYFDNX30&prettyPrint=false"
|
||||
url := "https://music.youtube.com/youtubei/v1/" + path + "?alt=json&key=AIzaSyC9XL3ZjWddXya6X74dJoCTL-WEYFDNX30&prettyPrint=false"
|
||||
|
||||
req, err := http.NewRequest("POST", url, bytes.NewBuffer(data))
|
||||
if err != nil {
|
||||
@@ -64,7 +64,7 @@ func FetchExplore() (string, int) {
|
||||
|
||||
id := "FEmusic_explore"
|
||||
|
||||
context := GetTypeBrowse("", id, "")
|
||||
context := GetTypeBrowse("", id, "", "")
|
||||
|
||||
raw, status := FetchBrowse(context)
|
||||
|
||||
@@ -80,7 +80,7 @@ func FetchGenres() (string, int) {
|
||||
|
||||
id := "FEmusic_moods_and_genres"
|
||||
|
||||
context := GetTypeBrowse("", id, "")
|
||||
context := GetTypeBrowse("", id, "", "")
|
||||
|
||||
raw, status := FetchBrowse(context)
|
||||
|
||||
@@ -96,7 +96,7 @@ func FetchGenre(param string) (string, int) {
|
||||
|
||||
id := "FEmusic_moods_and_genres_category"
|
||||
|
||||
context := GetTypeBrowse("", id, param)
|
||||
context := GetTypeBrowse("", id, param, "")
|
||||
|
||||
raw, status := FetchBrowse(context)
|
||||
|
||||
@@ -108,11 +108,11 @@ func FetchGenre(param string) (string, int) {
|
||||
return res, status
|
||||
}
|
||||
|
||||
func FetchCharts(params string) (string, int) {
|
||||
func FetchCharts(params, code string) (string, int) {
|
||||
|
||||
id := "FEmusic_charts"
|
||||
|
||||
context := GetTypeBrowse("", id, params)
|
||||
context := GetTypeBrowse("", id, params, code)
|
||||
|
||||
raw, status := FetchBrowse(context)
|
||||
|
||||
@@ -126,7 +126,7 @@ func FetchCharts(params string) (string, int) {
|
||||
|
||||
func FetchArtist(id string) (string, int) {
|
||||
|
||||
context := GetTypeBrowse("artist", id, "")
|
||||
context := GetTypeBrowse("artist", id, "", "")
|
||||
|
||||
raw, status := FetchBrowse(context)
|
||||
|
||||
@@ -140,7 +140,7 @@ func FetchArtist(id string) (string, int) {
|
||||
|
||||
func FetchLyrics(id string) (string, int) {
|
||||
|
||||
context := GetTypeBrowse("lyrics", id, "")
|
||||
context := GetTypeBrowse("lyrics", id, "", "")
|
||||
|
||||
raw, status := FetchBrowse(context)
|
||||
|
||||
@@ -154,7 +154,7 @@ func FetchLyrics(id string) (string, int) {
|
||||
|
||||
func FetchAlbum(id string) (string, int) {
|
||||
|
||||
context := GetTypeBrowse("album", id, "")
|
||||
context := GetTypeBrowse("album", id, "", "")
|
||||
|
||||
raw, status := FetchBrowse(context)
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ func HandleGenre(c *fiber.Ctx) error {
|
||||
func HandleCharts(c *fiber.Ctx) error {
|
||||
defer calc()()
|
||||
|
||||
res, status := FetchCharts(c.Params("id"))
|
||||
res, status := FetchCharts(c.Query("params"), c.Query("code"))
|
||||
|
||||
return c.Status(status).SendString(res)
|
||||
}
|
||||
@@ -106,7 +106,7 @@ func main() {
|
||||
app.Get("/explore", HandleExplore)
|
||||
app.Get("/genres", HandleGenres)
|
||||
app.Get("/genres/:id", HandleGenre)
|
||||
app.Get("/charts/:id", HandleCharts)
|
||||
app.Get("/charts", HandleCharts)
|
||||
app.Get("/next/:id", HandleNext)
|
||||
app.Get("/browse/:id", HandleBrowse)
|
||||
app.Get("/channel/:id", HandleArtist)
|
||||
|
||||
@@ -125,16 +125,29 @@ func ParseCharts(raw string) (string, error) {
|
||||
|
||||
j := gjson.Parse(raw)
|
||||
|
||||
c := j.Get("contents.singleColumnBrowseResultsRenderer.tabs.0.tabRenderer.content.sectionListRenderer.contents")
|
||||
c := j.Get("contents.singleColumnBrowseResultsRenderer" +
|
||||
".tabs.0.tabRenderer.content.sectionListRenderer.contents")
|
||||
|
||||
o := c.Get("0.musicShelfRenderer.subheaders.0.musicSideAlignedItemRenderer.startItems.0.musicSortFilterButtonRenderer")
|
||||
a := c.Get("#(musicCarouselShelfRenderer.header.musicCarouselShelfBasicHeaderRenderer.title.runs.0.text == Top artists).musicCarouselShelfRenderer.contents")
|
||||
t := c.Get("#(musicCarouselShelfRenderer.header.musicCarouselShelfBasicHeaderRenderer.title.runs.0.text == Trending).musicCarouselShelfRenderer.contents")
|
||||
o := c.Get("0.musicShelfRenderer.subheaders.0" +
|
||||
".musicSideAlignedItemRenderer.startItems.0" +
|
||||
".musicSortFilterButtonRenderer")
|
||||
|
||||
a := c.Get("#(musicCarouselShelfRenderer.header.musicCarouselShelfBasicHeaderRenderer" +
|
||||
".title.runs.0.text == Top artists)" +
|
||||
".musicCarouselShelfRenderer.contents")
|
||||
|
||||
t := c.Get("#(musicCarouselShelfRenderer.header.musicCarouselShelfBasicHeaderRenderer" +
|
||||
".title.runs.0.text == Trending)" +
|
||||
".musicCarouselShelfRenderer.contents")
|
||||
|
||||
opts := o.Get("menu.musicMultiSelectMenuRenderer.options" +
|
||||
".#.musicMultiSelectMenuItemRenderer")
|
||||
ref := j.Get("frameworkUpdates.entityBatchUpdate.mutations")
|
||||
|
||||
val := Charts{
|
||||
Options: Options{
|
||||
Default: RunsText(o.Get("title")),
|
||||
All: MultiSelectMenuItemRenderer(o.Get("menu.musicMultiSelectMenuRenderer.options.#.musicMultiSelectMenuItemRenderer")),
|
||||
All: MultiSelectMenuItemRenderer(opts, ref),
|
||||
},
|
||||
Artists: ResponsiveListItemRendererCH(a),
|
||||
Trending: ResponsiveListItemRenderer(t),
|
||||
|
||||
+6
-1
@@ -90,13 +90,17 @@ type Context struct {
|
||||
}
|
||||
|
||||
type PageType struct {
|
||||
PageType string `json:"pageType",omitempty`
|
||||
PageType string `json:"pageType,omitempty"`
|
||||
}
|
||||
|
||||
type BrowseMusicConfig struct {
|
||||
MusicConfig PageType `json:"browseEndpointContextMusicConfig,omitempty"`
|
||||
}
|
||||
|
||||
type Form struct {
|
||||
Values []string `json:"selectedValues"`
|
||||
}
|
||||
|
||||
type WatchMusicConfig struct {
|
||||
Panel bool `json:"hasPersistentPlaylistPanel,omitempty"`
|
||||
Type string `json:"musicVideoType,omitempty"`
|
||||
@@ -107,6 +111,7 @@ type BrowseData struct {
|
||||
MusicConfig BrowseMusicConfig `json:"browseEndpointContextMusicConfig,omitempty"`
|
||||
BrowseId string `json:"browseId,omitempty"`
|
||||
Params string `json:"params,omitempty"`
|
||||
Form Form `json:"formData,omitempty"`
|
||||
}
|
||||
|
||||
type NextData struct {
|
||||
|
||||
@@ -10,8 +10,7 @@ var BaseContext Context = Context{
|
||||
},
|
||||
}
|
||||
|
||||
func GetTypeBrowse(t, id, params string) BrowseData {
|
||||
|
||||
func GetTypeBrowse(t, id, params, form string) BrowseData {
|
||||
if t != "" {
|
||||
return BrowseData{
|
||||
Context: BaseContext,
|
||||
@@ -22,6 +21,15 @@ func GetTypeBrowse(t, id, params string) BrowseData {
|
||||
},
|
||||
BrowseId: id,
|
||||
}
|
||||
} else if form != "" {
|
||||
return BrowseData{
|
||||
Context: BaseContext,
|
||||
BrowseId: id,
|
||||
Params: params,
|
||||
Form: Form{
|
||||
Values: []string{form},
|
||||
},
|
||||
}
|
||||
} else {
|
||||
return BrowseData{
|
||||
Context: BaseContext,
|
||||
@@ -29,7 +37,6 @@ func GetTypeBrowse(t, id, params string) BrowseData {
|
||||
Params: params,
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func GetTypeNext(id, pid string) NextData {
|
||||
|
||||
Reference in New Issue
Block a user