Добавлен класс TracksSimilar с полями трека и списка похожих треков.

Добавлен метод для получения похожих треков. #197
このコミットが含まれているのは:
Il`ya 2020-01-25 19:46:25 +03:00
コミット 16aae08b07
3個のファイルの変更43行の追加2行の削除

ファイルの表示

@ -44,6 +44,7 @@ from .tracks_list import TracksList
from .track.major import Major
from .track.normalization import Normalization
from .track.track import Track
from .track.tracks_similar import TracksSimilar
from .likes.albums_likes import AlbumsLikes
from .likes.artists_likes import ArtistsLikes
@ -119,4 +120,4 @@ __all__ = ['YandexMusicObject', 'Client', 'Account', 'PassportPhone', 'Invocatio
'Icon', 'Images', 'Id', 'Station', 'Dashboard', 'RotorSettings', 'AdParams', 'Restrictions', 'Value', 'Enum',
'DiscreteScale', 'StationResult', 'Sequence', 'StationTracksResult', 'BriefInfo', 'Description',
'PlaylistId', 'Vinyl', 'Supplement', 'Lyrics', 'VideoSupplement', 'ArtistTracks', 'Pager', 'ArtistAlbums',
'PlaylistAbsence', 'Shot', 'ShotEvent', 'ShotType', 'ShotData']
'PlaylistAbsence', 'Shot', 'ShotEvent', 'ShotType', 'ShotData', 'TracksSimilar']

ファイルの表示

@ -6,7 +6,7 @@ from typing import Callable, Union, List, Optional
from yandex_music import YandexMusicObject, Status, Settings, PermissionAlerts, Experiments, Artist, Album, Playlist, \
TracksList, Track, AlbumsLikes, ArtistsLikes, PlaylistsLikes, Feed, PromoCodeStatus, DownloadInfo, Search, \
Suggestions, Landing, Genre, Dashboard, StationResult, StationTracksResult, BriefInfo, Supplement, ArtistTracks, \
ArtistAlbums, ShotEvent
ArtistAlbums, ShotEvent, TracksSimilar
from yandex_music.utils.request import Request
from yandex_music.utils.difference import Difference
from yandex_music.exceptions import InvalidToken, Captcha
@ -465,6 +465,15 @@ class Client(YandexMusicObject):
return Supplement.de_json(result, self)
@log
def tracks_similar(self, track_id: Union[str, int], timeout: Union[int, float] = None,
*args, **kwargs) -> Optional:
url = f'{self.base_url}/tracks/{track_id}/similar'
result = self._request.get(url, timeout=timeout, *args, **kwargs)
return TracksSimilar.de_json(result, self)
@log
def play_audio(self,
track_id: Union[str, int],

31
yandex_music/track/tracks_similar.py ノーマルファイル
ファイルの表示

@ -0,0 +1,31 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client, Track
from yandex_music import YandexMusicObject
class TracksSimilar(YandexMusicObject):
def __init__(self,
track: Optional['Track'],
similar_tracks: List['Track'],
client: Optional['Client'] = None,
**kwargs) -> None:
self.track = track
self.similar_tracks = similar_tracks
self.client = client
self._id_attrs = (self.track, self.similar_tracks)
@classmethod
def de_json(cls, data: dict, client: 'Client') -> Optional['TracksSimilar']:
if not data:
return None
data = super(TracksSimilar, cls).de_json(data, client)
from yandex_music import Track
data['track'] = Track.de_json(data.get('track'), client)
data['similar_tracks'] = Track.de_list(data.get('similar_tracks'), client)
return cls(client=client, **data)