Support for Multiple Chart Regions

This commit is contained in:
Shiny Nematoda
2022-10-02 14:24:08 +00:00
parent 3b26dd2f07
commit c391a425be
6 changed files with 51 additions and 22 deletions
+6 -2
View File
@@ -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")),
})
}()
+9 -9
View File
@@ -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)
+2 -2
View File
@@ -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)
+18 -5
View File
@@ -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
View File
@@ -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 -3
View File
@@ -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 {