mirror of
https://github.com/Superredstone/spotiflac-cli.git
synced 2026-03-07 20:18:07 +01:00
feat: implement metadata fetch command
This commit is contained in:
@@ -3,8 +3,10 @@ package lib
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/go-flac/flacpicture/v2"
|
"github.com/go-flac/flacpicture/v2"
|
||||||
"github.com/go-flac/flacvorbis/v2"
|
"github.com/go-flac/flacvorbis/v2"
|
||||||
@@ -66,7 +68,67 @@ func (app *App) GetTrackMetadata(url string) (TrackMetadata, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (app *App) PrintMetadata(url string) error {
|
func (app *App) PrintMetadata(url string) error {
|
||||||
return errors.New("Unimplemented.")
|
urlType, err := ParseUrlType(url)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch urlType {
|
||||||
|
case UrlTypeTrack:
|
||||||
|
metadata, err := app.GetTrackMetadata(url)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = PrintTrackMetadata(metadata); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
case UrlTypePlaylist:
|
||||||
|
metadata, err := app.GetPlaylistMetadata(url)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var members, owner string
|
||||||
|
for _, member := range metadata.Data.Playlist.Members.Items {
|
||||||
|
if member.IsOwner {
|
||||||
|
owner = member.User.Data.Name
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
members += member.User.Data.Name + " "
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(
|
||||||
|
"Name: " + metadata.Data.Playlist.Name + "\n" +
|
||||||
|
"Owner: " + owner + "\n" +
|
||||||
|
"Members: " + members + "\n" +
|
||||||
|
"Tracks: " + strconv.Itoa(metadata.Data.Playlist.Content.TotalCount),
|
||||||
|
)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return errors.New("Invalid URL type.")
|
||||||
|
}
|
||||||
|
|
||||||
|
func PrintTrackMetadata(metadata TrackMetadata) error {
|
||||||
|
artists, err := GetArtists(metadata)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(
|
||||||
|
"Name:\t\t" + metadata.Data.TrackUnion.Name + "\n" +
|
||||||
|
"Artists:\t" + artists + "\n" +
|
||||||
|
"Album:\t\t" + metadata.Data.TrackUnion.AlbumOfTrack.Name + "\n" +
|
||||||
|
"Year:\t\t" + strconv.FormatInt(metadata.Data.TrackUnion.AlbumOfTrack.Date.Year, 10) + "\n" +
|
||||||
|
"Spotify ID:\t" + metadata.Data.TrackUnion.Id,
|
||||||
|
)
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (app *App) EmbedMetadata(fileName string, metadata TrackMetadata) error {
|
func (app *App) EmbedMetadata(fileName string, metadata TrackMetadata) error {
|
||||||
|
|||||||
14
lib/types.go
14
lib/types.go
@@ -128,8 +128,10 @@ type PlaylistMetadata struct {
|
|||||||
Data struct {
|
Data struct {
|
||||||
Playlist struct {
|
Playlist struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
|
Uri string `json:"uri"`
|
||||||
Content struct {
|
Content struct {
|
||||||
Items []struct {
|
TotalCount int `json:"totalCount"`
|
||||||
|
Items []struct {
|
||||||
Item struct {
|
Item struct {
|
||||||
Data struct {
|
Data struct {
|
||||||
IdentityTrait struct {
|
IdentityTrait struct {
|
||||||
@@ -140,6 +142,16 @@ type PlaylistMetadata struct {
|
|||||||
} `json:"itemV3"`
|
} `json:"itemV3"`
|
||||||
} `json:"items"`
|
} `json:"items"`
|
||||||
} `json:"content"`
|
} `json:"content"`
|
||||||
|
Members struct {
|
||||||
|
Items []struct {
|
||||||
|
IsOwner bool `json:"isOwner"`
|
||||||
|
User struct {
|
||||||
|
Data struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
} `json:"data"`
|
||||||
|
} `json:"user"`
|
||||||
|
} `json:"items"`
|
||||||
|
} `json:"members"`
|
||||||
} `json:"playlistV2"`
|
} `json:"playlistV2"`
|
||||||
} `json:"data"`
|
} `json:"data"`
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user