Добавлен класс 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.major import Major
from .track.normalization import Normalization from .track.normalization import Normalization
from .track.track import Track from .track.track import Track
from .track.tracks_similar import TracksSimilar
from .likes.albums_likes import AlbumsLikes from .likes.albums_likes import AlbumsLikes
from .likes.artists_likes import ArtistsLikes 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', 'Icon', 'Images', 'Id', 'Station', 'Dashboard', 'RotorSettings', 'AdParams', 'Restrictions', 'Value', 'Enum',
'DiscreteScale', 'StationResult', 'Sequence', 'StationTracksResult', 'BriefInfo', 'Description', 'DiscreteScale', 'StationResult', 'Sequence', 'StationTracksResult', 'BriefInfo', 'Description',
'PlaylistId', 'Vinyl', 'Supplement', 'Lyrics', 'VideoSupplement', 'ArtistTracks', 'Pager', 'ArtistAlbums', '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, \ from yandex_music import YandexMusicObject, Status, Settings, PermissionAlerts, Experiments, Artist, Album, Playlist, \
TracksList, Track, AlbumsLikes, ArtistsLikes, PlaylistsLikes, Feed, PromoCodeStatus, DownloadInfo, Search, \ TracksList, Track, AlbumsLikes, ArtistsLikes, PlaylistsLikes, Feed, PromoCodeStatus, DownloadInfo, Search, \
Suggestions, Landing, Genre, Dashboard, StationResult, StationTracksResult, BriefInfo, Supplement, ArtistTracks, \ 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.request import Request
from yandex_music.utils.difference import Difference from yandex_music.utils.difference import Difference
from yandex_music.exceptions import InvalidToken, Captcha from yandex_music.exceptions import InvalidToken, Captcha
@ -465,6 +465,15 @@ class Client(YandexMusicObject):
return Supplement.de_json(result, self) 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 @log
def play_audio(self, def play_audio(self,
track_id: Union[str, int], 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)