Добавлена поддержка рекомендаций для плейлистов (#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_id import PlaylistId
from .playlist.playlist_absence import PlaylistAbsence from .playlist.playlist_absence import PlaylistAbsence
from .playlist.playlist import Playlist from .playlist.playlist import Playlist
from .playlist.playlists_recommendations import PlaylistsRecommendations
from .shot.shot_type import ShotType from .shot.shot_type import ShotType
from .shot.shot_data import ShotData from .shot.shot_data import ShotData
@ -119,4 +120,4 @@ __all__ = ['YandexMusicObject', 'Client', 'Account', 'PassportPhone', 'Invocatio
'Dashboard', 'RotorSettings', 'AdParams', 'Restrictions', 'Value', 'Enum', 'DiscreteScale', 'StationResult', 'Dashboard', 'RotorSettings', 'AdParams', 'Restrictions', 'Value', 'Enum', 'DiscreteScale', 'StationResult',
'Sequence', 'StationTracksResult', 'BriefInfo', 'Description', 'PlaylistId', 'Vinyl', 'Supplement', 'Lyrics', 'Sequence', 'StationTracksResult', 'BriefInfo', 'Description', 'PlaylistId', 'Vinyl', 'Supplement', 'Lyrics',
'VideoSupplement', 'ArtistTracks', 'Pager', 'ArtistAlbums', 'PlaylistAbsence', 'Shot', 'ShotEvent', '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, \ from yandex_music import Album, Artist, ArtistAlbums, ArtistTracks, BriefInfo, Dashboard, DownloadInfo, Experiments, \
Feed, Genre, Landing, Like, PermissionAlerts, Playlist, PromoCodeStatus, Search, Settings, ShotEvent, SimilarTracks, \ Feed, Genre, Landing, Like, PermissionAlerts, Playlist, PromoCodeStatus, Search, Settings, ShotEvent, SimilarTracks, \
StationResult, StationTracksResult, Status, Suggestions, Supplement, Track, TracksList, UserSettings, \ StationResult, StationTracksResult, Status, Suggestions, Supplement, Track, TracksList, UserSettings, \
YandexMusicObject YandexMusicObject, PlaylistsRecommendations
from yandex_music.exceptions import Captcha, InvalidToken from yandex_music.exceptions import Captcha, InvalidToken
from yandex_music.utils.difference import Difference from yandex_music.utils.difference import Difference
from yandex_music.utils.request import Request from yandex_music.utils.request import Request
@ -764,6 +764,19 @@ class Client(YandexMusicObject):
return Playlist.de_json(result, self) 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 @log
def users_playlists_create(self, title: str, visibility: str = 'public', user_id: Union[str, int] = None, 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]: 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)