From fc373764ed841bf79970c7012d2e551ffce125f5 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 02:14:36 +0800 Subject: [PATCH 01/19] add lrc file --- main.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/main.go b/main.go index 86c7b45..78b002c 100644 --- a/main.go +++ b/main.go @@ -1110,6 +1110,7 @@ func rip(albumId string, token string, storefront string, userToken string) erro continue } filename := fmt.Sprintf("%02d. %s.m4a", trackNum, forbiddenNames.ReplaceAllString(track.Attributes.Name, "_")) + lrcFilename := fmt.Sprintf("%02d. %s.lrc", trackNum, forbiddenNames.ReplaceAllString(track.Attributes.Name, "_")) trackPath := filepath.Join(sanAlbumFolder, filename) var lrc string = "" if userToken != "" { @@ -1120,6 +1121,11 @@ func rip(albumId string, token string, storefront string, userToken string) erro lrc, err = conventTTMLToLRC(ttml) if err != nil { fmt.Printf("Failed to parse lyrics: %s \n", err) + } else { + err := writeLyrics(sanAlbumFolder, lrcFilename, lrc) + if err != nil { + fmt.Printf("Failed to write lyrics") + } } } } From 2811de73766bbed990bafb0f447f0f7280cacb72 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 02:16:34 +0800 Subject: [PATCH 02/19] add lrc file --- main_atmos.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/main_atmos.go b/main_atmos.go index 1b6c27e..84f72a0 100644 --- a/main_atmos.go +++ b/main_atmos.go @@ -1117,7 +1117,7 @@ func rip(albumId string, token string, storefront string, userToken string) erro } filename := fmt.Sprintf("%02d. %s.ec3", trackNum, forbiddenNames.ReplaceAllString(track.Attributes.Name, "_")) m4afilename := fmt.Sprintf("%02d. %s.m4a", trackNum, forbiddenNames.ReplaceAllString(track.Attributes.Name, "_")) - //lrcFilename := fmt.Sprintf("%02d. %s.lrc", trackNum, forbiddenNames.ReplaceAllString(track.Attributes.Name, "_")) + lrcFilename := fmt.Sprintf("%02d. %s.lrc", trackNum, forbiddenNames.ReplaceAllString(track.Attributes.Name, "_")) trackPath := filepath.Join(sanAlbumFolder, filename) m4atrackPath := filepath.Join(sanAlbumFolder, m4afilename) exists, err := fileExists(trackPath) @@ -1142,6 +1142,11 @@ func rip(albumId string, token string, storefront string, userToken string) erro lrc, err = conventTTMLToLRC(ttml) if err != nil { fmt.Printf("Failed to parse lyrics: %s \n", err) + } else { + err := writeLyrics(sanAlbumFolder, lrcFilename, lrc) + if err != nil { + fmt.Printf("Failed to write lyrics") + } } } } From af454be33c551550af25959d3518e894d3e0b6ce Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 02:19:09 +0800 Subject: [PATCH 03/19] add lrc file --- main_select.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/main_select.go b/main_select.go index dd505e2..78c5d69 100644 --- a/main_select.go +++ b/main_select.go @@ -1146,6 +1146,7 @@ func rip(albumId string, token string, storefront string, userToken string) erro continue } filename := fmt.Sprintf("%02d. %s.m4a", trackNum, forbiddenNames.ReplaceAllString(track.Attributes.Name, "_")) + lrcFilename := fmt.Sprintf("%02d. %s.lrc", trackNum, forbiddenNames.ReplaceAllString(track.Attributes.Name, "_")) trackPath := filepath.Join(sanAlbumFolder, filename) var lrc string = "" if userToken != "" { @@ -1156,6 +1157,11 @@ func rip(albumId string, token string, storefront string, userToken string) erro lrc, err = conventTTMLToLRC(ttml) if err != nil { fmt.Printf("Failed to parse lyrics: %s \n", err) + } else { + err := writeLyrics(sanAlbumFolder, lrcFilename, lrc) + if err != nil { + fmt.Printf("Failed to write lyrics") + } } } } From 03b3b18223ad73cc60a897f472b8eab245d4464e Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 09:31:15 +0800 Subject: [PATCH 04/19] add config.yaml support --- main.go | 57 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 13 deletions(-) diff --git a/main.go b/main.go index 78b002c..4e45041 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/binary" "encoding/json" + "gopkg.in/yaml.v2" "errors" "fmt" "io" @@ -34,6 +35,18 @@ const ( var ( forbiddenNames = regexp.MustCompile(`[/\\<>:"|?*]`) ) +type Config struct { + MediaUserToken string `yaml:"media-user-token"` + SaveLrcFile bool `yaml:"save-lrc-file"` + EmbedLrc bool `yaml:"embed-lrc"` + EmbedCover bool `yaml:"embed-cover"` + CoverSize string `yaml:"cover-size"` + CoverFormat string `yaml:"cover-format"` + AlacSaveFolder string `yaml:"alac-save-folder"` + AtmosSaveFolder string `yaml:"atmos-save-folder"` +} + +var config Config var oktrackNum int = 0 var trackTotalnum int = 0 @@ -48,6 +61,19 @@ type SongInfo struct { alacParam *Alac samples []SampleInfo } +func loadConfig() error { + // 读取config.yaml文件内容 + data, err := ioutil.ReadFile("config.yaml") + if err != nil { + return err + } + // 将yaml解析到config变量中 + err = yaml.Unmarshal(data, &config) + if err != nil { + return err + } + return nil +} func (s *SongInfo) Duration() (ret uint64) { for i := range s.samples { @@ -1030,7 +1056,7 @@ func writeCover(sanAlbumFolder, url string) error { if exists { return nil } - url = strings.Replace(url, "{w}x{h}", "5000x5000", 1) + url = strings.Replace(url, "{w}x{h}", config.CoverSize, 1) req, err := http.NewRequest("GET", url, nil) if err != nil { return err @@ -1081,7 +1107,7 @@ func rip(albumId string, token string, storefront string, userToken string) erro singerFoldername = strings.ReplaceAll(singerFoldername, ".", "") } singerFoldername = strings.TrimSpace(singerFoldername) - singerFolder := filepath.Join("AM-DL downloads", forbiddenNames.ReplaceAllString(singerFoldername, "_")) + singerFolder := filepath.Join(config.AlacSaveFolder, forbiddenNames.ReplaceAllString(singerFoldername, "_")) albumFolder := fmt.Sprintf("%s", meta.Data[0].Attributes.Name) if strings.HasSuffix(albumFolder, ".") { albumFolder = strings.ReplaceAll(albumFolder, ".", "") @@ -1113,7 +1139,7 @@ func rip(albumId string, token string, storefront string, userToken string) erro lrcFilename := fmt.Sprintf("%02d. %s.lrc", trackNum, forbiddenNames.ReplaceAllString(track.Attributes.Name, "_")) trackPath := filepath.Join(sanAlbumFolder, filename) var lrc string = "" - if userToken != "" { + if userToken != "" && (config.EmbedLrc || config.SaveLrcFile) { ttml, err := getSongLyrics(track.ID, storefront, token, userToken) if err != nil { fmt.Println("Failed to get lyrics") @@ -1122,9 +1148,14 @@ func rip(albumId string, token string, storefront string, userToken string) erro if err != nil { fmt.Printf("Failed to parse lyrics: %s \n", err) } else { - err := writeLyrics(sanAlbumFolder, lrcFilename, lrc) - if err != nil { - fmt.Printf("Failed to write lyrics") + if config.SaveLrcFile { + err := writeLyrics(sanAlbumFolder, lrcFilename, lrc) + if err != nil { + fmt.Printf("Failed to write lyrics") + } + if !config.EmbedLrc { + lrc = "" + } } } } @@ -1168,7 +1199,9 @@ func rip(albumId string, token string, storefront string, userToken string) erro } tags := []string{ fmt.Sprintf("lyrics=%s", lrc), - fmt.Sprintf("cover=%s/cover.jpg", sanAlbumFolder), + } + if config.EmbedCover { + tags = append(tags, fmt.Sprintf("cover=%s/cover.%s", sanAlbumFolder, config.CoverFormat)) } tagsString := strings.Join(tags, ":") cmd := exec.Command("MP4Box", "-itags", tagsString, trackPath) @@ -1182,12 +1215,10 @@ func rip(albumId string, token string, storefront string, userToken string) erro } func main() { - var mediaUserToken string - if _, err := os.Stat("media-user-token.txt"); err == nil { - file, err := os.ReadFile("media-user-token.txt") - if err == nil && file != nil { - mediaUserToken = string(file) - } + err := loadConfig() + if err != nil { + fmt.Printf("load config failed: %v", err) + return } token, err := getToken() if err != nil { From b726af587e211e8abfffec2e53ba94badeaf3a90 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 09:33:00 +0800 Subject: [PATCH 05/19] add yaml mod --- go.mod | 1 + 1 file changed, 1 insertion(+) diff --git a/go.mod b/go.mod index e2febcb..954c241 100644 --- a/go.mod +++ b/go.mod @@ -10,4 +10,5 @@ require ( require ( github.com/beevik/etree v1.3.0 // indirect github.com/google/uuid v1.1.2 // indirect + gopkg.in/yaml.v2 v2.2.8 ) From e384d06c0960e9ec4ac65ba27c1b0bf8698d0ec9 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 09:41:47 +0800 Subject: [PATCH 06/19] add config.yaml support --- main_atmos.go | 51 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/main_atmos.go b/main_atmos.go index 84f72a0..cc280ac 100644 --- a/main_atmos.go +++ b/main_atmos.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/binary" "encoding/json" + "gopkg.in/yaml.v2" "errors" "fmt" "github.com/beevik/etree" @@ -34,6 +35,18 @@ const ( var ( forbiddenNames = regexp.MustCompile(`[/\\<>:"|?*]`) ) +type Config struct { + MediaUserToken string `yaml:"media-user-token"` + SaveLrcFile bool `yaml:"save-lrc-file"` + EmbedLrc bool `yaml:"embed-lrc"` + EmbedCover bool `yaml:"embed-cover"` + CoverSize string `yaml:"cover-size"` + CoverFormat string `yaml:"cover-format"` + AlacSaveFolder string `yaml:"alac-save-folder"` + AtmosSaveFolder string `yaml:"atmos-save-folder"` +} + +var config Config var oktrackNum int = 0 var trackTotalnum int = 0 @@ -49,6 +62,20 @@ type SongInfo struct { samples []SampleInfo } +func loadConfig() error { + // 读取config.yaml文件内容 + data, err := ioutil.ReadFile("config.yaml") + if err != nil { + return err + } + // 将yaml解析到config变量中 + err = yaml.Unmarshal(data, &config) + if err != nil { + return err + } + return nil +} + func (s *SongInfo) Duration() (ret uint64) { for i := range s.samples { ret += uint64(s.samples[i].duration) @@ -1027,7 +1054,7 @@ func getSongLyrics(songId string, storefront string, token string, userToken str } func writeCover(sanAlbumFolder, url string) error { - covPath := filepath.Join(sanAlbumFolder, "cover.jpg") + covPath := filepath.Join(sanAlbumFolder, "cover." + config.CoverFormat) exists, err := fileExists(covPath) if err != nil { fmt.Println("Failed to check if cover exists.") @@ -1036,7 +1063,7 @@ func writeCover(sanAlbumFolder, url string) error { if exists { return nil } - url = strings.Replace(url, "{w}x{h}", "5000x5000", 1) + url = strings.Replace(url, "{w}x{h}", config.CoverSize, 1) req, err := http.NewRequest("GET", url, nil) if err != nil { return err @@ -1087,7 +1114,7 @@ func rip(albumId string, token string, storefront string, userToken string) erro singerFoldername = strings.ReplaceAll(singerFoldername, ".", "") } singerFoldername = strings.TrimSpace(singerFoldername) - singerFolder := filepath.Join("AM-DL-Atmos downloads", forbiddenNames.ReplaceAllString(singerFoldername, "_")) + singerFolder := filepath.Join(config.AtmosSaveFolder, forbiddenNames.ReplaceAllString(singerFoldername, "_")) albumFolder := fmt.Sprintf("%s [Atmos]", meta.Data[0].Attributes.Name) if strings.HasSuffix(albumFolder, ".") { albumFolder = strings.ReplaceAll(albumFolder, ".", "") @@ -1134,7 +1161,7 @@ func rip(albumId string, token string, storefront string, userToken string) erro continue } var lrc string = "" - if userToken != "" { + if userToken != "" && (config.EmbedLrc || config.SaveLrcFile) { ttml, err := getSongLyrics(track.ID, storefront, token, userToken) if err != nil { fmt.Println("Failed to get lyrics") @@ -1143,9 +1170,14 @@ func rip(albumId string, token string, storefront string, userToken string) erro if err != nil { fmt.Printf("Failed to parse lyrics: %s \n", err) } else { - err := writeLyrics(sanAlbumFolder, lrcFilename, lrc) - if err != nil { - fmt.Printf("Failed to write lyrics") + if config.SaveLrcFile { + err := writeLyrics(sanAlbumFolder, lrcFilename, lrc) + if err != nil { + fmt.Printf("Failed to write lyrics") + } + if !config.EmbedLrc { + lrc = "" + } } } } @@ -1182,7 +1214,6 @@ func rip(albumId string, token string, storefront string, userToken string) erro tags := []string{ "tool=", fmt.Sprintf("lyrics=%s", lrc), - fmt.Sprintf("cover=%s/cover.jpg", sanAlbumFolder), fmt.Sprintf("album=%s", meta.Data[0].Attributes.Name), fmt.Sprintf("title=%s", meta.Data[0].Relationships.Tracks.Data[index].Attributes.Name), fmt.Sprintf("artist=%s", meta.Data[0].Relationships.Tracks.Data[index].Attributes.ArtistName), @@ -1195,7 +1226,9 @@ func rip(albumId string, token string, storefront string, userToken string) erro fmt.Sprintf("UPC=%s", meta.Data[0].Attributes.Upc), fmt.Sprintf("track=%d/%d", trackNum, trackTotal), } - + if config.EmbedCover { + tags = append(tags, fmt.Sprintf("cover=%s/cover.%s", sanAlbumFolder, config.CoverFormat)) + } tagsString := strings.Join(tags, ":") cmd := exec.Command("MP4Box", "-add", trackPath, "-name", fmt.Sprintf("1=%s", meta.Data[0].Relationships.Tracks.Data[index].Attributes.Name), "-itags", tagsString, "-brand", "mp42", "-ab", "dby1", m4atrackPath) fmt.Printf("Encapsulating %s into %s\n", filepath.Base(trackPath), filepath.Base(m4atrackPath)) From 3089c5b5bf4ba12559f211685963f50368231022 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 09:42:39 +0800 Subject: [PATCH 07/19] add config.yaml support --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 4e45041..af97639 100644 --- a/main.go +++ b/main.go @@ -1047,7 +1047,7 @@ func getSongLyrics(songId string, storefront string, token string, userToken str } func writeCover(sanAlbumFolder, url string) error { - covPath := filepath.Join(sanAlbumFolder, "cover.jpg") + covPath := filepath.Join(sanAlbumFolder, "cover." + config.CoverFormat) exists, err := fileExists(covPath) if err != nil { fmt.Println("Failed to check if cover exists.") From 112dfff4005f434e2f83a55554362da6a981ab45 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 09:49:57 +0800 Subject: [PATCH 08/19] add config.yaml support --- main_select.go | 60 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/main_select.go b/main_select.go index 78c5d69..45d2487 100644 --- a/main_select.go +++ b/main_select.go @@ -5,6 +5,7 @@ import ( "bytes" "encoding/binary" "encoding/json" + "gopkg.in/yaml.v2" "errors" "fmt" "github.com/beevik/etree" @@ -35,6 +36,18 @@ const ( var ( forbiddenNames = regexp.MustCompile(`[/\\<>:"|?*]`) ) +type Config struct { + MediaUserToken string `yaml:"media-user-token"` + SaveLrcFile bool `yaml:"save-lrc-file"` + EmbedLrc bool `yaml:"embed-lrc"` + EmbedCover bool `yaml:"embed-cover"` + CoverSize string `yaml:"cover-size"` + CoverFormat string `yaml:"cover-format"` + AlacSaveFolder string `yaml:"alac-save-folder"` + AtmosSaveFolder string `yaml:"atmos-save-folder"` +} + +var config Config type SampleInfo struct { data []byte @@ -48,6 +61,20 @@ type SongInfo struct { samples []SampleInfo } +func loadConfig() error { + // 读取config.yaml文件内容 + data, err := ioutil.ReadFile("config.yaml") + if err != nil { + return err + } + // 将yaml解析到config变量中 + err = yaml.Unmarshal(data, &config) + if err != nil { + return err + } + return nil +} + func (s *SongInfo) Duration() (ret uint64) { for i := range s.samples { ret += uint64(s.samples[i].duration) @@ -1020,7 +1047,7 @@ func getSongLyrics(songId string, storefront string, token string, userToken str } func writeCover(sanAlbumFolder, url string) error { - covPath := filepath.Join(sanAlbumFolder, "cover.jpg") + covPath := filepath.Join(sanAlbumFolder, "cover." + config.CoverFormat) exists, err := fileExists(covPath) if err != nil { fmt.Println("Failed to check if cover exists.") @@ -1029,7 +1056,7 @@ func writeCover(sanAlbumFolder, url string) error { if exists { return nil } - url = strings.Replace(url, "{w}x{h}", "5000x5000", 1) + url = strings.Replace(url, "{w}x{h}", config.CoverSize, 1) req, err := http.NewRequest("GET", url, nil) if err != nil { return err @@ -1149,7 +1176,7 @@ func rip(albumId string, token string, storefront string, userToken string) erro lrcFilename := fmt.Sprintf("%02d. %s.lrc", trackNum, forbiddenNames.ReplaceAllString(track.Attributes.Name, "_")) trackPath := filepath.Join(sanAlbumFolder, filename) var lrc string = "" - if userToken != "" { + if userToken != "" && (config.EmbedLrc || config.SaveLrcFile) { ttml, err := getSongLyrics(track.ID, storefront, token, userToken) if err != nil { fmt.Println("Failed to get lyrics") @@ -1158,9 +1185,14 @@ func rip(albumId string, token string, storefront string, userToken string) erro if err != nil { fmt.Printf("Failed to parse lyrics: %s \n", err) } else { - err := writeLyrics(sanAlbumFolder, lrcFilename, lrc) - if err != nil { - fmt.Printf("Failed to write lyrics") + if config.SaveLrcFile { + err := writeLyrics(sanAlbumFolder, lrcFilename, lrc) + if err != nil { + fmt.Printf("Failed to write lyrics") + } + if !config.EmbedLrc { + lrc = "" + } } } } @@ -1203,7 +1235,9 @@ func rip(albumId string, token string, storefront string, userToken string) erro } tags := []string{ fmt.Sprintf("lyrics=%s", lrc), - fmt.Sprintf("cover=%s/cover.jpg", sanAlbumFolder), + } + if config.EmbedCover { + tags = append(tags, fmt.Sprintf("cover=%s/cover.%s", sanAlbumFolder, config.CoverFormat)) } tagsString := strings.Join(tags, ":") cmd := exec.Command("MP4Box", "-itags", tagsString, trackPath) @@ -1217,12 +1251,10 @@ func rip(albumId string, token string, storefront string, userToken string) erro } func main() { - var mediaUserToken string - if _, err := os.Stat("media-user-token.txt"); err == nil { - file, err := os.ReadFile("media-user-token.txt") - if err == nil && file != nil { - mediaUserToken = string(file) - } + err := loadConfig() + if err != nil { + fmt.Printf("load config failed: %v", err) + return } token, err := getToken() if err != nil { @@ -1243,7 +1275,7 @@ func main() { fmt.Printf("Invalid URL: %s\n", url) continue } - err := rip(albumId, token, storefront, mediaUserToken) + err := rip(albumId, token, storefront, config.MediaUserToken) if err != nil { fmt.Println("Album failed.") fmt.Println(err) From ae3dfc95b15a4e8006ad9004e38f343c1adb0509 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 09:51:09 +0800 Subject: [PATCH 09/19] add config.yaml support --- main_atmos.go | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/main_atmos.go b/main_atmos.go index cc280ac..09de4c4 100644 --- a/main_atmos.go +++ b/main_atmos.go @@ -1249,12 +1249,10 @@ func rip(albumId string, token string, storefront string, userToken string) erro } func main() { - var mediaUserToken string - if _, err := os.Stat("media-user-token.txt"); err == nil { - file, err := os.ReadFile("media-user-token.txt") - if err == nil && file != nil { - mediaUserToken = string(file) - } + err := loadConfig() + if err != nil { + fmt.Printf("load config failed: %v", err) + return } token, err := getToken() if err != nil { @@ -1274,7 +1272,7 @@ func main() { fmt.Printf("Invalid URL: %s\n", url) continue } - err := rip(albumId, token, storefront, mediaUserToken) + err := rip(albumId, token, storefront, config.MediaUserToken) if err != nil { fmt.Println("Album failed.") fmt.Println(err) From 14444aba2e8f053a5ce0a5262c1d5534e62c769c Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 09:52:28 +0800 Subject: [PATCH 10/19] add config.yaml support --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index af97639..80fdcee 100644 --- a/main.go +++ b/main.go @@ -1239,7 +1239,7 @@ func main() { fmt.Printf("Invalid URL: %s\n", url) continue } - err = rip(albumId, token, storefront, mediaUserToken) + err = rip(albumId, token, storefront, config.MediaUserToken) if err != nil { fmt.Println("Album failed.") fmt.Println(err) From 48c8540d100058ef0b2e39827714deba20170f42 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 09:55:51 +0800 Subject: [PATCH 11/19] Create config.yaml --- config.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 config.yaml diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..50ee27b --- /dev/null +++ b/config.yaml @@ -0,0 +1,8 @@ +media-user-token: +embed-lrc: true +save-lrc-file: false +embed-cover: true +cover-size: 5000x5000 +cover-format: jpg +alac-save-folder: AM-DL downloads +atmos-save-folder: AM-DL-Atmos downloads From 64c1456f8df3f91d4ae16837274e35dbbe800ad0 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 09:59:16 +0800 Subject: [PATCH 12/19] Update README.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 435638c..19595dd 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,5 @@ Original script by Sorrow. Modified by me to include some fixes and improvements 1. Open [Apple Music](https://music.apple.com) and log in 2. Open the Developer tools, Click `Application -> Storage -> Cookies -> https://music.apple.com` 3. Find the cookie named `media-user-token` and copy its value -4. Create a file named `media-user-token.txt` in the project root directory -5. Paste the cookie value obtained in step 3 into the file and save it -6. Start the script as usual +4. Paste the cookie value obtained in step 3 into the config.yaml and save it +5. Start the script as usual From 6c8981dbc33fe0ad102367efc6d1afc344f3bfef Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 10:19:37 +0800 Subject: [PATCH 13/19] Update config.yaml --- config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.yaml b/config.yaml index 50ee27b..c6a5bcb 100644 --- a/config.yaml +++ b/config.yaml @@ -1,4 +1,4 @@ -media-user-token: +media-user-token: "your-media-user-token" embed-lrc: true save-lrc-file: false embed-cover: true From 46e2f388bf62350ae95a185fe0bb9b1df9734fe9 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 10:20:48 +0800 Subject: [PATCH 14/19] Update main.go --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 80fdcee..c22305c 100644 --- a/main.go +++ b/main.go @@ -1139,7 +1139,7 @@ func rip(albumId string, token string, storefront string, userToken string) erro lrcFilename := fmt.Sprintf("%02d. %s.lrc", trackNum, forbiddenNames.ReplaceAllString(track.Attributes.Name, "_")) trackPath := filepath.Join(sanAlbumFolder, filename) var lrc string = "" - if userToken != "" && (config.EmbedLrc || config.SaveLrcFile) { + if userToken != "your-media-user-token" && (config.EmbedLrc || config.SaveLrcFile) { ttml, err := getSongLyrics(track.ID, storefront, token, userToken) if err != nil { fmt.Println("Failed to get lyrics") From d83f6f35f00afe87f0960e5dc2f5e41e0612d5f7 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 10:21:20 +0800 Subject: [PATCH 15/19] Update main_atmos.go --- main_atmos.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main_atmos.go b/main_atmos.go index 09de4c4..5fc08fd 100644 --- a/main_atmos.go +++ b/main_atmos.go @@ -1161,7 +1161,7 @@ func rip(albumId string, token string, storefront string, userToken string) erro continue } var lrc string = "" - if userToken != "" && (config.EmbedLrc || config.SaveLrcFile) { + if userToken != "your-media-user-token" && (config.EmbedLrc || config.SaveLrcFile) { ttml, err := getSongLyrics(track.ID, storefront, token, userToken) if err != nil { fmt.Println("Failed to get lyrics") From 39e97a857b48f398feea6bd50e2a91088308381f Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 10:21:39 +0800 Subject: [PATCH 16/19] Update main_select.go --- main_select.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main_select.go b/main_select.go index 45d2487..8aad852 100644 --- a/main_select.go +++ b/main_select.go @@ -1176,7 +1176,7 @@ func rip(albumId string, token string, storefront string, userToken string) erro lrcFilename := fmt.Sprintf("%02d. %s.lrc", trackNum, forbiddenNames.ReplaceAllString(track.Attributes.Name, "_")) trackPath := filepath.Join(sanAlbumFolder, filename) var lrc string = "" - if userToken != "" && (config.EmbedLrc || config.SaveLrcFile) { + if userToken != "your-media-user-token" && (config.EmbedLrc || config.SaveLrcFile) { ttml, err := getSongLyrics(track.ID, storefront, token, userToken) if err != nil { fmt.Println("Failed to get lyrics") From 2781879312a750caae7958442d98bc209374d432 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 12:46:45 +0800 Subject: [PATCH 17/19] fix cover.png maxsize --- main.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/main.go b/main.go index c22305c..7333ffd 100644 --- a/main.go +++ b/main.go @@ -1056,6 +1056,11 @@ func writeCover(sanAlbumFolder, url string) error { if exists { return nil } + if config.CoverFormat == "png" { + re := regexp.MustCompile(`\{w\}x\{h\}`) + parts := re.Split(url, 2) + url = parts[0] + "{w}x{h}" + strings.Replace(parts[1], ".jpg", ".png", 1) + } url = strings.Replace(url, "{w}x{h}", config.CoverSize, 1) req, err := http.NewRequest("GET", url, nil) if err != nil { From cd0f0c99c2c4f1153dc7ce98e9f360efe30e0d6f Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 12:47:54 +0800 Subject: [PATCH 18/19] fix cover.png maxsize --- main_atmos.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/main_atmos.go b/main_atmos.go index 5fc08fd..b99094f 100644 --- a/main_atmos.go +++ b/main_atmos.go @@ -1063,6 +1063,11 @@ func writeCover(sanAlbumFolder, url string) error { if exists { return nil } + if config.CoverFormat == "png" { + re := regexp.MustCompile(`\{w\}x\{h\}`) + parts := re.Split(url, 2) + url = parts[0] + "{w}x{h}" + strings.Replace(parts[1], ".jpg", ".png", 1) + } url = strings.Replace(url, "{w}x{h}", config.CoverSize, 1) req, err := http.NewRequest("GET", url, nil) if err != nil { From 3b774201c561afe5e32fdccd8c2a8a8bc131006f Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 28 Apr 2024 12:48:40 +0800 Subject: [PATCH 19/19] fix cover.png maxsize --- main_select.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/main_select.go b/main_select.go index 8aad852..85dfa08 100644 --- a/main_select.go +++ b/main_select.go @@ -1056,6 +1056,11 @@ func writeCover(sanAlbumFolder, url string) error { if exists { return nil } + if config.CoverFormat == "png" { + re := regexp.MustCompile(`\{w\}x\{h\}`) + parts := re.Split(url, 2) + url = parts[0] + "{w}x{h}" + strings.Replace(parts[1], ".jpg", ".png", 1) + } url = strings.Replace(url, "{w}x{h}", config.CoverSize, 1) req, err := http.NewRequest("GET", url, nil) if err != nil {