From 5d55137581abafdd936acb2cccc1eef796f9c48a Mon Sep 17 00:00:00 2001 From: Marshal Date: Mon, 15 Jul 2019 17:12:04 +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:=20play=5Faudio,=20search,=20search=5Fsuggest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yandex_music/client.py | 100 +++++++++++++++++++++++++++++++++-------- 1 file changed, 81 insertions(+), 19 deletions(-) diff --git a/yandex_music/client.py b/yandex_music/client.py index 4b3406e..335fbcd 100644 --- a/yandex_music/client.py +++ b/yandex_music/client.py @@ -227,7 +227,7 @@ class Client(YandexMusicObject): return Experiments.de_json(result, self) - def consume_promo_code(self, code: str, language='en', timeout=None, *args, **kwargs): + def consume_promo_code(self, code: str, language: str = 'en', timeout=None, *args, **kwargs): """Активация промо-кода. Args: @@ -328,7 +328,7 @@ 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): + def tracks_download_info(self, track_id: str or int, get_direct_links: bool = False, timeout=None, *args, **kwargs): """Получение информации о доступных вариантах загрузки трека. Args: @@ -354,19 +354,45 @@ class Client(YandexMusicObject): def play_audio(self, track_id: str or int, - from_, - album_id, - playlist_id, - from_cache=False, - play_id=None, - uid=None, - timestamp=None, - track_length_seconds=0, - total_played_seconds=0, - end_position_seconds=0, - client_now=None, + from_: str, + album_id: str or int, + playlist_id: str = None, + from_cache: bool = False, + play_id: str = None, + uid: int = None, + timestamp: str = None, + track_length_seconds: int = 0, + total_played_seconds: int = 0, + end_position_seconds: int = 0, + client_now: str = None, timeout=None, *args, **kwargs): + """Метод для отправки текущего состояния прослушиваемого трека. + + Args: + track_id (:obj:`str` | :obj:`int`): Уникальный идентификатор трека. + from_ (:obj:`str`): Наименования клиента с которого происходит прослушивание. + album_id (:obj:`str` | :obj:`int`): Уникальный идентификатор альбома. + playlist_id (:obj:`str`, optional): Уникальный идентификатор плейлиста, если таковой прослушивается. + from_cache (:obj:`bool`, optional): Проигрывается ли трек с кеша. + play_id (:obj:`str`, optional): Уникальный идентификатор проигрывания. + uid (:obj:`int`, optional): Уникальный идентификатор пользователя. + timestamp (:obj:`str`, optional): Текущая дата и время в ISO. + track_length_seconds (:obj:`int`, optional): Продолжительность трека в секундах. + total_played_seconds (:obj:`int`, optional): Сколько было всего воспроизведено трека в секундах. + end_position_seconds (:obj:`int`, optional): Окончательное значение воспроизведенных секунд. + client_now (:obj:`str`, optional): Текущая дата и время клиента в ISO. + timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания + ответа от сервера вместо указанного при создании пула. + **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). + + Returns: + :obj:`bool`: :obj:`True` при успешно завершённом запросе, иначе :obj:`False`. + + Raises: + :class:`yandex_music.YandexMusicError` + """ + url = f'{self.base_url}/play-audio' data = { @@ -389,19 +415,39 @@ class Client(YandexMusicObject): return result == 'ok' def search(self, - text, - nocorrect=False, - type='all', - page=0, - playlist_in_best=True, + text: str, + nocorrect: bool = False, + type_: str = 'all', + page: int = 0, + playlist_in_best: bool = True, timeout=None, *args, **kwargs): + """Осуществление поиска по запросу и типу, получение результатов. + + Args: + text (:obj:`str`): Текст запроса. + nocorrect (:obj:`bool`): Без исправлений ли TODO. + type_ (:obj:`str`): Среди какого типа искать (трек, плейлист, альбом, исполнитель). + page (:obj:`int`: Номер страницы. + playlist_in_best (:obj:`bool`): Выдавать ли плейлисты лучшим вариантом поиска. + timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания + ответа от сервера вместо указанного при создании пула. + **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). + + Returns: + :obj:`yandex_music.Search`: Объекта класса :class:`yandex_music.Search` + представляющий результаты поиска, иначе :obj:`None`. + + Raises: + :class:`yandex_music.YandexMusicError` + """ + url = f'{self.base_url}/search' params = { 'text': text, 'nocorrect': nocorrect, - 'type': type, + 'type': type_, 'page': page, 'playlist-in-best': playlist_in_best, } @@ -411,6 +457,22 @@ class Client(YandexMusicObject): return Search.de_json(result, self) def search_suggest(self, part: str, timeout=None, *args, **kwargs): + """Получение подсказок по введенной части поискового запроса. + + Args: + part (:obj:`str`): Часть поискового запроса. + timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания + ответа от сервера вместо указанного при создании пула. + **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). + + Returns: + :obj:`yandex_music.Suggestions`: Объекта класса :class:`yandex_music.Suggestions` + представляющий подсказки для запроса, иначе :obj:`None`. + + Raises: + :class:`yandex_music.YandexMusicError` + """ + url = f'{self.base_url}/search/suggest' result = self._request.get(url, {'part': part}, timeout=timeout, *args, **kwargs)