Merge pull request #45 from itouakirai/main

add:中文歌词繁简体匹配
This commit is contained in:
ZHAAREY 2025-02-09 00:08:24 +08:00 committed by GitHub
commit f8a79ed17c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

41
main.go
View File

@ -354,7 +354,7 @@ func getMeta(albumId string, token string, storefront string) (*structs.AutoGene
func getSongLyrics(songId string, storefront string, token string, userToken string) (string, error) { func getSongLyrics(songId string, storefront string, token string, userToken string) (string, error) {
req, err := http.NewRequest("GET", req, err := http.NewRequest("GET",
fmt.Sprintf("https://amp-api.music.apple.com/v1/catalog/%s/songs/%s/%s", storefront, songId, Config.LrcType), nil) fmt.Sprintf("https://amp-api.music.apple.com/v1/catalog/%s/songs/%s/%s?l=%s", storefront, songId, Config.LrcType, Config.Language), nil)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -1179,10 +1179,23 @@ func conventSyllableTTMLToLRC(ttml string) (string, error) {
ms = ms / 10 ms = ms / 10
return fmt.Sprintf("[%02d:%02d.%02d]", m, s, ms), nil return fmt.Sprintf("[%02d:%02d.%02d]", m, s, ms), nil
} }
for _, div := range parsedTTML.FindElement("tt").FindElement("body").FindElements("div") { divs := parsedTTML.FindElement("tt").FindElement("body").FindElements("div")
//get trans
Metadata := parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata")
if len(Metadata.FindElements("iTunesMetadata")) > 0 {
iTunesMetadata := Metadata.FindElement("iTunesMetadata")
if len(iTunesMetadata.FindElements("translations")) > 0 {
if len(iTunesMetadata.FindElement("translations").FindElements("translation")) > 0 {
divs = iTunesMetadata.FindElement("translations").FindElements("translation")
}
}
}
for _, div := range divs {
for _, item := range div.ChildElements() { for _, item := range div.ChildElements() {
var lrcSyllables []string var lrcSyllables []string
var i int = 0 var i int = 0
var endTime string
for _, lyrics := range item.Child { for _, lyrics := range item.Child {
if _, ok := lyrics.(*etree.CharData); ok { if _, ok := lyrics.(*etree.CharData); ok {
if i > 0 { if i > 0 {
@ -1199,6 +1212,10 @@ func conventSyllableTTMLToLRC(ttml string) (string, error) {
if err != nil { if err != nil {
return "", err return "", err
} }
endTime, err = parseTime(lyric.SelectAttr("end").Value)
if err != nil {
return "", err
}
var text string var text string
if lyric.SelectAttr("text") == nil { if lyric.SelectAttr("text") == nil {
var textTmp []string var textTmp []string
@ -1216,10 +1233,10 @@ func conventSyllableTTMLToLRC(ttml string) (string, error) {
lrcSyllables = append(lrcSyllables, fmt.Sprintf("%s%s", beginTime, text)) lrcSyllables = append(lrcSyllables, fmt.Sprintf("%s%s", beginTime, text))
i += 1 i += 1
} }
endTime, err := parseTime(item.SelectAttr("end").Value) //endTime, err := parseTime(item.SelectAttr("end").Value)
if err != nil { //if err != nil {
return "", err // return "", err
} //}
lrcLines = append(lrcLines, strings.Join(lrcSyllables, "")+endTime) lrcLines = append(lrcLines, strings.Join(lrcSyllables, "")+endTime)
} }
} }
@ -1275,6 +1292,18 @@ func conventTTMLToLRC(ttml string) (string, error) {
return "", err return "", err
} }
var text string var text string
//GET trans
Metadata := parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata")
if len(Metadata.FindElements("iTunesMetadata")) > 0 {
iTunesMetadata := Metadata.FindElement("iTunesMetadata")
if len(iTunesMetadata.FindElements("translations")) > 0 {
if len(iTunesMetadata.FindElement("translations").FindElements("translation")) > 0 {
xpath := fmt.Sprintf("//text[@for='%s']", lyric.SelectAttr("itunes:key").Value)
trans := iTunesMetadata.FindElement("translations").FindElement("translation").FindElement(xpath)
lyric = trans
}
}
}
if lyric.SelectAttr("text") == nil { if lyric.SelectAttr("text") == nil {
var textTmp []string var textTmp []string
for _, span := range lyric.Child { for _, span := range lyric.Child {