Add missing Track, Album, Artist model types and client methods

Track: Added FileInfo, FileDownloadInfo, TrackFullInfo, SimilarTracks types
Album: Added AlbumSimilarEntities, AlbumTrailer, SimilarEntityItem types
Artist: Added ArtistSimilar, ArtistLinks, ArtistAbout, ArtistInfo, ArtistSkeleton,
       ArtistTrailerStatus, ArtistLink, Stats, SkeletonBlock types

Client methods added:
- artists.go: GetArtistBriefInfo, GetArtistSimilar, GetArtistLinks, GetArtistAlsoAlbums,
  GetArtistDiscographyAlbums, GetArtistSafeDirectAlbums, GetArtistTrackIds, GetArtistAbout,
  GetArtistDonation, GetArtistInfo, GetArtistSkeleton, GetArtistTrailer
- albums.go: GetAlbumSimilarEntities, GetAlbumTrailer
- tracks.go: GetTracksFileInfo, GetTracksSimilar, GetTrackTrailer, GetTrackFullInfo
This commit is contained in:
Mrixs committed 2026-10-18 13:24:41 +03:00
1 parent 9d3bcc4a9b
commit 49920d8908
6 files changed
+783

No files matched your search

+52
View File
@@ -6,6 +6,7 @@ import (
"crypto/md5"
"encoding/xml"
"fmt"
"strings"
"gitea.mrixs.me/Mrixs/yandex-music-api-go/internal/models"
"gitea.mrixs.me/Mrixs/yandex-music-api-go/internal/utils"
@@ -172,6 +173,57 @@ func (c *Client) DownloadTrack(ctx context.Context, trackID, format string, bitr
return c.request.Download(ctx, url)
}
// GetTracksFileInfo gets file info for a track (GET /get-file-info).
func (c *Client) GetTracksFileInfo(ctx context.Context, trackID, quality string, codecs []string, transport string) (*models.FileInfo, error) {
params := map[string]string{
"track_id": trackID,
"quality": quality,
}
if len(codecs) > 0 {
params["codecs"] = strings.Join(codecs, ",")
}
if transport != "" {
params["transport"] = transport
}
var result models.FileInfo
if err := c.request.Get(ctx, "/get-file-info", params, &result); err != nil {
return nil, err
}
result.SetClient(c)
return &result, nil
}
// GetTracksSimilar gets similar tracks (GET /tracks/{track_id}/similar).
func (c *Client) GetTracksSimilar(ctx context.Context, trackID string) (*models.SimilarTracks, error) {
var result models.SimilarTracks
if err := c.request.Get(ctx, fmt.Sprintf("/tracks/%s/similar", trackID), nil, &result); err != nil {
return nil, err
}
result.SetClient(c)
return &result, nil
}
// GetTrackTrailer gets track trailer (GET /tracks/{track_id}/trailer).
func (c *Client) GetTrackTrailer(ctx context.Context, trackID string) (*models.TrackTrailer, error) {
var result models.TrackTrailer
if err := c.request.Get(ctx, fmt.Sprintf("/tracks/%s/trailer", trackID), nil, &result); err != nil {
return nil, err
}
result.SetClient(c)
return &result, nil
}
// GetTrackFullInfo gets full track info (GET /tracks/{track_id}/full-info).
func (c *Client) GetTrackFullInfo(ctx context.Context, trackID string) (*models.TrackFullInfo, error) {
var result models.TrackFullInfo
if err := c.request.Get(ctx, fmt.Sprintf("/tracks/%s/full-info", trackID), nil, &result); err != nil {
return nil, err
}
result.SetClient(c)
return &result, nil
}
// SearchResult represents search results containing tracks.
type SearchResult struct {
Tracks *SearchTracksResult `json:"tracks"`