44 lines
889 B
Go
44 lines
889 B
Go
package spotify
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
func ParsePlaylistID(input string) (string, error) {
|
|
s := strings.TrimSpace(input)
|
|
if s == "" {
|
|
return "", fmt.Errorf("empty playlist input")
|
|
}
|
|
|
|
if strings.HasPrefix(s, "spotify:playlist:") {
|
|
id := strings.TrimSpace(strings.TrimPrefix(s, "spotify:playlist:"))
|
|
if id == "" {
|
|
return "", fmt.Errorf("invalid spotify URI")
|
|
}
|
|
return id, nil
|
|
}
|
|
|
|
if !strings.Contains(s, "://") {
|
|
return s, nil
|
|
}
|
|
|
|
u, err := url.Parse(s)
|
|
if err != nil {
|
|
return "", fmt.Errorf("invalid playlist URL")
|
|
}
|
|
parts := strings.Split(strings.Trim(u.Path, "/"), "/")
|
|
for i := 0; i < len(parts)-1; i++ {
|
|
if parts[i] == "playlist" {
|
|
id := strings.TrimSpace(parts[i+1])
|
|
if id == "" {
|
|
return "", fmt.Errorf("missing playlist id in URL")
|
|
}
|
|
return id, nil
|
|
}
|
|
}
|
|
|
|
return "", fmt.Errorf("could not find playlist id in URL")
|
|
}
|