Добавлены настройки пользователя и их изменение
このコミットが含まれているのは:
コミット
8450d5937a
|
@ -0,0 +1,15 @@
|
||||||
|
Пакет yandex_music.account
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
|
||||||
|
yandex_music.account.status
|
||||||
|
yandex_music.account.account
|
||||||
|
yandex_music.account.passport_phone
|
||||||
|
yandex_music.account.plus
|
||||||
|
yandex_music.account.permissions
|
||||||
|
yandex_music.account.subscription
|
||||||
|
yandex_music.account.auto_renewable
|
||||||
|
yandex_music.account.product
|
||||||
|
yandex_music.account.price
|
||||||
|
yandex_music.account.user_settings
|
|
@ -0,0 +1,6 @@
|
||||||
|
yandex_music.UserSettings
|
||||||
|
=========================
|
||||||
|
|
||||||
|
.. autoclass:: yandex_music.UserSettings
|
||||||
|
:members:
|
||||||
|
:show-inheritance:
|
|
@ -8,7 +8,7 @@
|
||||||
yandex_music.utils
|
yandex_music.utils
|
||||||
yandex_music.genre
|
yandex_music.genre
|
||||||
yandex_music.track
|
yandex_music.track
|
||||||
yandex_music.status
|
yandex_music.account
|
||||||
yandex_music.likes
|
yandex_music.likes
|
||||||
yandex_music.album
|
yandex_music.album
|
||||||
yandex_music.search
|
yandex_music.search
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
Пакет yandex_music.status
|
|
||||||
=========================
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
|
|
||||||
yandex_music.status.status
|
|
||||||
yandex_music.status.account
|
|
||||||
yandex_music.status.passport_phone
|
|
||||||
yandex_music.status.plus
|
|
||||||
yandex_music.status.permissions
|
|
||||||
yandex_music.status.subscription
|
|
||||||
yandex_music.status.auto_renewable
|
|
||||||
yandex_music.status.product
|
|
||||||
yandex_music.status.price
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from yandex_music import UserSettings
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope='class')
|
||||||
|
def user_settings(shot):
|
||||||
|
return UserSettings(TestUserSettings.uid, TestUserSettings.last_fm_scrobbling_enabled,
|
||||||
|
TestUserSettings.shuffle_enabled, TestUserSettings.volume_percents, TestUserSettings.modified,
|
||||||
|
TestUserSettings.facebook_scrobbling_enabled, TestUserSettings.add_new_track_on_playlist_top,
|
||||||
|
TestUserSettings.user_music_visibility, TestUserSettings.user_social_visibility,
|
||||||
|
TestUserSettings.rbt_disabled, TestUserSettings.theme, TestUserSettings.promos_disabled,
|
||||||
|
TestUserSettings.auto_play_radio, TestUserSettings.ads_disabled, TestUserSettings.disk_enabled,
|
||||||
|
TestUserSettings.show_disk_tracks_in_library)
|
||||||
|
|
||||||
|
|
||||||
|
class TestUserSettings:
|
||||||
|
uid = 1130000002804400
|
||||||
|
last_fm_scrobbling_enabled = False
|
||||||
|
shuffle_enabled = False
|
||||||
|
volume_percents = 70
|
||||||
|
modified = '2020-01-25T22:52:21+00:00'
|
||||||
|
facebook_scrobbling_enabled = False
|
||||||
|
add_new_track_on_playlist_top = False
|
||||||
|
user_music_visibility = 'public'
|
||||||
|
user_social_visibility = 'public'
|
||||||
|
rbt_disabled = False
|
||||||
|
theme = 'black'
|
||||||
|
promos_disabled = True
|
||||||
|
auto_play_radio = True
|
||||||
|
ads_disabled = None
|
||||||
|
disk_enabled = False
|
||||||
|
show_disk_tracks_in_library = False
|
||||||
|
|
||||||
|
def test_expected_values(self, user_settings):
|
||||||
|
assert user_settings.uid == self.uid
|
||||||
|
assert user_settings.last_fm_scrobbling_enabled == self.last_fm_scrobbling_enabled
|
||||||
|
assert user_settings.shuffle_enabled == self.shuffle_enabled
|
||||||
|
assert user_settings.volume_percents == self.volume_percents
|
||||||
|
assert user_settings.modified == self.modified
|
||||||
|
assert user_settings.facebook_scrobbling_enabled == self.facebook_scrobbling_enabled
|
||||||
|
assert user_settings.add_new_track_on_playlist_top == self.add_new_track_on_playlist_top
|
||||||
|
assert user_settings.user_music_visibility == self.user_music_visibility
|
||||||
|
assert user_settings.user_social_visibility == self.user_social_visibility
|
||||||
|
assert user_settings.rbt_disabled == self.rbt_disabled
|
||||||
|
assert user_settings.theme == self.theme
|
||||||
|
assert user_settings.promos_disabled == self.promos_disabled
|
||||||
|
assert user_settings.auto_play_radio == self.auto_play_radio
|
||||||
|
assert user_settings.ads_disabled == self.ads_disabled
|
||||||
|
assert user_settings.disk_enabled == self.disk_enabled
|
||||||
|
assert user_settings.show_disk_tracks_in_library == self.show_disk_tracks_in_library
|
||||||
|
|
||||||
|
def test_de_json_none(self, client):
|
||||||
|
assert UserSettings.de_json({}, client) is None
|
||||||
|
|
||||||
|
def test_de_json_required(self, client):
|
||||||
|
json_dict = {'uid': self.uid, 'last_fm_scrobbling_enabled': self.last_fm_scrobbling_enabled,
|
||||||
|
'shuffle_enabled': self.shuffle_enabled, 'volume_percents': self.volume_percents,
|
||||||
|
'modified': self.modified, 'facebook_scrobbling_enabled': self.facebook_scrobbling_enabled,
|
||||||
|
'add_new_track_on_playlist_top': self.add_new_track_on_playlist_top,
|
||||||
|
'user_music_visibility': self.user_music_visibility,
|
||||||
|
'user_social_visibility': self.user_social_visibility, 'rbt_disabled': self.rbt_disabled,
|
||||||
|
'theme': self.theme, 'promos_disabled': self.promos_disabled,
|
||||||
|
'auto_play_radio': self.auto_play_radio}
|
||||||
|
user_settings = UserSettings.de_json(json_dict, client)
|
||||||
|
|
||||||
|
assert user_settings.uid == self.uid
|
||||||
|
assert user_settings.last_fm_scrobbling_enabled == self.last_fm_scrobbling_enabled
|
||||||
|
assert user_settings.shuffle_enabled == self.shuffle_enabled
|
||||||
|
assert user_settings.volume_percents == self.volume_percents
|
||||||
|
assert user_settings.modified == self.modified
|
||||||
|
assert user_settings.facebook_scrobbling_enabled == self.facebook_scrobbling_enabled
|
||||||
|
assert user_settings.add_new_track_on_playlist_top == self.add_new_track_on_playlist_top
|
||||||
|
assert user_settings.user_music_visibility == self.user_music_visibility
|
||||||
|
assert user_settings.user_social_visibility == self.user_social_visibility
|
||||||
|
assert user_settings.rbt_disabled == self.rbt_disabled
|
||||||
|
assert user_settings.theme == self.theme
|
||||||
|
assert user_settings.promos_disabled == self.promos_disabled
|
||||||
|
assert user_settings.auto_play_radio == self.auto_play_radio
|
||||||
|
|
||||||
|
def test_de_json_all(self, client):
|
||||||
|
json_dict = {'uid': self.uid, 'last_fm_scrobbling_enabled': self.last_fm_scrobbling_enabled,
|
||||||
|
'shuffle_enabled': self.shuffle_enabled, 'volume_percents': self.volume_percents,
|
||||||
|
'modified': self.modified, 'facebook_scrobbling_enabled': self.facebook_scrobbling_enabled,
|
||||||
|
'add_new_track_on_playlist_top': self.add_new_track_on_playlist_top,
|
||||||
|
'user_music_visibility': self.user_music_visibility,
|
||||||
|
'user_social_visibility': self.user_social_visibility, 'rbt_disabled': self.rbt_disabled,
|
||||||
|
'theme': self.theme, 'promos_disabled': self.promos_disabled,
|
||||||
|
'auto_play_radio': self.auto_play_radio, 'ads_disabled': self.ads_disabled,
|
||||||
|
'disk_enabled': self.disk_enabled, 'show_disk_tracks_in_library': self.show_disk_tracks_in_library}
|
||||||
|
user_settings = UserSettings.de_json(json_dict, client)
|
||||||
|
|
||||||
|
assert user_settings.uid == self.uid
|
||||||
|
assert user_settings.last_fm_scrobbling_enabled == self.last_fm_scrobbling_enabled
|
||||||
|
assert user_settings.shuffle_enabled == self.shuffle_enabled
|
||||||
|
assert user_settings.volume_percents == self.volume_percents
|
||||||
|
assert user_settings.modified == self.modified
|
||||||
|
assert user_settings.facebook_scrobbling_enabled == self.facebook_scrobbling_enabled
|
||||||
|
assert user_settings.add_new_track_on_playlist_top == self.add_new_track_on_playlist_top
|
||||||
|
assert user_settings.user_music_visibility == self.user_music_visibility
|
||||||
|
assert user_settings.user_social_visibility == self.user_social_visibility
|
||||||
|
assert user_settings.rbt_disabled == self.rbt_disabled
|
||||||
|
assert user_settings.theme == self.theme
|
||||||
|
assert user_settings.promos_disabled == self.promos_disabled
|
||||||
|
assert user_settings.auto_play_radio == self.auto_play_radio
|
||||||
|
assert user_settings.ads_disabled == self.ads_disabled
|
||||||
|
assert user_settings.disk_enabled == self.disk_enabled
|
||||||
|
assert user_settings.show_disk_tracks_in_library == self.show_disk_tracks_in_library
|
||||||
|
|
||||||
|
def test_equality(self):
|
||||||
|
a = UserSettings(self.uid, self.last_fm_scrobbling_enabled, self.shuffle_enabled, self.volume_percents,
|
||||||
|
self.modified, self.facebook_scrobbling_enabled, self.add_new_track_on_playlist_top,
|
||||||
|
self.user_music_visibility, self.user_social_visibility, self.rbt_disabled, self.theme,
|
||||||
|
self.promos_disabled, self.auto_play_radio, self.ads_disabled, self.disk_enabled,
|
||||||
|
self.show_disk_tracks_in_library)
|
||||||
|
b = UserSettings(self.uid, self.last_fm_scrobbling_enabled, self.shuffle_enabled, self.volume_percents,
|
||||||
|
self.modified, self.facebook_scrobbling_enabled, self.add_new_track_on_playlist_top,
|
||||||
|
'private', self.user_social_visibility, self.rbt_disabled, 'white',
|
||||||
|
self.promos_disabled, self.auto_play_radio, self.ads_disabled, True,
|
||||||
|
self.show_disk_tracks_in_library)
|
||||||
|
c = UserSettings(self.uid, self.last_fm_scrobbling_enabled, self.shuffle_enabled, self.volume_percents,
|
||||||
|
self.modified, self.facebook_scrobbling_enabled, self.add_new_track_on_playlist_top,
|
||||||
|
self.user_music_visibility, self.user_social_visibility, self.rbt_disabled, self.theme,
|
||||||
|
self.promos_disabled, self.auto_play_radio, self.ads_disabled, self.disk_enabled,
|
||||||
|
self.show_disk_tracks_in_library)
|
||||||
|
|
||||||
|
assert a != b != c
|
||||||
|
assert hash(a) != hash(b) != hash(c)
|
||||||
|
assert a is not b is not c
|
||||||
|
|
||||||
|
assert a == c
|
||||||
|
assert hash(a) == hash(c)
|
|
@ -4,15 +4,16 @@ from .settings import Settings
|
||||||
from .permission_alerts import PermissionAlerts
|
from .permission_alerts import PermissionAlerts
|
||||||
from .experiments import Experiments
|
from .experiments import Experiments
|
||||||
|
|
||||||
from .status.status import Status
|
from .account.status import Status
|
||||||
from .status.account import Account
|
from .account.account import Account
|
||||||
from .status.plus import Plus
|
from .account.plus import Plus
|
||||||
from .status.subscription import Subscription
|
from .account.user_settings import UserSettings
|
||||||
from .status.price import Price
|
from .account.subscription import Subscription
|
||||||
from .status.product import Product
|
from .account.price import Price
|
||||||
from .status.auto_renewable import AutoRenewable
|
from .account.product import Product
|
||||||
from .status.passport_phone import PassportPhone
|
from .account.auto_renewable import AutoRenewable
|
||||||
from .status.permissions import Permissions
|
from .account.passport_phone import PassportPhone
|
||||||
|
from .account.permissions import Permissions
|
||||||
|
|
||||||
from .album.album import Album
|
from .album.album import Album
|
||||||
from .album.label import Label
|
from .album.label import Label
|
||||||
|
@ -120,4 +121,4 @@ __all__ = ['YandexMusicObject', 'Client', 'Account', 'PassportPhone', 'Invocatio
|
||||||
'Icon', 'Images', 'Id', 'Station', 'Dashboard', 'RotorSettings', 'AdParams', 'Restrictions', 'Value', 'Enum',
|
'Icon', 'Images', 'Id', 'Station', 'Dashboard', 'RotorSettings', 'AdParams', 'Restrictions', 'Value', 'Enum',
|
||||||
'DiscreteScale', 'StationResult', 'Sequence', 'StationTracksResult', 'BriefInfo', 'Description',
|
'DiscreteScale', 'StationResult', 'Sequence', 'StationTracksResult', 'BriefInfo', 'Description',
|
||||||
'PlaylistId', 'Vinyl', 'Supplement', 'Lyrics', 'VideoSupplement', 'ArtistTracks', 'Pager', 'ArtistAlbums',
|
'PlaylistId', 'Vinyl', 'Supplement', 'Lyrics', 'VideoSupplement', 'ArtistTracks', 'Pager', 'ArtistAlbums',
|
||||||
'PlaylistAbsence', 'Shot', 'ShotEvent', 'ShotType', 'ShotData', 'SimilarTracks']
|
'PlaylistAbsence', 'Shot', 'ShotEvent', 'ShotType', 'ShotData', 'SimilarTracks', 'UserSettings']
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class Account(YandexMusicObject):
|
class Account(YandexMusicObject):
|
||||||
"""Класс предоставляющий основную информацию об аккаунте пользователя.
|
"""Класс, представляющий основную информацию об аккаунте пользователя.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
now (:obj:`str`): Текущая дата и время.
|
now (:obj:`str`): Текущая дата и время.
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class AutoRenewable(YandexMusicObject):
|
class AutoRenewable(YandexMusicObject):
|
||||||
"""Класс представляющий автопродление подписки.
|
"""Класс, представляющий автопродление подписки.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
expires (:obj:`str`): Дата истечения подписки.
|
expires (:obj:`str`): Дата истечения подписки.
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class PassportPhone(YandexMusicObject):
|
class PassportPhone(YandexMusicObject):
|
||||||
"""Класс представляющий номер телефона пользователя.
|
"""Класс, представляющий номер телефона пользователя.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
phone (:obj:`str`): Номер телефона.
|
phone (:obj:`str`): Номер телефона.
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class Permissions(YandexMusicObject):
|
class Permissions(YandexMusicObject):
|
||||||
"""Класс предоставляющий информацию о правах пользователя, их изначальных значениях и даты окончания.
|
"""Класс, представляющий информацию о правах пользователя, их изначальных значениях и даты окончания.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
until (:obj:`str`): Дата окончания прав.
|
until (:obj:`str`): Дата окончания прав.
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class Plus(YandexMusicObject):
|
class Plus(YandexMusicObject):
|
||||||
"""Класс представляющий Plus подписку.
|
"""Класс, представляющий Plus подписку.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
has_plus (:obj:`bool`): Наличие.
|
has_plus (:obj:`bool`): Наличие.
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class Price(YandexMusicObject):
|
class Price(YandexMusicObject):
|
||||||
"""Класс представляющий цену.
|
"""Класс, представляющий цену.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
amount (:obj:`int`): Количество единиц.
|
amount (:obj:`int`): Количество единиц.
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class Product(YandexMusicObject):
|
class Product(YandexMusicObject):
|
||||||
"""Класс представляющий продаваемый продукт.
|
"""Класс, представляющий продаваемый продукт.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
product_id (:obj:`str`): Уникальный идентификатор.
|
product_id (:obj:`str`): Уникальный идентификатор.
|
|
@ -7,19 +7,19 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class Status(YandexMusicObject):
|
class Status(YandexMusicObject):
|
||||||
"""Класс представляющий подробную информацию об аккаунте пользователя.
|
"""Класс, представляющий подробную информацию об аккаунте пользователя.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
account (:obj:`yandex_music.Account`): Объект класса :class:`yandex_music.Account` предоставляющий основную
|
account (:obj:`yandex_music.Account`): Объект класса :class:`yandex_music.Account` представляющий основную
|
||||||
информацию об аккаунте.
|
информацию об аккаунте.
|
||||||
permissions (:obj:`yandex_music.Permissions`): Объект класса :class:`yandex_music.Permissions` предоставляющий
|
permissions (:obj:`yandex_music.Permissions`): Объект класса :class:`yandex_music.Permissions` представляющий
|
||||||
информацию о правах пользователя.
|
информацию о правах пользователя.
|
||||||
subscription (:obj:`yandex_music.Subscription`): Объект класса :class:`yandex_music.Subscription` предоставляющий
|
subscription (:obj:`yandex_music.Subscription`): Объект класса :class:`yandex_music.Subscription` представляющий
|
||||||
информацию о подписках
|
информацию о подписках
|
||||||
cache_limit (:obj:`int`): Максимальное количество загруженных треков.
|
cache_limit (:obj:`int`): Максимальное количество загруженных треков.
|
||||||
subeditor (:obj:`bool`): Наличие статуса модератора проверки корректности информации.
|
subeditor (:obj:`bool`): Наличие статуса модератора проверки корректности информации.
|
||||||
subeditor_level (:obj:`int`): Уровень статуса модератора.
|
subeditor_level (:obj:`int`): Уровень статуса модератора.
|
||||||
plus (:obj:`yandex_music.Plus`): Объект класса :class:`yandex_music.Plus` предоставляющий информацию о Plus
|
plus (:obj:`yandex_music.Plus`): Объект класса :class:`yandex_music.Plus` представляющий информацию о Plus
|
||||||
подписке.
|
подписке.
|
||||||
default_email (:obj:`str`): Основной e-mail адрес аккаунта.
|
default_email (:obj:`str`): Основной e-mail адрес аккаунта.
|
||||||
skips_per_hour (:obj:`int`): Количество переключение треков на радио в час.
|
skips_per_hour (:obj:`int`): Количество переключение треков на радио в час.
|
||||||
|
@ -29,16 +29,16 @@ class Status(YandexMusicObject):
|
||||||
Music.
|
Music.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
account (:obj:`yandex_music.Account`): Объект класса :class:`yandex_music.Account` предоставляющий основную
|
account (:obj:`yandex_music.Account`): Объект класса :class:`yandex_music.Account` представляющий основную
|
||||||
информацию об аккаунте.
|
информацию об аккаунте.
|
||||||
permissions (:obj:`yandex_music.Permissions`): Объект класса :class:`yandex_music.Permissions` предоставляющий
|
permissions (:obj:`yandex_music.Permissions`): Объект класса :class:`yandex_music.Permissions` представляющий
|
||||||
информацию о правах пользователя.
|
информацию о правах пользователя.
|
||||||
subscription (:obj:`yandex_music.Subscription`): Объект класса :class:`yandex_music.Subscription` предоставляющий
|
subscription (:obj:`yandex_music.Subscription`): Объект класса :class:`yandex_music.Subscription` представляющий
|
||||||
информацию о подписках
|
информацию о подписках
|
||||||
cache_limit (:obj:`int`, optional): Максимальное количество загруженных треков.
|
cache_limit (:obj:`int`, optional): Максимальное количество загруженных треков.
|
||||||
subeditor (:obj:`bool`, optional): Наличие статуса модератора проверки корректности информации.
|
subeditor (:obj:`bool`, optional): Наличие статуса модератора проверки корректности информации.
|
||||||
subeditor_level (:obj:`int`, optional): Уровень статуса модератора.
|
subeditor_level (:obj:`int`, optional): Уровень статуса модератора.
|
||||||
plus (:obj:`yandex_music.Plus`, optional): Объект класса :class:`yandex_music.Plus` предоставляющий информацию о
|
plus (:obj:`yandex_music.Plus`, optional): Объект класса :class:`yandex_music.Plus` представляющий информацию о
|
||||||
Plus подписке.
|
Plus подписке.
|
||||||
default_email (:obj:`str`, optional): Основной e-mail адрес аккаунта.
|
default_email (:obj:`str`, optional): Основной e-mail адрес аккаунта.
|
||||||
skips_per_hour (:obj:`int`, optional): Количество переключение треков на радио в час.
|
skips_per_hour (:obj:`int`, optional): Количество переключение треков на радио в час.
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class Subscription(YandexMusicObject):
|
class Subscription(YandexMusicObject):
|
||||||
"""Класс предоставляющий информацию о подписках пользователя.
|
"""Класс, представляющий информацию о подписках пользователя.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
auto_renewable (:obj:`list` из :obj:`yandex_music.AutoRenewable`): Список объектов класса
|
auto_renewable (:obj:`list` из :obj:`yandex_music.AutoRenewable`): Список объектов класса
|
|
@ -0,0 +1,125 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
class UserSettings(YandexMusicObject):
|
||||||
|
"""Класс, представляющий настройки пользователя.
|
||||||
|
|
||||||
|
Note:
|
||||||
|
Доступные значения для поля `theme`: `white`, `black`.
|
||||||
|
|
||||||
|
Доступные значения для полей `user_music_visibility` и `user_social_visibility`: `private`, `public`.
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
`promos_disabled`, `ads_disabled`, `rbt_disabled` устарели и не работают.
|
||||||
|
|
||||||
|
`last_fm_scrobbling_enabled`, `facebook_scrobbling_enabled` выглядят устаревшими.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
uid (:obj:`int`): Уникальный идентификатор пользователя.
|
||||||
|
last_fm_scrobbling_enabled (:obj:`bool`): Скробблинг lastfm.
|
||||||
|
shuffle_enabled (:obj:`bool`): Переключать треки в случайном порядке.
|
||||||
|
volume_percents (:obj:`int`): Громкость звука в процентах.
|
||||||
|
modified (:obj:`str`): Дата изменения настроек.
|
||||||
|
facebook_scrobbling_enabled (:obj:`bool`): Скробблинг facebook.
|
||||||
|
add_new_track_on_playlist_top (:obj:`bool`): Добавлять новые треки в начало плейлиста.
|
||||||
|
user_music_visibility (:obj:`str`): Публичный доступ к моей фонотеке.
|
||||||
|
user_social_visibility (:obj:`str`): Показывать соцсети на странице.
|
||||||
|
rbt_disabled (:obj:`bool`): TODO (неиспользуемая фича).
|
||||||
|
theme (:obj:`str`): Тема оформления.
|
||||||
|
promos_disabled (:obj:`bool`): Не показывать рекламируемый контент).
|
||||||
|
auto_play_radio (:obj:`bool`): Бесконечный поток музыки.
|
||||||
|
ads_disabled (:obj:`bool`): Не показывать рекламу.
|
||||||
|
disk_enabled (:obj:`bool`): TODO.
|
||||||
|
show_disk_tracks_in_library (:obj:`bool`): Показывать локальные треки в библиотеке.
|
||||||
|
client (:obj:`yandex_music.Client`): Объект класса :class:`yandex_music.Client` представляющий клиент Yandex
|
||||||
|
Music.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
uid (:obj:`int`): Уникальный идентификатор пользователя.
|
||||||
|
last_fm_scrobbling_enabled (:obj:`bool`): Скробблинг lastfm.
|
||||||
|
shuffle_enabled (:obj:`bool`): Переключать треки в случайном порядке.
|
||||||
|
volume_percents (:obj:`int`): Громкость звука в процентах.
|
||||||
|
modified (:obj:`str`): Дата изменения настроек.
|
||||||
|
facebook_scrobbling_enabled (:obj:`bool`): Скробблинг facebook.
|
||||||
|
add_new_track_on_playlist_top (:obj:`bool`): Добавлять новые треки в начало плейлиста.
|
||||||
|
user_music_visibility (:obj:`str`): Публичный доступ к моей фонотеке.
|
||||||
|
user_social_visibility (:obj:`str`): Показывать соцсети на странице.
|
||||||
|
rbt_disabled (:obj:`bool`): TODO (неиспользуемая фича).
|
||||||
|
theme (:obj:`str`): Тема оформления.
|
||||||
|
promos_disabled (:obj:`bool`): Не показывать рекламируемый контент).
|
||||||
|
auto_play_radio (:obj:`bool`): Бесконечный поток музыки.
|
||||||
|
ads_disabled (:obj:`bool`, optional): Не показывать рекламу.
|
||||||
|
disk_enabled (:obj:`bool`, optional): TODO.
|
||||||
|
show_disk_tracks_in_library (:obj:`bool`, optional): Показывать локальные треки в библиотеке.
|
||||||
|
client (:obj:`yandex_music.Client`, optional): Объект класса :class:`yandex_music.Client` представляющий клиент
|
||||||
|
Yandex Music.
|
||||||
|
**kwargs: Произвольные ключевые аргументы полученные от API.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self,
|
||||||
|
uid: int,
|
||||||
|
last_fm_scrobbling_enabled: bool,
|
||||||
|
shuffle_enabled: bool,
|
||||||
|
volume_percents: int,
|
||||||
|
modified: str,
|
||||||
|
facebook_scrobbling_enabled: bool,
|
||||||
|
add_new_track_on_playlist_top: bool,
|
||||||
|
user_music_visibility: str,
|
||||||
|
user_social_visibility: str,
|
||||||
|
rbt_disabled: bool,
|
||||||
|
theme: str,
|
||||||
|
promos_disabled: bool,
|
||||||
|
auto_play_radio: bool,
|
||||||
|
ads_disabled: Optional[bool] = None,
|
||||||
|
disk_enabled: Optional[bool] = None,
|
||||||
|
show_disk_tracks_in_library: Optional[bool] = None,
|
||||||
|
client: Optional['Client'] = None,
|
||||||
|
**kwargs) -> None:
|
||||||
|
self.uid = uid
|
||||||
|
self.last_fm_scrobbling_enabled = last_fm_scrobbling_enabled
|
||||||
|
self.shuffle_enabled = shuffle_enabled
|
||||||
|
self.volume_percents = volume_percents
|
||||||
|
self.modified = modified
|
||||||
|
self.facebook_scrobbling_enabled = facebook_scrobbling_enabled
|
||||||
|
self.add_new_track_on_playlist_top = add_new_track_on_playlist_top
|
||||||
|
self.user_music_visibility = user_music_visibility
|
||||||
|
self.user_social_visibility = user_social_visibility
|
||||||
|
self.rbt_disabled = rbt_disabled
|
||||||
|
self.theme = theme
|
||||||
|
self.promos_disabled = promos_disabled
|
||||||
|
self.auto_play_radio = auto_play_radio
|
||||||
|
|
||||||
|
self.ads_disabled = ads_disabled
|
||||||
|
self.disk_enabled = disk_enabled
|
||||||
|
self.show_disk_tracks_in_library = show_disk_tracks_in_library
|
||||||
|
|
||||||
|
self.client = client
|
||||||
|
self._id_attrs = (self.uid, self.last_fm_scrobbling_enabled, self.shuffle_enabled, self.volume_percents,
|
||||||
|
self.modified, self.facebook_scrobbling_enabled, self.add_new_track_on_playlist_top,
|
||||||
|
self.user_music_visibility, self.user_social_visibility, self.rbt_disabled, self.theme,
|
||||||
|
self.promos_disabled, self.auto_play_radio, self.ads_disabled, self.disk_enabled,
|
||||||
|
self.show_disk_tracks_in_library)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def de_json(cls, data: dict, client: 'Client') -> Optional['UserSettings']:
|
||||||
|
"""Десериализация объекта.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
data (:obj:`dict`): Поля и значения десериализуемого объекта.
|
||||||
|
client (:obj:`yandex_music.Client`): Объект класса :class:`yandex_music.Client` представляющий клиент Yandex
|
||||||
|
Music.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
:obj:`yandex_music.UserSettings`: Объект класса :class:`yandex_music.UserSettings`.
|
||||||
|
"""
|
||||||
|
if not data:
|
||||||
|
return None
|
||||||
|
|
||||||
|
data = super(UserSettings, cls).de_json(data, client)
|
||||||
|
|
||||||
|
return cls(client=client, **data)
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class ArtistAlbums(YandexMusicObject):
|
class ArtistAlbums(YandexMusicObject):
|
||||||
"""Класс представляющий страницу списка альбомов артиста.
|
"""Класс, представляющий страницу списка альбомов артиста.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
albums (:obj:`list` из :obj:`yandex_music.Album`): Список альбомов артиста.
|
albums (:obj:`list` из :obj:`yandex_music.Album`): Список альбомов артиста.
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class ArtistTracks(YandexMusicObject):
|
class ArtistTracks(YandexMusicObject):
|
||||||
"""Класс представляющий страницу списка треков артиста.
|
"""Класс, представляющий страницу списка треков артиста.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
tracks (:obj:`list` из :obj:`yandex_music.Track`): Список треков артиста.
|
tracks (:obj:`list` из :obj:`yandex_music.Track`): Список треков артиста.
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
import logging
|
import logging
|
||||||
import functools
|
import functools
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Callable, Union, List, Optional
|
from typing import Callable, Union, List, Optional, Dict
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject, Status, Settings, PermissionAlerts, Experiments, Artist, Album, Playlist, \
|
from yandex_music import YandexMusicObject, Status, Settings, PermissionAlerts, Experiments, Artist, Album, Playlist, \
|
||||||
TracksList, Track, AlbumsLikes, ArtistsLikes, PlaylistsLikes, Feed, PromoCodeStatus, DownloadInfo, Search, \
|
TracksList, Track, AlbumsLikes, ArtistsLikes, PlaylistsLikes, Feed, PromoCodeStatus, DownloadInfo, Search, \
|
||||||
Suggestions, Landing, Genre, Dashboard, StationResult, StationTracksResult, BriefInfo, Supplement, ArtistTracks, \
|
Suggestions, Landing, Genre, Dashboard, StationResult, StationTracksResult, BriefInfo, Supplement, ArtistTracks, \
|
||||||
ArtistAlbums, ShotEvent, SimilarTracks
|
ArtistAlbums, ShotEvent, SimilarTracks, UserSettings
|
||||||
from yandex_music.utils.request import Request
|
from yandex_music.utils.request import Request
|
||||||
from yandex_music.utils.difference import Difference
|
from yandex_music.utils.difference import Difference
|
||||||
from yandex_music.exceptions import InvalidToken, Captcha
|
from yandex_music.exceptions import InvalidToken, Captcha
|
||||||
|
@ -48,17 +49,18 @@ def log(method):
|
||||||
|
|
||||||
|
|
||||||
class Client(YandexMusicObject):
|
class Client(YandexMusicObject):
|
||||||
"""Класс представляющий клиент Yandex Music.
|
"""Класс, представляющий клиент Yandex Music.
|
||||||
|
|
||||||
При `fetch_account_status = False` многие сокращения перестанут работать в связи с тем, что неоткуда будет взять
|
Note:
|
||||||
uid аккаунта для отправки запроса. Так же в большинстве методов придётся передавать uid явно.
|
При `fetch_account_status = False` многие сокращения перестанут работать в связи с тем, что неоткуда будет взять
|
||||||
|
uid аккаунта для отправки запроса. Так же в большинстве методов придётся передавать `uid` явно.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
logger (:obj:`logging.Logger`): Объект логера.
|
logger (:obj:`logging.Logger`): Объект логера.
|
||||||
token (:obj:`str`): Уникальный ключ для аутентификации.
|
token (:obj:`str`): Уникальный ключ для аутентификации.
|
||||||
base_url (:obj:`str`): Ссылка на API Yandex Music.
|
base_url (:obj:`str`): Ссылка на API Yandex Music.
|
||||||
oauth_url (:obj:`str`): Ссылка на OAuth Yandex Music.
|
oauth_url (:obj:`str`): Ссылка на OAuth Yandex Music.
|
||||||
me (:obj:`yandex_music.Status`): Объект класса :class:`yandex_music.Status` предоставляющего основную
|
me (:obj:`yandex_music.Status`): Объект класса :class:`yandex_music.Status` представляющего основную
|
||||||
информацию об аккаунте.
|
информацию об аккаунте.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -137,7 +139,8 @@ class Client(YandexMusicObject):
|
||||||
def from_token(cls, token: str, *args, **kwargs) -> 'Client':
|
def from_token(cls, token: str, *args, **kwargs) -> 'Client':
|
||||||
"""Инициализция клиента по токену.
|
"""Инициализция клиента по токену.
|
||||||
|
|
||||||
Ничем не отличается от Client(token). Так исторически сложилось.
|
Note:
|
||||||
|
Ничем не отличается от `Client(token)`. Так исторически сложилось.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
token (:obj:`str`, optional): Уникальный ключ для аутентификации.
|
token (:obj:`str`, optional): Уникальный ключ для аутентификации.
|
||||||
|
@ -226,7 +229,7 @@ class Client(YandexMusicObject):
|
||||||
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
:obj:`yandex_music.Status`: Объекта класса :class:`yandex_music.Status` предоставляющий информацию об
|
:obj:`yandex_music.Status`: Объекта класса :class:`yandex_music.Status` представляющий информацию об
|
||||||
аккаунте если валиден, иначе :obj:`None`.
|
аккаунте если валиден, иначе :obj:`None`.
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
|
@ -239,6 +242,63 @@ class Client(YandexMusicObject):
|
||||||
|
|
||||||
return Status.de_json(result, self)
|
return Status.de_json(result, self)
|
||||||
|
|
||||||
|
@log
|
||||||
|
def account_settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Settings]:
|
||||||
|
"""Получение настроек текущего пользователя.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
||||||
|
ответа от сервера вместо указанного при создании пула.
|
||||||
|
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
:obj:`yandex_music.UserSettings`: Объекта класса :class:`yandex_music.UserSettings` представляющий
|
||||||
|
настройки пользователя, иначе :obj:`None`.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
:class:`yandex_music.YandexMusicError`
|
||||||
|
"""
|
||||||
|
|
||||||
|
url = f'{self.base_url}/account/settings'
|
||||||
|
|
||||||
|
result = self._request.get(url, timeout=timeout, *args, **kwargs)
|
||||||
|
|
||||||
|
return UserSettings.de_json(result, self)
|
||||||
|
|
||||||
|
@log
|
||||||
|
def account_settings_set(self, param: str = None, value: Union[str, int, bool] = None,
|
||||||
|
data: Dict[str, Union[str, int, bool]] = None, timeout: Union[int, float] = None,
|
||||||
|
*args, **kwargs) -> Optional[Settings]:
|
||||||
|
"""Изменение настроек текущего пользователя.
|
||||||
|
|
||||||
|
Note:
|
||||||
|
Доступные названия параметров есть поля в классе :class:`yandex_music.UserSettings`, только в CamelCase.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
param (:obj:`str`): Название параметра для изменения.
|
||||||
|
value (:obj:`str` | :obj:`int` | :obj:`bool`): Значение параметра.
|
||||||
|
data (:obj:`dict`): Словарь параметров и значений для множественного изменения.
|
||||||
|
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
||||||
|
ответа от сервера вместо указанного при создании пула.
|
||||||
|
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
:obj:`yandex_music.UserSettings`: Объекта класса :class:`yandex_music.UserSettings` представляющий
|
||||||
|
настройки пользователя, иначе :obj:`None`.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
:class:`yandex_music.YandexMusicError`
|
||||||
|
"""
|
||||||
|
|
||||||
|
url = f'{self.base_url}/account/settings'
|
||||||
|
|
||||||
|
if not data:
|
||||||
|
data = {param: value}
|
||||||
|
|
||||||
|
result = self._request.post(url, data=data, timeout=timeout, *args, **kwargs)
|
||||||
|
|
||||||
|
return UserSettings.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Settings]:
|
def settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Settings]:
|
||||||
"""Получение предложений по покупке. Нет обязательных параметров.
|
"""Получение предложений по покупке. Нет обязательных параметров.
|
||||||
|
@ -249,7 +309,7 @@ class Client(YandexMusicObject):
|
||||||
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
:obj:`yandex_music.Settings`: Объекта класса :class:`yandex_music.Settings` предоставляющий информацию о
|
:obj:`yandex_music.Settings`: Объекта класса :class:`yandex_music.Settings` представляющий информацию о
|
||||||
предлагаемых продуктах, иначе :obj:`None`.
|
предлагаемых продуктах, иначе :obj:`None`.
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
|
@ -370,8 +430,9 @@ class Client(YandexMusicObject):
|
||||||
*args, **kwargs) -> Optional[Landing]:
|
*args, **kwargs) -> Optional[Landing]:
|
||||||
"""Получение лендинг-страницы содержащий блоки с новыми релизами, чартами, плейлистами с новинками и т.д.
|
"""Получение лендинг-страницы содержащий блоки с новыми релизами, чартами, плейлистами с новинками и т.д.
|
||||||
|
|
||||||
Поддерживаемые типы блоков: personalplaylists, promotions, new-releases, new-playlists, mixes,c hart, artists,
|
Note:
|
||||||
albums, playlists, play_contexts.
|
Поддерживаемые типы блоков: `personalplaylists`, `promotions`, `new-releases`, `new-playlists`, `mixes`,
|
||||||
|
`chart`, `artists`, `albums`, `playlists`, `play_contexts`.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
blocks (:obj:`str` | :obj:`list` из :obj:`str`): Блок или список блоков необходимых для выдачи.
|
blocks (:obj:`str` | :obj:`list` из :obj:`str`): Блок или список блоков необходимых для выдачи.
|
||||||
|
@ -455,7 +516,7 @@ class Client(YandexMusicObject):
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
:obj:`yandex_music.Supplement`: Объект класса `yandex_music.Supplement` представляющий дополнительную
|
:obj:`yandex_music.Supplement`: Объект класса `yandex_music.Supplement` представляющий дополнительную
|
||||||
информацию о треке.
|
информацию о треке.
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
:class:`yandex_music.YandexMusicError`
|
:class:`yandex_music.YandexMusicError`
|
||||||
|
@ -480,7 +541,7 @@ class Client(YandexMusicObject):
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
:obj:`yandex_music.SimilarTracks`: Объект класса `yandex_music.SimilarTracks` представляющий список похожих
|
:obj:`yandex_music.SimilarTracks`: Объект класса `yandex_music.SimilarTracks` представляющий список похожих
|
||||||
треков на другой трек.
|
треков на другой трек.
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
:class:`yandex_music.YandexMusicError`
|
:class:`yandex_music.YandexMusicError`
|
||||||
|
@ -651,14 +712,46 @@ class Client(YandexMusicObject):
|
||||||
return Suggestions.de_json(result, self)
|
return Suggestions.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists(self, kind: Union[List[Union[str, int]], str, int], user_id: str = None,
|
def users_settings(self, user_id: Union[str, int] = None, timeout: Union[int, float] = None,
|
||||||
|
*args, **kwargs) -> Optional[Settings]:
|
||||||
|
"""Получение настроек пользователя.
|
||||||
|
|
||||||
|
Note:
|
||||||
|
Для получения настроек пользователя нужно быть авторизованным или владеть `user_id`.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя чьи настройки хотим
|
||||||
|
получить.
|
||||||
|
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
||||||
|
ответа от сервера вместо указанного при создании пула.
|
||||||
|
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
:obj:`yandex_music.UserSettings`: Объекта класса :class:`yandex_music.UserSettings` представляющий
|
||||||
|
настройки пользователя, иначе :obj:`None`.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
:class:`yandex_music.YandexMusicError`
|
||||||
|
"""
|
||||||
|
|
||||||
|
if user_id is None and self.me is not None:
|
||||||
|
user_id = self.me.account.uid
|
||||||
|
|
||||||
|
url = f'{self.base_url}/users/{user_id}/settings'
|
||||||
|
|
||||||
|
result = self._request.get(url, timeout=timeout, *args, **kwargs)
|
||||||
|
|
||||||
|
return UserSettings.de_json(result.get('user_settings'), self)
|
||||||
|
|
||||||
|
@log
|
||||||
|
def users_playlists(self, kind: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> List[Playlist]:
|
timeout: Union[int, float] = None, *args, **kwargs) -> List[Playlist]:
|
||||||
"""Получение плейлиста или списка плейлистов по уникальным идентификаторам.
|
"""Получение плейлиста или списка плейлистов по уникальным идентификаторам.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
kind (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста
|
kind (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста
|
||||||
или их список.
|
или их список.
|
||||||
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
||||||
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
||||||
ответа от сервера вместо указанного при создании пула.
|
ответа от сервера вместо указанного при создании пула.
|
||||||
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
||||||
|
@ -685,14 +778,14 @@ class Client(YandexMusicObject):
|
||||||
return Playlist.de_list(result, self)
|
return Playlist.de_list(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_create(self, title: str, visibility: str = 'public', user_id: str = None,
|
def users_playlists_create(self, title: str, visibility: str = 'public', user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:
|
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:
|
||||||
"""Создание плейлиста.
|
"""Создание плейлиста.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
title (:obj:`str`): Название.
|
title (:obj:`str`): Название.
|
||||||
visibility (:obj:`str`, optional): Модификатор доступа.
|
visibility (:obj:`str`, optional): Модификатор доступа.
|
||||||
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
||||||
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
||||||
ответа от сервера вместо указанного при создании пула.
|
ответа от сервера вместо указанного при создании пула.
|
||||||
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
||||||
|
@ -720,13 +813,13 @@ class Client(YandexMusicObject):
|
||||||
return Playlist.de_json(result, self)
|
return Playlist.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_delete(self, kind: Union[str, int], user_id: str = None,
|
def users_playlists_delete(self, kind: Union[str, int], user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
||||||
"""Удаление плейлиста.
|
"""Удаление плейлиста.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
|
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
|
||||||
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
||||||
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
||||||
ответа от сервера вместо указанного при создании пула.
|
ответа от сервера вместо указанного при создании пула.
|
||||||
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
||||||
|
@ -748,14 +841,14 @@ class Client(YandexMusicObject):
|
||||||
return result == 'ok'
|
return result == 'ok'
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_name(self, kind: Union[str, int], name: str, user_id: str = None,
|
def users_playlists_name(self, kind: Union[str, int], name: str, user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:
|
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:
|
||||||
"""Изменение названия плейлиста.
|
"""Изменение названия плейлиста.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
|
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
|
||||||
name (:obj:`str`): Новое название.
|
name (:obj:`str`): Новое название.
|
||||||
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
||||||
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
||||||
ответа от сервера вместо указанного при создании пула.
|
ответа от сервера вместо указанного при создании пула.
|
||||||
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
||||||
|
@ -778,16 +871,17 @@ class Client(YandexMusicObject):
|
||||||
return Playlist.de_json(result, self)
|
return Playlist.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_visibility(self, kind: Union[str, int], visibility: str, user_id: str = None,
|
def users_playlists_visibility(self, kind: Union[str, int], visibility: str, user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:
|
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:
|
||||||
"""Изменение видимости плейлиста.
|
"""Изменение видимости плейлиста.
|
||||||
|
|
||||||
Видимость (visibility) может быть задана только одним из двух значений: private, public.
|
Note:
|
||||||
|
Видимость (`visibility`) может быть задана только одним из двух значений: `private`, `public`.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
|
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
|
||||||
visibility (:obj:`str`): Новое название.
|
visibility (:obj:`str`): Новое название.
|
||||||
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
||||||
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
||||||
ответа от сервера вместо указанного при создании пула.
|
ответа от сервера вместо указанного при создании пула.
|
||||||
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
||||||
|
@ -810,18 +904,21 @@ class Client(YandexMusicObject):
|
||||||
return Playlist.de_json(result, self)
|
return Playlist.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_change(self, kind: Union[str, int], diff: str, revision: int = 1, user_id: str = None,
|
def users_playlists_change(self, kind: Union[str, int], diff: str, revision: int = 1,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:
|
user_id: Union[str, int] = None, timeout: Union[int, float] = None,
|
||||||
|
*args, **kwargs) -> Optional[Playlist]:
|
||||||
"""Изменение плейлиста.
|
"""Изменение плейлиста.
|
||||||
|
|
||||||
Для получения отличий есть вспомогательный класс :class:`from yandex_music.utils.difference.Difference`.
|
Note:
|
||||||
Так же существуют уже готовые методы-обёртки над операциями.
|
Для получения отличий есть вспомогательный класс :class:`yandex_music.utils.difference.Difference`.
|
||||||
|
|
||||||
|
Так же существуют уже готовые методы-обёртки над операциями.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
|
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
|
||||||
revision (:obj:`int`): TODO.
|
revision (:obj:`int`): TODO.
|
||||||
diff (:obj:`str`): JSON представления отличий старого и нового плейлиста.
|
diff (:obj:`str`): JSON представления отличий старого и нового плейлиста.
|
||||||
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
||||||
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
||||||
ответа от сервера вместо указанного при создании пула.
|
ответа от сервера вместо указанного при создании пула.
|
||||||
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
||||||
|
@ -851,11 +948,12 @@ class Client(YandexMusicObject):
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_insert_track(self, kind: Union[str, int], track_id: Union[str, int], album_id: Union[str, int],
|
def users_playlists_insert_track(self, kind: Union[str, int], track_id: Union[str, int], album_id: Union[str, int],
|
||||||
at: int = 0, revision: int = 1, user_id: str = None,
|
at: int = 0, revision: int = 1, user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:
|
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:
|
||||||
"""Добавление трека в плейлист.
|
"""Добавление трека в плейлист.
|
||||||
|
|
||||||
Трек можно вставить с любое место плейлиста задав индекс вставки (аргумент at).
|
Note:
|
||||||
|
Трек можно вставить с любое место плейлиста задав индекс вставки (аргумент `at`).
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
|
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
|
||||||
|
@ -863,7 +961,7 @@ class Client(YandexMusicObject):
|
||||||
album_id (:obj:`str` | :obj:`int`): Уникальный идентификатор альбома.
|
album_id (:obj:`str` | :obj:`int`): Уникальный идентификатор альбома.
|
||||||
at (:obj:`int`): Индекс для вставки.
|
at (:obj:`int`): Индекс для вставки.
|
||||||
revision (:obj:`int`): TODO.
|
revision (:obj:`int`): TODO.
|
||||||
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
||||||
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
||||||
ответа от сервера вместо указанного при создании пула.
|
ответа от сервера вместо указанного при создании пула.
|
||||||
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
||||||
|
@ -885,18 +983,19 @@ class Client(YandexMusicObject):
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_delete_track(self, kind: Union[str, int], from_: int, to: int, revision: int = 1,
|
def users_playlists_delete_track(self, kind: Union[str, int], from_: int, to: int, revision: int = 1,
|
||||||
user_id: str = None, timeout: Union[int, float] = None,
|
user_id: Union[str, int] = None, timeout: Union[int, float] = None,
|
||||||
*args, **kwargs) -> Optional[Playlist]:
|
*args, **kwargs) -> Optional[Playlist]:
|
||||||
"""Удаление треков из плейлиста.
|
"""Удаление треков из плейлиста.
|
||||||
|
|
||||||
Для удаление необходимо указать границы с какого по какой элемент (трек) удалить.
|
Note:
|
||||||
|
Для удаление необходимо указать границы с какого по какой элемент (трек) удалить.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
|
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
|
||||||
from_ (:obj:`int`): С какого индекса.
|
from_ (:obj:`int`): С какого индекса.
|
||||||
to (:obj:`int`): По какой индекс.
|
to (:obj:`int`): По какой индекс.
|
||||||
revision (:obj:`int`): TODO.
|
revision (:obj:`int`): TODO.
|
||||||
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
|
||||||
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
||||||
ответа от сервера вместо указанного при создании пула.
|
ответа от сервера вместо указанного при создании пула.
|
||||||
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
|
||||||
|
@ -920,7 +1019,8 @@ class Client(YandexMusicObject):
|
||||||
def rotor_account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Status]:
|
def rotor_account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Status]:
|
||||||
"""Получение статуса пользователя с дополнителньыми полями.
|
"""Получение статуса пользователя с дополнителньыми полями.
|
||||||
|
|
||||||
Данный статус отличается от обычного наличием дополнительных полей, например, `skips_per_hour`.
|
Note:
|
||||||
|
Данный статус отличается от обычного наличием дополнительных полей, например, `skips_per_hour`.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
|
||||||
|
@ -970,7 +1070,9 @@ class Client(YandexMusicObject):
|
||||||
*args, **kwargs) -> List[StationResult]:
|
*args, **kwargs) -> List[StationResult]:
|
||||||
"""Получение всех радиостанций с настройками пользователя.
|
"""Получение всех радиостанций с настройками пользователя.
|
||||||
|
|
||||||
Чтобы определить что за тип станции (жанры, настроения, занятие и т.д.) необходимо смотреть в пол `id_for_from`.
|
Note:
|
||||||
|
Чтобы определить что за тип станции (жанры, настроения, занятие и т.д.) необходимо смотреть в поле
|
||||||
|
`id_for_from`.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
language (:obj:`str`): Язык, на котором будет информация о станциях.
|
language (:obj:`str`): Язык, на котором будет информация о станциях.
|
||||||
|
@ -999,11 +1101,14 @@ class Client(YandexMusicObject):
|
||||||
*args, **kwargs) -> bool:
|
*args, **kwargs) -> bool:
|
||||||
"""Отправка ответной реакции на происходящее при прослушивании радио.
|
"""Отправка ответной реакции на происходящее при прослушивании радио.
|
||||||
|
|
||||||
Сообщения о начале прослушивания радио, начале и конце трека, его пропуска.
|
Note:
|
||||||
|
Сообщения о начале прослушивания радио, начале и конце трека, его пропуска.
|
||||||
|
|
||||||
Известные типы фидбека: `radioStarted`, `trackStarted`, `trackFinished`, `skip`.
|
Известные типы фидбека: `radioStarted`, `trackStarted`, `trackFinished`, `skip`.
|
||||||
Пример `station`: `user:onyourwave`, `genre:allrock`.
|
|
||||||
Пример `from_`: `mobile-radio-user-123456789`.
|
Пример `station`: `user:onyourwave`, `genre:allrock`.
|
||||||
|
|
||||||
|
Пример `from_`: `mobile-radio-user-123456789`.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
station (:obj:`str`): Станция.
|
station (:obj:`str`): Станция.
|
||||||
|
@ -1059,6 +1164,12 @@ class Client(YandexMusicObject):
|
||||||
"""Сокращение для::
|
"""Сокращение для::
|
||||||
|
|
||||||
client.rotor_station_feedback(station, 'radioStarted', timestamp, from, *args, **kwargs)
|
client.rotor_station_feedback(station, 'radioStarted', timestamp, from, *args, **kwargs)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
:obj:`bool`: :obj:`True` при успешном выполнении запроса, иначе :obj:`False`.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
:class:`yandex_music.YandexMusicError`
|
||||||
"""
|
"""
|
||||||
return self.rotor_station_feedback(station, 'radioStarted', timestamp, from_=from_, batch_id=batch_id,
|
return self.rotor_station_feedback(station, 'radioStarted', timestamp, from_=from_, batch_id=batch_id,
|
||||||
timeout=timeout, *args, **kwargs)
|
timeout=timeout, *args, **kwargs)
|
||||||
|
@ -1070,6 +1181,12 @@ class Client(YandexMusicObject):
|
||||||
"""Сокращение для::
|
"""Сокращение для::
|
||||||
|
|
||||||
client.rotor_station_feedback(station, 'trackStarted', timestamp, track_id, *args, **kwargs)
|
client.rotor_station_feedback(station, 'trackStarted', timestamp, track_id, *args, **kwargs)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
:obj:`bool`: :obj:`True` при успешном выполнении запроса, иначе :obj:`False`.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
:class:`yandex_music.YandexMusicError`
|
||||||
"""
|
"""
|
||||||
return self.rotor_station_feedback(station, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id,
|
return self.rotor_station_feedback(station, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id,
|
||||||
timeout=timeout, *args, **kwargs)
|
timeout=timeout, *args, **kwargs)
|
||||||
|
@ -1082,7 +1199,13 @@ class Client(YandexMusicObject):
|
||||||
"""Сокращение для::
|
"""Сокращение для::
|
||||||
|
|
||||||
client.rotor_station_feedback(station, 'trackFinished', timestamp, track_id, total_played_seconds,
|
client.rotor_station_feedback(station, 'trackFinished', timestamp, track_id, total_played_seconds,
|
||||||
*args, **kwargs)
|
*args, **kwargs)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
:obj:`bool`: :obj:`True` при успешном выполнении запроса, иначе :obj:`False`.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
:class:`yandex_music.YandexMusicError`
|
||||||
"""
|
"""
|
||||||
return self.rotor_station_feedback(station, 'trackFinished', timestamp, track_id=track_id,
|
return self.rotor_station_feedback(station, 'trackFinished', timestamp, track_id=track_id,
|
||||||
total_played_seconds=total_played_seconds, batch_id=batch_id,
|
total_played_seconds=total_played_seconds, batch_id=batch_id,
|
||||||
|
@ -1096,7 +1219,13 @@ class Client(YandexMusicObject):
|
||||||
"""Сокращение для::
|
"""Сокращение для::
|
||||||
|
|
||||||
client.rotor_station_feedback(station, 'skip', timestamp, track_id, total_played_seconds,
|
client.rotor_station_feedback(station, 'skip', timestamp, track_id, total_played_seconds,
|
||||||
*args, **kwargs)
|
*args, **kwargs)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
:obj:`bool`: :obj:`True` при успешном выполнении запроса, иначе :obj:`False`.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
:class:`yandex_music.YandexMusicError`
|
||||||
"""
|
"""
|
||||||
return self.rotor_station_feedback(station, 'skip', timestamp, track_id=track_id,
|
return self.rotor_station_feedback(station, 'skip', timestamp, track_id=track_id,
|
||||||
total_played_seconds=total_played_seconds, batch_id=batch_id,
|
total_played_seconds=total_played_seconds, batch_id=batch_id,
|
||||||
|
@ -1132,13 +1261,14 @@ class Client(YandexMusicObject):
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
||||||
"""Изменение настроек определённой станции.
|
"""Изменение настроек определённой станции.
|
||||||
|
|
||||||
Доступные значения для `mood_energy`: `fun`, `active`, `calm`, `sad`, `all`.
|
Note:
|
||||||
Доступные значения для `diversity`: `favorite`, `popular`, `discover`, `default`.
|
Доступные значения для `mood_energy`: `fun`, `active`, `calm`, `sad`, `all`.
|
||||||
Доступные значения для `language`: `not-russian`, `russian`, `any`.
|
|
||||||
|
|
||||||
У станций в `restrictions` есть Enum'ы, а в них `possible_values` - доступные значения для поля.
|
Доступные значения для `diversity`: `favorite`, `popular`, `discover`, `default`.
|
||||||
|
|
||||||
Не некоторых аккаунтах не меняется язык...
|
Доступные значения для `language`: `not-russian`, `russian`, `any`.
|
||||||
|
|
||||||
|
У станций в `restrictions` есть Enum'ы, а в них `possible_values` - доступные значения для поля.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
station (:obj:`str`): Станция.
|
station (:obj:`str`): Станция.
|
||||||
|
@ -1175,15 +1305,17 @@ class Client(YandexMusicObject):
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[StationTracksResult]:
|
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[StationTracksResult]:
|
||||||
"""Получение цепочки треков определённой станции.
|
"""Получение цепочки треков определённой станции.
|
||||||
|
|
||||||
Для продолжения цепочки треков необходимо:
|
Note:
|
||||||
1. Передавать ID трека, что был до этого (первый в цепочки).
|
Для продолжения цепочки треков необходимо:
|
||||||
2. Отправить фидбек о конче или скипе трека, что был передан в `queue`.
|
|
||||||
3. Отправить фидбек о начале следующего трека (второй в цепочки).
|
|
||||||
4. Выполнить запрос получения треков. В ответе придёт новые треки или произойдёт сдвиг цепочки на 1 элемент.
|
|
||||||
|
|
||||||
Проход по цепочке до коцна не изучен. Часто встречаются дубликаты.
|
1. Передавать `ID` трека, что был до этого (первый в цепочки).
|
||||||
|
2. Отправить фидбек о конче или скипе трека, что был передан в `queue`.
|
||||||
|
3. Отправить фидбек о начале следующего трека (второй в цепочки).
|
||||||
|
4. Выполнить запрос получения треков. В ответе придёт новые треки или произойдёт сдвиг цепочки на 1 элемент.
|
||||||
|
|
||||||
Все официальные клиенты выполняют запросы с `settings2 = True`.
|
Проход по цепочке до коцна не изучен. Часто встречаются дубликаты.
|
||||||
|
|
||||||
|
Все официальные клиенты выполняют запросы с `settings2 = True`.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
station (:obj:`str`): Станция.
|
station (:obj:`str`): Станция.
|
||||||
|
@ -1261,7 +1393,8 @@ class Client(YandexMusicObject):
|
||||||
*args, **kwargs) -> Optional[ArtistAlbums]:
|
*args, **kwargs) -> Optional[ArtistAlbums]:
|
||||||
"""Получение альбомов артиста.
|
"""Получение альбомов артиста.
|
||||||
|
|
||||||
Известные значения для sort_by: year, rating.
|
Note:
|
||||||
|
Известные значения для `sort_by`: `year`, `rating`.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
artist_id (:obj:`str` | :obj:`int`): Уникальный идентификатор артиста.
|
artist_id (:obj:`str` | :obj:`int`): Уникальный идентификатор артиста.
|
||||||
|
@ -1476,15 +1609,17 @@ class Client(YandexMusicObject):
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[ShotEvent]:
|
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[ShotEvent]:
|
||||||
"""Получение рекламы или шота от Алисы после трека.
|
"""Получение рекламы или шота от Алисы после трека.
|
||||||
|
|
||||||
При получения шота от Алисы `prev_track_id` можно не указывать.
|
Note:
|
||||||
|
При получения шота от Алисы `prev_track_id` можно не указывать.
|
||||||
|
|
||||||
Если `context = 'playlist'`, то в `context_item` необходимо передать `{OWNER_PLAYLIST}:{ID_PLAYLIST}`.
|
Если `context = 'playlist'`, то в `context_item` необходимо передать `{OWNER_PLAYLIST}:{ID_PLAYLIST}`.
|
||||||
Плейлист с Алисой имеет владельца с `id = 940441070`.
|
Плейлист с Алисой имеет владельца с `id = 940441070`.
|
||||||
|
|
||||||
ID плейлиста можно получить из блоков landing'a. Получить шот чужого плейлиста нельзя.
|
ID плейлиста можно получить из блоков landing'a. Получить шот чужого плейлиста нельзя.
|
||||||
|
|
||||||
Известные значения `context`: `playlist`.
|
Известные значения `context`: `playlist`.
|
||||||
Известные значения `types`: `shot`, `ad`.
|
|
||||||
|
Известные значения `types`: `shot`, `ad`.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
prev_track_id (:obj:`str` | :obj:`int`): Уникальный идентификатор предыдущего трека.
|
prev_track_id (:obj:`str` | :obj:`int`): Уникальный идентификатор предыдущего трека.
|
||||||
|
@ -1499,7 +1634,7 @@ class Client(YandexMusicObject):
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
:obj:`yandex_music.ShotEvent`: Объекта класса :class:`yandex_music.ShotEvent`
|
:obj:`yandex_music.ShotEvent`: Объекта класса :class:`yandex_music.ShotEvent`
|
||||||
представляющий шоты от Алисы, иначе :obj:`None`.
|
представляющий шоты от Алисы, иначе :obj:`None`.
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
:class:`yandex_music.YandexMusicError`
|
:class:`yandex_music.YandexMusicError`
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class Cover(YandexMusicObject):
|
class Cover(YandexMusicObject):
|
||||||
"""Класс представляющий обложку.
|
"""Класс, представляющий обложку.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
type (:obj:`str`): Тип обложки.
|
type (:obj:`str`): Тип обложки.
|
||||||
|
|
|
@ -11,7 +11,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class DownloadInfo(YandexMusicObject):
|
class DownloadInfo(YandexMusicObject):
|
||||||
"""Класс представляющий информацию о вариантах загрузки трека.
|
"""Класс, представляющий информацию о вариантах загрузки трека.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
codec (:obj:`str`): Кодек аудиофайла.
|
codec (:obj:`str`): Кодек аудиофайла.
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class Icon(YandexMusicObject):
|
class Icon(YandexMusicObject):
|
||||||
"""Класс представляющий иконку.
|
"""Класс, представляющий иконку.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
background_color (:obj:`str`): Цвет заднего фона в HEX.
|
background_color (:obj:`str`): Цвет заднего фона в HEX.
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class InvocationInfo(YandexMusicObject):
|
class InvocationInfo(YandexMusicObject):
|
||||||
"""Класс представляющий информацию о запросе.
|
"""Класс, представляющий информацию о запросе.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
hostname (:obj:`str`): Имя удалённого сервера.
|
hostname (:obj:`str`): Имя удалённого сервера.
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class Pager(YandexMusicObject):
|
class Pager(YandexMusicObject):
|
||||||
"""Класс представляющий пагинатор.
|
"""Класс, представляющий пагинатор.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
total (:obj:`int`): Всего треков.
|
total (:obj:`int`): Всего треков.
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class PermissionAlerts(YandexMusicObject):
|
class PermissionAlerts(YandexMusicObject):
|
||||||
"""Класс представляющий оповещения.
|
"""Класс, представляющий оповещения.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
alerts (:obj:`list` из :obj:`str`): Список оповещений.
|
alerts (:obj:`list` из :obj:`str`): Список оповещений.
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class PlaylistAbsence(YandexMusicObject):
|
class PlaylistAbsence(YandexMusicObject):
|
||||||
"""Класс представляющий причину отсутствия плейлиста.
|
"""Класс, представляющий причину отсутствия плейлиста.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
kind (:obj:`int`): Уникальный идентификатор плейлиста.
|
kind (:obj:`int`): Уникальный идентификатор плейлиста.
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class User(YandexMusicObject):
|
class User(YandexMusicObject):
|
||||||
"""Класс представляющий пользователя.
|
"""Класс, представляющий пользователя.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
uid (:obj:`int`): Идентификатор пользователя.
|
uid (:obj:`int`): Идентификатор пользователя.
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class PromoCodeStatus(YandexMusicObject):
|
class PromoCodeStatus(YandexMusicObject):
|
||||||
"""Класс представляющий статус активации промо-кода.
|
"""Класс, представляющий статус активации промо-кода.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
status (:obj:`str`): Статус операции.
|
status (:obj:`str`): Статус операции.
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class Search(YandexMusicObject):
|
class Search(YandexMusicObject):
|
||||||
"""Класс представляющий результаты поиска.
|
"""Класс, представляющий результаты поиска.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
search_request_id (:obj:`str`): ID запроса.
|
search_request_id (:obj:`str`): ID запроса.
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class Settings(YandexMusicObject):
|
class Settings(YandexMusicObject):
|
||||||
"""Класс представляющий предложения по покупке.
|
"""Класс, представляющий предложения по покупке.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
in_app_products (:obj:`list` из :obj:`yandex_music.Product`): Список объектов класса
|
in_app_products (:obj:`list` из :obj:`yandex_music.Product`): Список объектов класса
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class TrackShort(YandexMusicObject):
|
class TrackShort(YandexMusicObject):
|
||||||
"""Класс представляющий укороченную версию трека с неполными данными.
|
"""Класс, представляющий укороченную версию трека с неполными данными.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
id (:obj:`str`): Уникальный идентификатор трека.
|
id (:obj:`str`): Уникальный идентификатор трека.
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class TracksList(YandexMusicObject):
|
class TracksList(YandexMusicObject):
|
||||||
"""Класс представляющий список треков.
|
"""Класс, представляющий список треков.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
uid (:obj:`int`): Уникальный идентификатор пользователя.
|
uid (:obj:`int`): Уникальный идентификатор пользователя.
|
||||||
|
|
|
@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class CaptchaResponse(YandexMusicObject):
|
class CaptchaResponse(YandexMusicObject):
|
||||||
"""Класс представляющий ответ сервера с запросом на ввод капчи.
|
"""Класс, представляющий ответ сервера с запросом на ввод капчи.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
x_captcha_url (:obj:`str`): Ссылка на изображение с капчей.
|
x_captcha_url (:obj:`str`): Ссылка на изображение с капчей.
|
||||||
|
|
|
@ -26,7 +26,7 @@ logging.getLogger('urllib3').setLevel(logging.WARNING)
|
||||||
|
|
||||||
|
|
||||||
class Request:
|
class Request:
|
||||||
"""Вспомогателньный класс для yandex_music предоставляющий методы для выполнения POST и GET запросов, скачивания
|
"""Вспомогателньный класс для yandex_music представляющий методы для выполнения POST и GET запросов, скачивания
|
||||||
файлов.
|
файлов.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
読み込み中…
新しいイシューから参照