Добавлена поддержка рекомендаций для плейлистов (#324)

Добавлен класс: PlaylistsRecommendations
Добавлен метод: users_playlists_recommendations
このコミットが含まれているのは:
Gleb Liutsko 2020-05-07 11:08:05 +04:00
コミット 8501aa89c0
3個のファイルの変更48行の追加2行の削除

ファイルの表示

@ -36,6 +36,7 @@ from .playlist.play_counter import PlayCounter
from .playlist.playlist_id import PlaylistId
from .playlist.playlist_absence import PlaylistAbsence
from .playlist.playlist import Playlist
from .playlist.playlists_recommendations import PlaylistsRecommendations
from .shot.shot_type import ShotType
from .shot.shot_data import ShotData
@ -119,4 +120,4 @@ __all__ = ['YandexMusicObject', 'Client', 'Account', 'PassportPhone', 'Invocatio
'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', 'SimilarTracks', 'UserSettings', 'RenewableRemainder']
'ShotType', 'ShotData', 'SimilarTracks', 'UserSettings', 'RenewableRemainder', 'PlaylistsRecommendations']

ファイルの表示

@ -6,7 +6,7 @@ from typing import Callable, Dict, List, Optional, Union
from yandex_music import Album, Artist, ArtistAlbums, ArtistTracks, BriefInfo, Dashboard, DownloadInfo, Experiments, \
Feed, Genre, Landing, Like, PermissionAlerts, Playlist, PromoCodeStatus, Search, Settings, ShotEvent, SimilarTracks, \
StationResult, StationTracksResult, Status, Suggestions, Supplement, Track, TracksList, UserSettings, \
YandexMusicObject
YandexMusicObject, PlaylistsRecommendations
from yandex_music.exceptions import Captcha, InvalidToken
from yandex_music.utils.difference import Difference
from yandex_music.utils.request import Request
@ -764,6 +764,19 @@ class Client(YandexMusicObject):
return Playlist.de_json(result, self)
@log
def users_playlists_recommendations(self, kind: Union[List[Union[str, int]], str, int],
user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args,
**kwargs):
if user_id is None and self.me is not None:
user_id = self.me.account.uid
url = f'{self.base_url}/users/{user_id}/playlists/{kind}/recommendations'
result = self._request.get(url, timeout=timeout, *args, **kwargs)
return PlaylistsRecommendations.de_json(result, self)
@log
def users_playlists_create(self, title: str, visibility: str = 'public', user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:

ファイルの表示

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