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:
1 parent
9d3bcc4a9b
commit
49920d8908
6 files changed
+783
No files matched your search
@@ -3,6 +3,7 @@ package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"gitea.mrixs.me/Mrixs/yandex-music-api-go/internal/models"
|
||||
"gitea.mrixs.me/Mrixs/yandex-music-api-go/internal/utils"
|
||||
@@ -69,3 +70,23 @@ func (c *Client) GetAlbumsWithTracks(ctx context.Context, albumIDs []string) ([]
|
||||
}
|
||||
return albums, nil
|
||||
}
|
||||
|
||||
// GetAlbumSimilarEntities gets similar entities for an album (GET /albums/{id}/similar-entities).
|
||||
func (c *Client) GetAlbumSimilarEntities(ctx context.Context, albumID string) (*models.AlbumSimilarEntities, error) {
|
||||
var result models.AlbumSimilarEntities
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/albums/%s/similar-entities", albumID), nil, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetAlbumTrailer gets album trailer (GET /albums/{id}/trailer).
|
||||
func (c *Client) GetAlbumTrailer(ctx context.Context, albumID string) (*models.AlbumTrailer, error) {
|
||||
var result models.AlbumTrailer
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/albums/%s/trailer", albumID), nil, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
@@ -77,3 +77,141 @@ func (c *Client) GetArtistTracks(ctx context.Context, artistID string, page, pag
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetArtistBriefInfo gets brief info about an artist (GET /artists/{artist_id}/brief-info).
|
||||
func (c *Client) GetArtistBriefInfo(ctx context.Context, artistID string) (*models.ArtistBriefInfo, error) {
|
||||
var result models.ArtistBriefInfo
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/brief-info", artistID), nil, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetArtistSimilar gets similar artists (GET /artists/{artist_id}/similar).
|
||||
func (c *Client) GetArtistSimilar(ctx context.Context, artistID string) (*models.ArtistSimilar, error) {
|
||||
var result models.ArtistSimilar
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/similar", artistID), nil, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetArtistLinks gets links to artist's pages (GET /artists/{artist_id}/artist-links).
|
||||
func (c *Client) GetArtistLinks(ctx context.Context, artistID string) (*models.ArtistLinks, error) {
|
||||
var result models.ArtistLinks
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/artist-links", artistID), nil, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetArtistAlsoAlbums gets albums where artist participated (GET /artists/{artist_id}/also-albums).
|
||||
func (c *Client) GetArtistAlsoAlbums(ctx context.Context, artistID string, page, pageSize int, sortBy string) (*models.ArtistAlbums, error) {
|
||||
params := map[string]string{
|
||||
"page": fmt.Sprintf("%d", page),
|
||||
"page-size": fmt.Sprintf("%d", pageSize),
|
||||
"sort-by": sortBy,
|
||||
}
|
||||
var result models.ArtistAlbums
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/also-albums", artistID), params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetArtistDiscographyAlbums gets artist discography (GET /artists/{artist_id}/discography-albums).
|
||||
func (c *Client) GetArtistDiscographyAlbums(ctx context.Context, artistID string, page, pageSize int, sortBy string) (*models.ArtistAlbums, error) {
|
||||
params := map[string]string{
|
||||
"page": fmt.Sprintf("%d", page),
|
||||
"page-size": fmt.Sprintf("%d", pageSize),
|
||||
"sort-by": sortBy,
|
||||
}
|
||||
var result models.ArtistAlbums
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/discography-albums", artistID), params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetArtistSafeDirectAlbums gets safe direct albums (GET /artists/{artist_id}/safe-direct-albums).
|
||||
func (c *Client) GetArtistSafeDirectAlbums(ctx context.Context, artistID string, sortBy, sortOrder string, limit int) (*models.ArtistAlbums, error) {
|
||||
params := map[string]string{
|
||||
"sort-by": sortBy,
|
||||
"sort-order": sortOrder,
|
||||
"limit": fmt.Sprintf("%d", limit),
|
||||
}
|
||||
var result models.ArtistAlbums
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/safe-direct-albums", artistID), params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetArtistTrackIds gets track IDs by artist (GET /artists/{artist_id}/track-ids).
|
||||
func (c *Client) GetArtistTrackIds(ctx context.Context, artistID string, page, pageSize int) ([]string, error) {
|
||||
params := map[string]string{
|
||||
"page": fmt.Sprintf("%d", page),
|
||||
"page-size": fmt.Sprintf("%d", pageSize),
|
||||
}
|
||||
var result []string
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/track-ids", artistID), params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// GetArtistAbout gets "About artist" info (GET /artists/{artist_id}/about-artist).
|
||||
func (c *Client) GetArtistAbout(ctx context.Context, artistID string) (*models.ArtistAbout, error) {
|
||||
var result models.ArtistAbout
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/about-artist", artistID), nil, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetArtistDonation gets artist donation info (GET /artists/{artist_id}/blocks/artist-donation).
|
||||
func (c *Client) GetArtistDonation(ctx context.Context, artistID string) (*models.ArtistDonations, error) {
|
||||
var result models.ArtistDonations
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/blocks/artist-donation", artistID), nil, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetArtistInfo gets detailed artist info (GET /artists/{artist_id}/info).
|
||||
func (c *Client) GetArtistInfo(ctx context.Context, artistID string) (*models.ArtistInfo, error) {
|
||||
var result models.ArtistInfo
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/info", artistID), nil, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetArtistSkeleton gets artist page skeleton (GET /artists/{artist_id}/skeletons/{skeleton_id}).
|
||||
func (c *Client) GetArtistSkeleton(ctx context.Context, artistID, skeletonID string) (*models.ArtistSkeleton, error) {
|
||||
var result models.ArtistSkeleton
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/skeletons/%s", artistID, skeletonID), nil, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetArtistTrailer gets artist trailer (GET /artists/{artist_id}/trailer).
|
||||
func (c *Client) GetArtistTrailer(ctx context.Context, artistID string) (*models.ArtistTrailerStatus, error) {
|
||||
var result models.ArtistTrailerStatus
|
||||
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/trailer", artistID), nil, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
@@ -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"`
|
||||
|
||||
Reference in new issue
Block a user