From 7127825527f8f82663aee9f9246a919e6ad36874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Monta=C3=B1ez=20Velasco?= Date: Thu, 26 Feb 2026 10:35:58 -0500 Subject: [PATCH] feat: implement limit command to retrieve more episodes in disney series --- disney/disney.go | 28 ++-- examples/disney/disney.go | 305 +++++++++++++++++++------------------- 2 files changed, 175 insertions(+), 158 deletions(-) diff --git a/disney/disney.go b/disney/disney.go index b7f6dab4..d1622b8e 100644 --- a/disney/disney.go +++ b/disney/disney.go @@ -2,13 +2,13 @@ package disney import ( - "bytes" - "encoding/json" - "errors" - "io" - "net/http" - "net/url" - "strings" + "bytes" + "encoding/json" + "errors" + "io" + "net/http" + "net/url" + "strings" ) func (a *Account) Stream(mediaId string) (*Stream, error) { @@ -381,15 +381,25 @@ mutation switchProfile($input: SwitchProfileInput!) { } ` -func (a *Account) Season(id string) (*Season, error) { +func (a *Account) Season(id string, limit string) (*Season, error) { var req http.Request req.Header = http.Header{} req.Header.Set("authorization", "Bearer "+a.Extensions.Sdk.Token.AccessToken) - req.URL = &url.URL{ + + u := &url.URL{ Scheme: "https", Host: "disney.api.edge.bamgrid.com", Path: "/explore/v1.12/season/" + id, } + + if (len(limit) != 0) { + q := u.Query() + q.Set("limit", limit) + u.RawQuery = q.Encode() + } + + req.URL = u + resp, err := http.DefaultClient.Do(&req) if err != nil { return nil, err diff --git a/examples/disney/disney.go b/examples/disney/disney.go index 975b33dc..1d496acf 100644 --- a/examples/disney/disney.go +++ b/examples/disney/disney.go @@ -1,180 +1,187 @@ package main import ( - "41.neocities.org/maya" - "41.neocities.org/rosso/disney" - "flag" - "fmt" - "log" - "net/http" - "os" - "path" - "path/filepath" + "flag" + "fmt" + "log" + "net/http" + "os" + "path" + "path/filepath" + + "41.neocities.org/maya" + "41.neocities.org/rosso/disney" ) func (c *command) run() error { - cache, err := os.UserCacheDir() - if err != nil { - return err - } - cache = filepath.ToSlash(cache) - c.job.CertificateChain = cache + "/SL3000/CertificateChain" - c.job.EncryptSignKey = cache + "/SL3000/EncryptSignKey" - c.name = cache + "/rosso/disney.xml" - // 1 - flag.StringVar(&c.email, "e", "", "email") - flag.StringVar(&c.password, "p", "", "password") - flag.StringVar(&c.proxy, "x", "", "proxy") - // 2 - flag.StringVar(&c.address, "a", "", "address") - // 3 - flag.StringVar(&c.season, "s", "", "season") - // 4 - flag.StringVar(&c.media_id, "m", "", "media ID") - // 5 - flag.IntVar(&c.hls, "h", -1, "HLS ID") - flag.IntVar(&c.job.Threads, "t", 2, "threads") - flag.StringVar(&c.job.CertificateChain, "C", c.job.CertificateChain, "certificate chain") - flag.StringVar(&c.job.EncryptSignKey, "E", c.job.EncryptSignKey, "encrypt sign key") - flag.Parse() - maya.SetProxy(func(req *http.Request) (string, bool) { - switch path.Ext(req.URL.Path) { - case ".mp4", ".mp4a": - return "", false - } - return c.proxy, true - }) - if c.email != "" { - if c.password != "" { - return c.do_email_password() - } - } - if c.address != "" { - return c.do_address() - } - if c.season != "" { - return c.do_season() - } - if c.media_id != "" { - return c.do_media_id() - } - if c.hls >= 0 { - return c.do_hls() - } - return maya.Usage([][]string{ - {"e", "p", "x"}, - {"a"}, - {"s"}, - {"m"}, - {"h", "t", "C", "E"}, - }) + cache, err := os.UserCacheDir() + if err != nil { + return err + } + cache = filepath.ToSlash(cache) + c.job.CertificateChain = cache + "/SL3000/CertificateChain" + c.job.EncryptSignKey = cache + "/SL3000/EncryptSignKey" + c.name = cache + "/rosso/disney.xml" + // 1 + flag.StringVar(&c.email, "e", "", "email") + flag.StringVar(&c.password, "p", "", "password") + flag.StringVar(&c.proxy, "x", "", "proxy") + // 2 + flag.StringVar(&c.address, "a", "", "address") + // 3 + flag.StringVar(&c.season, "s", "", "season") + flag.StringVar(&c.limit, "l", "", "limit") + // 4 + flag.StringVar(&c.media_id, "m", "", "media ID") + // 5 + flag.IntVar(&c.hls, "h", -1, "HLS ID") + flag.IntVar(&c.job.Threads, "t", 2, "threads") + flag.StringVar(&c.job.CertificateChain, "C", c.job.CertificateChain, "certificate chain") + flag.StringVar(&c.job.EncryptSignKey, "E", c.job.EncryptSignKey, "encrypt sign key") + flag.Parse() + + c.season = "f4f54e03-1449-47f9-9fa0-127696807769" + c.limit = "30" + + maya.SetProxy(func(req *http.Request) (string, bool) { + switch path.Ext(req.URL.Path) { + case ".mp4", ".mp4a": + return "", false + } + return c.proxy, true + }) + if c.email != "" { + if c.password != "" { + return c.do_email_password() + } + } + if c.address != "" { + return c.do_address() + } + if c.season != "" { + return c.do_season() + } + if c.media_id != "" { + return c.do_media_id() + } + if c.hls >= 0 { + return c.do_hls() + } + return maya.Usage([][]string{ + {"e", "p", "x"}, + {"a"}, + {"s"}, + {"m"}, + {"h", "t", "C", "E"}, + }) } func (c *command) do_hls() error { - var cache user_cache - err := maya.Read(c.name, &cache) - if err != nil { - return err - } - c.job.Send = cache.Account.PlayReady - return c.job.DownloadHls(cache.Hls.Body, cache.Hls.Url, c.hls) + var cache user_cache + err := maya.Read(c.name, &cache) + if err != nil { + return err + } + c.job.Send = cache.Account.PlayReady + return c.job.DownloadHls(cache.Hls.Body, cache.Hls.Url, c.hls) } func (c *command) do_email_password() error { - device, err := disney.RegisterDevice() - if err != nil { - return err - } - account_without, err := device.Login(c.email, c.password) - if err != nil { - return err - } - var cache user_cache - cache.Account, err = account_without.SwitchProfile() - if err != nil { - return err - } - return maya.Write(c.name, &cache) + device, err := disney.RegisterDevice() + if err != nil { + return err + } + account_without, err := device.Login(c.email, c.password) + if err != nil { + return err + } + var cache user_cache + cache.Account, err = account_without.SwitchProfile() + if err != nil { + return err + } + return maya.Write(c.name, &cache) } func (c *command) do_address() error { - var cache user_cache - err := maya.Read(c.name, &cache) - if err != nil { - return err - } - entity, err := disney.GetEntity(c.address) - if err != nil { - return err - } - page, err := cache.Account.Page(entity) - if err != nil { - return err - } - fmt.Println(page) - return nil + var cache user_cache + err := maya.Read(c.name, &cache) + if err != nil { + return err + } + entity, err := disney.GetEntity(c.address) + if err != nil { + return err + } + page, err := cache.Account.Page(entity) + if err != nil { + return err + } + fmt.Println(page) + return nil } func (c *command) do_season() error { - var cache user_cache - err := maya.Read(c.name, &cache) - if err != nil { - return err - } - season, err := cache.Account.Season(c.season) - if err != nil { - return err - } - fmt.Println(season) - return nil + var cache user_cache + err := maya.Read(c.name, &cache) + if err != nil { + return err + } + season, err := cache.Account.Season(c.season, c.limit) + if err != nil { + return err + } + fmt.Println(season) + return nil } func (c *command) do_media_id() error { - var cache user_cache - err := maya.Read(c.name, &cache) - if err != nil { - return err - } - stream, err := cache.Account.Stream(c.media_id) - if err != nil { - return err - } - cache.Hls, err = stream.Hls() - if err != nil { - return err - } - err = maya.Write(c.name, cache) - if err != nil { - return err - } - return maya.ListHls(cache.Hls.Body, cache.Hls.Url) + var cache user_cache + err := maya.Read(c.name, &cache) + if err != nil { + return err + } + stream, err := cache.Account.Stream(c.media_id) + if err != nil { + return err + } + cache.Hls, err = stream.Hls() + if err != nil { + return err + } + err = maya.Write(c.name, cache) + if err != nil { + return err + } + return maya.ListHls(cache.Hls.Body, cache.Hls.Url) } func main() { - err := new(command).run() - if err != nil { - log.Fatal(err) - } + err := new(command).run() + if err != nil { + log.Fatal(err) + } } type user_cache struct { - Account *disney.Account - Hls *disney.Hls + Account *disney.Account + Hls *disney.Hls } type command struct { - name string - // 1 - email string - password string - proxy string - // 2 - address string - // 3 - season string - // 4 - media_id string - // 5 - hls int - job maya.PlayReadyJob + name string + // 1 + email string + password string + proxy string + // 2 + address string + // 3 + season string + limit string + // 4 + media_id string + // 5 + hls int + job maya.PlayReadyJob }