Files
yandex-music-api-go/cmd/examples/main.go
T
2026-10-14 23:04:51 +03:00

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!")
}