From bb410d0ca0e4721721d3617545f7e3f826693adc Mon Sep 17 00:00:00 2001 From: Il`ya Date: Wed, 22 Jan 2020 18:08:08 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B0=D1=80=D0=B3=D1=83=D0=BC=D0=B5=D0=BD=D1=82=20?= =?UTF-8?q?=D0=B8=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=85=D0=BE=D0=B4=D0=B0=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D1=86=D0=B5=D0=BF=D0=BE=D1=87=D0=BA=D0=B8=20=D1=82=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=20=D0=B2=20=D1=80=D0=B0=D0=B4=D0=B8=D0=BE.?= =?UTF-8?q?=20=D0=98=D0=94=20=D1=82=D1=80=D0=B5=D0=BA=D0=B0,=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8,=20=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=89?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D1=81=20=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=B1=D0=BE=D0=BC=D0=BE=D0=BC.=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BA=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8E=20=D1=82=D1=80?= =?UTF-8?q?=D0=B5=D0=BA=D0=BE=D0=B2.=20#20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yandex_music/client.py | 60 +++++++++++++++++++++++++++++-------- yandex_music/track/track.py | 2 ++ 2 files changed, 49 insertions(+), 13 deletions(-) diff --git a/yandex_music/client.py b/yandex_music/client.py index 84158d0..0377c5b 100644 --- a/yandex_music/client.py +++ b/yandex_music/client.py @@ -917,25 +917,26 @@ class Client(YandexMusicObject): @log def rotor_station_feedback(self, station: str, type_: str, timestamp: Union[str, float, int] = None, - from_: str = None, batch_id: str = None, total_played_seconds: float = None, + from_: str = None, batch_id: str = None, total_played_seconds: Union[int, float] = None, track_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs) -> bool: """Отправка ответной реакции на происходящее при прослушивании радио. Сообщения о начале прослушивания радио, начале и конце трека, его пропуска. - Известные типы фидбека: radioStarted, trackStarted, trackFinished, skip - Пример station: user:onyourwave, genre:allrock - Пример from_: mobile-radio-user-123456789 + Известные типы фидбека: radioStarted, trackStarted, trackFinished, skip. + Пример station: user:onyourwave, genre:allrock. + Пример from_: mobile-radio-user-123456789. Args: station (:obj:`str`): Станция. - type_ (:obj:`int`): Тип отправляемого фидбека. - timestamp (:obj:`int`): Текущее время и дата. - from_ (:obj:`int`): Откуда начато воспроизведение радио. - batch_id (:obj:`int`): Уникальный идентификатор партии треков. Возвращается при получении треков. - total_played_seconds (:obj:`int`): Сколько было проиграно секунд трека перед действием. - track_id (:obj:`int` | :obj:`str`): Уникальной идентификатор трека. + type_ (:obj:`str`): Тип отправляемого фидбека. + timestamp (:obj:`str` | :obj:`float` | :obj:`int`, optional): Текущее время и дата. + from_ (:obj:`str`, optional): Откуда начато воспроизведение радио. + batch_id (:obj:`str`, optional): Уникальный идентификатор партии треков. Возвращается при получении треков. + total_played_seconds (:obj:`int` |:obj:`float`, optional): Сколько было проиграно секунд трека + перед действием. + track_id (:obj:`int` | :obj:`str`, optional): Уникальной идентификатор трека. timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). @@ -1034,11 +1035,44 @@ class Client(YandexMusicObject): return StationResult.de_list(result, self) @log - def rotor_station_tracks(self, station: str, timeout: Union[int, float] = None, - *args, **kwargs) -> Optional[StationTracksResult]: + def rotor_station_tracks(self, station: str, settings2: bool = True, queue: Union[str, int] = None, + timeout: Union[int, float] = None, *args, **kwargs) -> Optional[StationTracksResult]: + """Получение 5 треков определённой станции. + + Для продолжения цепочки треков необходимо: + 1. Передавать ID трека, что был до этого (первый в цепочки). + 2. Отправить фидбек о конче или скипе трека, что был передан в `queue`. + 3. Отправить фидбек о начале следующего трека (второй в цепочки). + 4. Выполнить запрос получения треков. В ответе придёт новые треки или произойдёт сдвиг цепочки на 1 элемент. + + Проход по цепочке до коцна не изучен. Часто встречаются дубликаты. + + Args: + station (:obj:`str`): Станция. + settings2 (:obj:`bool`, optional): Использовать ли второй набор настроек. + queue (:obj:`str` | :obj:`int` , optional): Уникальной идентификатор трека, который только что был. + timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания + ответа от сервера вместо указанного при создании пула. + **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). + + Returns: + :obj:`yandex_music.StationTracksResult`: Объекта класса :class:`yandex_music.StationTracksResult` + представляющий последовательность треков станции, иначе :obj:`None`. + + Raises: + :class:`yandex_music.YandexMusicError` + """ + url = f'{self.base_url}/rotor/station/{station}/tracks' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + params = {} + if settings2: + params = {'settings2': True} + + if queue: + params = {'queue': queue} + + result = self._request.get(url, params=params, timeout=timeout, *args, **kwargs) return StationTracksResult.de_json(result, self) diff --git a/yandex_music/track/track.py b/yandex_music/track/track.py index fcadae2..48d0306 100644 --- a/yandex_music/track/track.py +++ b/yandex_music/track/track.py @@ -121,6 +121,8 @@ class Track(YandexMusicObject): @property def track_id(self) -> str: + if self.albums: + return f'{self.id}:{self.albums[0].id}' return f'{self.id}' @classmethod