From 8da522ad0bdea92d4731b41ccd49cf0ad1b976c9 Mon Sep 17 00:00:00 2001 From: Marshal Date: Mon, 15 Jul 2019 16:39:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=BE=D0=BA=D1=83=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D1=8B=20?= =?UTF-8?q?=D1=81=D0=BB=D0=B5=D0=B4=D1=83=D1=8E=D1=89=D0=B8=D0=B5=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0:=20consume=5Fpromo=5Fcode,=20feed,=20landing,=20ge?= =?UTF-8?q?nres,=20tracks=5Fdownload=5Finfo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yandex_music/client.py | 91 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/yandex_music/client.py b/yandex_music/client.py index cb8d66a..4b3406e 100644 --- a/yandex_music/client.py +++ b/yandex_music/client.py @@ -76,6 +76,7 @@ class Client(YandexMusicObject): Returns: :obj:`yandex_music.Client`. """ + return cls(username=None, password=None, token=token) def generate_token_by_username_and_password(self, username, password, grant_type='password', @@ -96,6 +97,7 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.YandexMusicError` """ + url = f'{self.oauth_url}/token' data = { @@ -122,8 +124,8 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.InvalidToken`: Если токен недействителен. - """ + if any(x.isspace() for x in token): raise InvalidToken() @@ -152,6 +154,7 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.YandexMusicError` """ + url = f'{self.base_url}/account/status' result = self._request.get(url, timeout=timeout, *args, **kwargs) @@ -173,6 +176,7 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.YandexMusicError` """ + url = f'{self.base_url}/settings' result = self._request.get(url, timeout=timeout, *args, **kwargs) @@ -194,6 +198,7 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.YandexMusicError` """ + url = f'{self.base_url}/permission-alerts' result = self._request.get(url, timeout=timeout, *args, **kwargs) @@ -215,6 +220,7 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.YandexMusicError` """ + url = f'{self.base_url}/account/experiments' result = self._request.get(url, timeout=timeout, *args, **kwargs) @@ -222,6 +228,23 @@ class Client(YandexMusicObject): return Experiments.de_json(result, self) def consume_promo_code(self, code: str, language='en', timeout=None, *args, **kwargs): + """Активация промо-кода. + + Args: + code (:obj:`str`): Промо-код. + language (:obj:`str`, optional): Язык ответа API в ISO 639-1. + timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания + ответа от сервера вместо указанного при создании пула. + **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). + + Returns: + :obj:`yandex_music.PromoCodeStatus`: Объекта класса :class:`yandex_music.PromoCodeStatus` + представляющий информацию об активации промо-кода, иначе :obj:`None`. + + Raises: + :class:`yandex_music.YandexMusicError` + """ + url = f'{self.base_url}/account/consume-promo-code' result = self._request.post(url, {'code': code, 'language': language}, timeout=timeout, *args, **kwargs) @@ -229,6 +252,21 @@ class Client(YandexMusicObject): return PromoCodeStatus.de_json(result, self) def feed(self, timeout=None, *args, **kwargs): + """Получение потока информации (фида) подобранного под пользователя. Содержит умные плейлисты. + + Args: + timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания + ответа от сервера вместо указанного при создании пула. + **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). + + Returns: + :obj:`yandex_music.Feed`: Объекта класса :class:`yandex_music.Feed` + представляющий умные плейлисты пользователя, иначе :obj:`None`. + + Raises: + :class:`yandex_music.YandexMusicError` + """ + url = f'{self.base_url}/feed' result = self._request.get(url, timeout=timeout, *args, **kwargs) @@ -243,6 +281,25 @@ class Client(YandexMusicObject): return result.get('is_wizard_passed') or False def landing(self, blocks: str or list, timeout=None, *args, **kwargs): + """Получение лендинг-страницы содержащий блоки с новыми релизами, чартами, плейлистами с новинками и т.д. + + Поддерживаемые типы блоков: personalplaylists, promotions, new-releases, new-playlists, mixes,c hart, artists, + albums, playlists, play_contexts. + + Args: + blocks (:obj:`str` | :obj:`list` из :obj:`str`): Блок или список блоков необходимых для выдачи. + timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания + ответа от сервера вместо указанного при создании пула. + **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). + + Returns: + :obj:`yandex_music.Landing`: Объекта класса :class:`yandex_music.Landing` + представляющий лендинг-страницу, иначе :obj:`None`. + + Raises: + :class:`yandex_music.YandexMusicError` + """ + url = f'{self.base_url}/landing3' result = self._request.get(url, {'blocks': blocks}, timeout=timeout, *args, **kwargs) @@ -250,6 +307,21 @@ class Client(YandexMusicObject): return Landing.de_json(result, self) def genres(self, timeout=None, *args, **kwargs): + """Получение жанров музыки. + + Args: + timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания + ответа от сервера вместо указанного при создании пула. + **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). + + Returns: + :obj:`list` из :obj:`yandex_music.Genre`: Список объектов класса :class:`yandex_music.Genre` + представляющих информацию о жанре музыки, иначе :obj:`None`. + + Raises: + :class:`yandex_music.YandexMusicError` + """ + url = f'{self.base_url}/genres' result = self._request.get(url, timeout=timeout, *args, **kwargs) @@ -257,6 +329,23 @@ class Client(YandexMusicObject): return Genre.de_list(result, self) def tracks_download_info(self, track_id: str or int, get_direct_links=False, timeout=None, *args, **kwargs): + """Получение информации о доступных вариантах загрузки трека. + + Args: + track_id (:obj:`str` | :obj:`list` из :obj:`str`): Уникальный идентификатор трека или треков. + get_direct_links (:obj:`bool`, optional): Получить ли при вызове метода прямую ссылку на загрузку. + timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания + ответа от сервера вместо указанного при создании пула. + **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). + + Returns: + :obj:`list` из :obj:`yandex_music.DownloadInfo`: Список объектов класса :class:`yandex_music.DownloadInfo` + представляющих информацию о вариантах загрузки трека, иначе :obj:`None`. + + Raises: + :class:`yandex_music.YandexMusicError` + """ + url = f'{self.base_url}/tracks/{track_id}/download-info' result = self._request.get(url, timeout=timeout, *args, **kwargs)