feat(playlist): download private playlists with arl cookie

This commit is contained in:
Mathis Maquenne
2024-10-14 16:22:44 +02:00
parent d38a2c4f7b
commit 6d660e3f51
5 changed files with 29 additions and 4 deletions
+3 -2
View File
@@ -1,3 +1,4 @@
license_token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c' license_token = 'AAAAA1bcDFgHJKLmnOPqrsTUvwXYZ12o3lmNOjR2xWiQRT3v5zxL4mKoWjxL82jD7sWx93KfYGsN2IkdPxsUw9PTas7oFbgR3nY9qpZmVyHFJKLPxT7sWmqErXyTn5iKoNpRtV7bPdQZ8qLmWoJpU2nKrXz6vW'
arl_cookie = '1d9e90abb452a61b1b7463f0953e1b303c4e2e7e5fd404fde9b385f4de01c340ac0f62f1c8c1550405b0b9beded0e28c481e96a6148e8f4548351add5d7db746b2785ecf83b1768e5dd8cc73b1ad30c18d07c9cb37f5c6b9cd7a78a4de2aff11'
secret_key = 'hTv1IAw19qWy9i3f' secret_key = 'hTv1IAw19qWy9i3f'
iv = 'cn1aSvHsV4yBO7x5' iv = '0001020304050607'
+6
View File
@@ -71,6 +71,12 @@ func downloadContent(contentType string, args []string) {
fmt.Fprintf(os.Stderr, "Error: could not get playlist data: %v\n", err) fmt.Fprintf(os.Stderr, "Error: could not get playlist data: %v\n", err)
continue continue
} }
if playlist.Data.Status == 1 && playlist.Data.CollabKey == "" {
fmt.Printf("\r[%d/%d] Getting data for playlist %s... FAILED\n", i+1, nArgs, id)
fmt.Fprintf(os.Stderr, "Error: playlist is private and no valid arl cookie was provided\n")
continue
}
resource = playlist resource = playlist
songs = playlist.GetSongs() songs = playlist.GetSongs()
} }
+1
View File
@@ -2,6 +2,7 @@ package config
type Config struct { type Config struct {
LicenseToken string `mapstructure:"license_token"` LicenseToken string `mapstructure:"license_token"`
ArlCookie string `mapstructure:"arl_cookie"`
SecretKey string `mapstructure:"secret_key"` SecretKey string `mapstructure:"secret_key"`
IV string `mapstructure:"iv"` IV string `mapstructure:"iv"`
} }
+3 -1
View File
@@ -9,7 +9,9 @@ import (
type Playlist struct { type Playlist struct {
Data struct { Data struct {
Title string `json:"TITLE"` Title string `json:"TITLE"`
Status int `json:"STATUS"`
CollabKey string `json:"COLLAB_KEY"`
} `json:"DATA"` } `json:"DATA"`
Songs struct { Songs struct {
Data []*Song `json:"data"` Data []*Song `json:"data"`
+16 -1
View File
@@ -5,6 +5,8 @@ import (
"io" "io"
"net/http" "net/http"
"regexp" "regexp"
"github.com/mathismqn/godeez/internal/config"
) )
type Resource interface { type Resource interface {
@@ -18,7 +20,20 @@ type Resource interface {
func GetData(r Resource, id string) error { func GetData(r Resource, id string) error {
url := r.GetURL(id) url := r.GetURL(id)
resp, err := http.Get(url) client := &http.Client{}
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return err
}
if config.Cfg.ArlCookie != "" {
req.AddCookie(&http.Cookie{
Name: "arl",
Value: config.Cfg.ArlCookie,
})
}
resp, err := client.Do(req)
if err != nil { if err != nil {
return err return err
} }