93 lines
2.5 KiB
Go
93 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"gitea.mrixs.me/Mrixs/yandex-music-api-go/internal/models"
|
|
"gitea.mrixs.me/Mrixs/yandex-music-api-go/yandexmusic"
|
|
)
|
|
|
|
func main() {
|
|
// Get token from environment
|
|
token := os.Getenv("YANDEX_MUSIC_TOKEN")
|
|
if token == "" {
|
|
log.Println("YANDEX_MUSIC_TOKEN not set, running without auth")
|
|
}
|
|
|
|
// Create client
|
|
client := yandexmusic.NewClient(yandexmusic.ClientConfig{
|
|
Token: token,
|
|
Language: "en",
|
|
})
|
|
|
|
ctx := context.Background()
|
|
|
|
// Initialize client (fetches account info)
|
|
if err := client.Init(ctx); err != nil {
|
|
log.Printf("Failed to init client: %v", err)
|
|
} else if client.GetMe() != nil && client.GetMe().Account != nil {
|
|
fmt.Printf("Logged in as: %s (UID: %d)\n", client.GetMe().Account.DisplayName, client.GetMe().Account.UID)
|
|
}
|
|
|
|
var tracks []*models.Track
|
|
|
|
// Example: Search for tracks
|
|
fmt.Println("\n--- Searching for tracks ---")
|
|
searchResult, err := client.SearchTracks(ctx, "Daft Punk", 1, 5)
|
|
if err != nil {
|
|
log.Printf("Search failed: %v", err)
|
|
} else if searchResult != nil {
|
|
for i := range searchResult.Results {
|
|
artistName := ""
|
|
if len(searchResult.Results[i].Artists) > 0 {
|
|
artistName = searchResult.Results[i].Artists[0].Name
|
|
}
|
|
fmt.Printf("%d. %s - %s (%d ms)\n", i+1, searchResult.Results[i].Title, artistName, searchResult.Results[i].DurationMs)
|
|
}
|
|
// Convert []Track to []*Track
|
|
tracks = make([]*models.Track, len(searchResult.Results))
|
|
for i := range searchResult.Results {
|
|
tracks[i] = &searchResult.Results[i]
|
|
}
|
|
}
|
|
|
|
// Example: Get track by ID (if we have results)
|
|
if len(tracks) > 0 {
|
|
fmt.Println("\n--- Getting track details ---")
|
|
track, err := client.GetTrack(ctx, tracks[0].ID)
|
|
if err != nil {
|
|
log.Printf("Get track failed: %v", err)
|
|
} else {
|
|
fmt.Printf("Track: %s\n", track.Title)
|
|
fmt.Printf("Albums: %d\n", len(track.Albums))
|
|
fmt.Printf("Download info: %d options\n", len(track.DownloadInfo))
|
|
}
|
|
}
|
|
|
|
// Example: Get liked tracks (requires auth)
|
|
if token != "" {
|
|
fmt.Println("\n--- Getting liked tracks ---")
|
|
liked, err := client.GetLikedTracks(ctx)
|
|
if err != nil {
|
|
log.Printf("Get liked tracks failed: %v", err)
|
|
} else {
|
|
fmt.Printf("Found %d liked tracks\n", len(liked))
|
|
for i, track := range liked {
|
|
if i >= 3 {
|
|
break
|
|
}
|
|
artistName := ""
|
|
if len(track.Artists) > 0 {
|
|
artistName = track.Artists[0].Name
|
|
}
|
|
fmt.Printf(" %s - %s\n", track.Title, artistName)
|
|
}
|
|
}
|
|
}
|
|
|
|
fmt.Println("\nDone!")
|
|
}
|