Исправлена десериализация шот ивента.

Добавлены методы для загрузки обложки и аудиоверсии шота.
Дополнена документация. #185
このコミットが含まれているのは:
Il`ya 2020-01-24 17:47:50 +03:00
コミット 9681487c9a
2個のファイルの変更36行の追加3行の削除

ファイルの表示

@ -1229,18 +1229,25 @@ class Client(YandexMusicObject):
return self._dislike_action(track_ids, True, user_id, timeout, *args, **kwargs)
@log
def after_track(self, prev_track_id: Union[str, int], next_track_id: Union[str, int], context_item: str,
def after_track(self, next_track_id: Union[str, int], context_item: str, prev_track_id: Union[str, int] = None,
context: str = 'playlist', types: str = 'shot', from_: str = 'mobile-landing-origin-default',
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[ShotEvent]:
"""Получение рекламы или шота от Алисы после трека.
При получения шота от Алисы `prev_track_id` можно не указывать.
Если `context = 'playlist'`, то в `context_item` необходимо передать `{OWNER_PLAYLIST}:{ID_PLAYLIST}`.
Плейлист с Алисой имеет владельца с `id = 940441070`.
ID плейлиста можно получить из блоков landing'a. Получить шот чужого плейлиста нельзя.
Известные значения `context`: `playlist`.
Известные значения `types`: `shot`, `ad`.
Args:
prev_track_id (:obj:`str` | :obj:`int`): Уникальный идентификатор предыдущего трека.
next_track_id (:obj:`str` | :obj:`int`): Уникальный идентификатор следующего трека.
context_item (:obj:`str`): TODO (уникальный идентификатор контекста).
context_item (:obj:`str`): Уникальный идентификатор контекста.
context (:obj:`str`, optional): Место, откуда было вызвано получение.
types (:obj:`str`, optional): Тип того, что вернуть после трека.
from_ (:obj:`str`, optional): Место, с которого попали в контекст.
@ -1270,7 +1277,7 @@ class Client(YandexMusicObject):
result = self._request.get(url, params=params, timeout=timeout, *args, **kwargs)
# TODO судя по всему эндпоинт ещё возвращает рекламу после треков для пользователей без подписки.
return ShotEvent.de_json(result, self)
return ShotEvent.de_json(result.get('shot_event'), self)
# camelCase псевдонимы

ファイルの表示

@ -44,6 +44,25 @@ class ShotData(YandexMusicObject):
self.client = client
self._id_attrs = (self.cover_uri, self.mds_url, self.shot_text, self.shot_type)
def download_cover(self, filename: str, size: str = '200x200') -> None:
"""Загрузка обложки.
Args:
filename (:obj:`str`): Путь для сохранения файла с названием и расширением.
size (:obj:`str`, optional): Размер обложки.
"""
self.client.request.download(f'https://{self.cover_uri.replace("%%", size)}', filename)
def download_mds(self, filename: str) -> None:
"""Загрузка аудиоверсии шота.
Args:
filename (:obj:`str`): Путь для сохранения файла с названием и расширением.
"""
self.client.request.download(self.mds_url, filename)
@classmethod
def de_json(cls, data: dict, client: 'Client') -> Optional['ShotData']:
"""Десериализация объекта.
@ -64,3 +83,10 @@ class ShotData(YandexMusicObject):
data['shot_type'] = ShotType.de_json(data.get('shot_type'), client)
return cls(client=client, **data)
# camelCase псевдонимы
#: Псевдоним для :attr:`download_cover`
downloadCover = download_cover
#: Псевдоним для :attr:`download_mds`
downloadMds = download_mds