diff --git a/yandex_music/client.py b/yandex_music/client.py index ace9d53..cd97b73 100644 --- a/yandex_music/client.py +++ b/yandex_music/client.py @@ -446,7 +446,7 @@ class Client(YandexMusicObject): **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: - :obj:`yandex_music.LandingList`: Список подскастов. + :obj:`yandex_music.LandingList`: Список подкастов. Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. @@ -1082,7 +1082,7 @@ class Client(YandexMusicObject): @log def rotor_account_status(self, *args, **kwargs) -> Optional[Status]: - """Получение статуса пользователя с дополнителньыми полями. + """Получение статуса пользователя с дополнительными полями. Note: Данный статус отличается от обычного наличием дополнительных полей, например, `skips_per_hour`. @@ -1164,12 +1164,12 @@ class Client(YandexMusicObject): *args, **kwargs, ) -> bool: - """Отправка ответной реакции на происходящее при прослушивании радио. + """Отправка обратной связи на действия при прослушивании радио. Note: Сообщения о начале прослушивания радио, начале и конце трека, его пропуска. - Известные типы фидбека: `radioStarted`, `trackStarted`, `trackFinished`, `skip`. + Известные типы обратной связи: `radioStarted`, `trackStarted`, `trackFinished`, `skip`. Пример `station`: `user:onyourwave`, `genre:allrock`. @@ -1177,7 +1177,7 @@ class Client(YandexMusicObject): Args: station (:obj:`str`): Станция. - type_ (:obj:`str`): Тип отправляемого фидбека. + type_ (:obj:`str`): Тип отправляемого отзыва. timestamp (:obj:`str` | :obj:`float` | :obj:`int`, optional): Текущее время и дата. from_ (:obj:`str`, optional): Откуда начато воспроизведение радио. batch_id (:obj:`str`, optional): Уникальный идентификатор партии треков. Возвращается при получении треков. @@ -1424,7 +1424,7 @@ class Client(YandexMusicObject): 3. Отправить фидбек о начале следующего трека (второй в цепочки). 4. Выполнить запрос получения треков. В ответе придёт новые треки или произойдёт сдвиг цепочки на 1 элемент. - Проход по цепочке до коцна не изучен. Часто встречаются дубликаты. + Проход по цепочке до конца не изучен. Часто встречаются дубликаты. Все официальные клиенты выполняют запросы с `settings2 = True`. @@ -2260,7 +2260,7 @@ class Client(YandexMusicObject): result = self._request.get(url, params=params, *args, **kwargs) - # TODO судя по всему эндпоинт ещё возвращает рекламу после треков для пользователей без подписки. + # TODO (MarshalX) судя по всему ручка ещё возвращает рекламу после треков для пользователей без подписки. return ShotEvent.de_json(result.get('shot_event'), self) @log diff --git a/yandex_music/client_async.py b/yandex_music/client_async.py index 7d7cc69..129130a 100644 --- a/yandex_music/client_async.py +++ b/yandex_music/client_async.py @@ -452,7 +452,7 @@ class ClientAsync(YandexMusicObject): **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: - :obj:`yandex_music.LandingList`: Список подскастов. + :obj:`yandex_music.LandingList`: Список подкастов. Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. @@ -1092,7 +1092,7 @@ class ClientAsync(YandexMusicObject): @log async def rotor_account_status(self, *args, **kwargs) -> Optional[Status]: - """Получение статуса пользователя с дополнителньыми полями. + """Получение статуса пользователя с дополнительными полями. Note: Данный статус отличается от обычного наличием дополнительных полей, например, `skips_per_hour`. @@ -1174,12 +1174,12 @@ class ClientAsync(YandexMusicObject): *args, **kwargs, ) -> bool: - """Отправка ответной реакции на происходящее при прослушивании радио. + """Отправка обратной связи на действия при прослушивании радио. Note: Сообщения о начале прослушивания радио, начале и конце трека, его пропуска. - Известные типы фидбека: `radioStarted`, `trackStarted`, `trackFinished`, `skip`. + Известные типы обратной связи: `radioStarted`, `trackStarted`, `trackFinished`, `skip`. Пример `station`: `user:onyourwave`, `genre:allrock`. @@ -1187,7 +1187,7 @@ class ClientAsync(YandexMusicObject): Args: station (:obj:`str`): Станция. - type_ (:obj:`str`): Тип отправляемого фидбека. + type_ (:obj:`str`): Тип отправляемого отзыва. timestamp (:obj:`str` | :obj:`float` | :obj:`int`, optional): Текущее время и дата. from_ (:obj:`str`, optional): Откуда начато воспроизведение радио. batch_id (:obj:`str`, optional): Уникальный идентификатор партии треков. Возвращается при получении треков. @@ -1434,7 +1434,7 @@ class ClientAsync(YandexMusicObject): 3. Отправить фидбек о начале следующего трека (второй в цепочки). 4. Выполнить запрос получения треков. В ответе придёт новые треки или произойдёт сдвиг цепочки на 1 элемент. - Проход по цепочке до коцна не изучен. Часто встречаются дубликаты. + Проход по цепочке до конца не изучен. Часто встречаются дубликаты. Все официальные клиенты выполняют запросы с `settings2 = True`. @@ -2276,7 +2276,7 @@ class ClientAsync(YandexMusicObject): result = await self._request.get(url, params=params, *args, **kwargs) - # TODO судя по всему эндпоинт ещё возвращает рекламу после треков для пользователей без подписки. + # TODO (MarshalX) судя по всему ручка ещё возвращает рекламу после треков для пользователей без подписки. return ShotEvent.de_json(result.get('shot_event'), self) @log diff --git a/yandex_music/download_info.py b/yandex_music/download_info.py index 03ade66..17c8e5c 100644 --- a/yandex_music/download_info.py +++ b/yandex_music/download_info.py @@ -10,6 +10,8 @@ if TYPE_CHECKING: from yandex_music import Client from xml.dom.minicompat import NodeList +SIGN_SALT = 'XGRlBW9FXlekgbPrRHuSiA' + @model class DownloadInfo(YandexMusicObject): @@ -52,7 +54,7 @@ class DownloadInfo(YandexMusicObject): path = self._get_text_node_data(doc.getElementsByTagName('path')) ts = self._get_text_node_data(doc.getElementsByTagName('ts')) s = self._get_text_node_data(doc.getElementsByTagName('s')) - sign = md5(('XGRlBW9FXlekgbPrRHuSiA' + path[1::] + s).encode('utf-8')).hexdigest() + sign = md5((SIGN_SALT + path[1::] + s).encode('utf-8')).hexdigest() return f'https://{host}/get-mp3/{sign}/{ts}{path}' diff --git a/yandex_music/exceptions.py b/yandex_music/exceptions.py index ef892f4..3d128e3 100644 --- a/yandex_music/exceptions.py +++ b/yandex_music/exceptions.py @@ -8,6 +8,7 @@ class UnauthorizedError(YandexMusicError): """ +# TODO (MarshalX) На самом деле поиск еще происходит по кодеку class InvalidBitrateError(YandexMusicError): """Класс исключения, вызываемого при попытке загрузки трека с недоступным битрейтом. @@ -28,7 +29,7 @@ class NotFoundError(NetworkError): """Класс исключения, вызываемый в случае ответа от сервера со статус кодом 404.""" -# TimeoutError builtin. И не знаю хотим ли использовать его для синк и asyncio.TimeoutError для асинк +# TimeoutError builtin. Пока не знаю хотим ли использовать его для синхронной и asyncio.TimeoutError для асинхронной class TimedOutError(NetworkError): """Класс исключения, вызываемого для случаев истечения времени ожидания.""" diff --git a/yandex_music/experiments.py b/yandex_music/experiments.py index 5e4e81e..c2b55b6 100644 --- a/yandex_music/experiments.py +++ b/yandex_music/experiments.py @@ -10,7 +10,7 @@ if TYPE_CHECKING: @model class Experiments(YandexMusicObject): - """Класс, представляющий какие-то свистелки-перделки, флажки, режимы экспериментальных функций. + """Класс, представляющий какие-то свистелки и перделки, флажки, режимы экспериментальных функций. Attributes: client (:obj:`yandex_music.Client`): Клиент Yandex Music. @@ -35,7 +35,7 @@ class Experiments(YandexMusicObject): client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music. Returns: - :obj:`yandex_music.Experiments`: Какие-то свистелки-перделки, флажки, режимы экспериментальных функций. + :obj:`yandex_music.Experiments`: Какие-то свистелки и перделки, флажки, режимы экспериментальных функций. """ if not data: return None diff --git a/yandex_music/pager.py b/yandex_music/pager.py index 5c3b57c..c5d488a 100644 --- a/yandex_music/pager.py +++ b/yandex_music/pager.py @@ -9,7 +9,7 @@ if TYPE_CHECKING: @model class Pager(YandexMusicObject): - """Класс, представляющий пагинатор. + """Класс, представляющий пагинацию. Attributes: total (:obj:`int`): Всего треков. @@ -35,7 +35,7 @@ class Pager(YandexMusicObject): client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music. Returns: - :obj:`yandex_music.Pager`: Пагинатор. + :obj:`yandex_music.Pager`: Пагинация. """ if not data: return None