Добавлен класс: PlaylistsRecommendations Добавлен метод: users_playlists_recommendations
このコミットが含まれているのは:
コミット
8501aa89c0
|
@ -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)
|
読み込み中…
新しいイシューから参照