|
|
@ -309,7 +309,7 @@ class YandexMusicAlbumIE(YandexMusicPlaylistBaseIE):
|
|
|
|
class YandexMusicPlaylistIE(YandexMusicPlaylistBaseIE):
|
|
|
|
class YandexMusicPlaylistIE(YandexMusicPlaylistBaseIE):
|
|
|
|
IE_NAME = 'yandexmusic:playlist'
|
|
|
|
IE_NAME = 'yandexmusic:playlist'
|
|
|
|
IE_DESC = 'Яндекс.Музыка - Плейлист'
|
|
|
|
IE_DESC = 'Яндекс.Музыка - Плейлист'
|
|
|
|
_VALID_URL = rf'{YandexMusicBaseIE._VALID_URL_BASE}/users/(?P<user>[^/]+)/playlists/(?P<id>\d+)'
|
|
|
|
_VALID_URL = rf'{YandexMusicBaseIE._VALID_URL_BASE}/(?:users/(?P<user>[^/]+)/playlists/(?P<id>\d+)|playlists/(?P<uuid>[0-9a-z-]+))'
|
|
|
|
|
|
|
|
|
|
|
|
_TESTS = [{
|
|
|
|
_TESTS = [{
|
|
|
|
'url': 'http://music.yandex.ru/users/music.partners/playlists/1245',
|
|
|
|
'url': 'http://music.yandex.ru/users/music.partners/playlists/1245',
|
|
|
@ -320,6 +320,9 @@ class YandexMusicPlaylistIE(YandexMusicPlaylistBaseIE):
|
|
|
|
},
|
|
|
|
},
|
|
|
|
'playlist_count': 5,
|
|
|
|
'playlist_count': 5,
|
|
|
|
# 'skip': 'Travis CI servers blocked by YandexMusic',
|
|
|
|
# 'skip': 'Travis CI servers blocked by YandexMusic',
|
|
|
|
|
|
|
|
}, {
|
|
|
|
|
|
|
|
'url': 'https://music.yandex.ru/playlists/2042ead9-189e-094a-b8d9-d6c8cd0ba35c',
|
|
|
|
|
|
|
|
'only_matching': True,
|
|
|
|
}, {
|
|
|
|
}, {
|
|
|
|
'url': 'https://music.yandex.ru/users/ya.playlist/playlists/1036',
|
|
|
|
'url': 'https://music.yandex.ru/users/ya.playlist/playlists/1036',
|
|
|
|
'only_matching': True,
|
|
|
|
'only_matching': True,
|
|
|
@ -337,19 +340,33 @@ class YandexMusicPlaylistIE(YandexMusicPlaylistBaseIE):
|
|
|
|
|
|
|
|
|
|
|
|
def _real_extract(self, url):
|
|
|
|
def _real_extract(self, url):
|
|
|
|
mobj = self._match_valid_url(url)
|
|
|
|
mobj = self._match_valid_url(url)
|
|
|
|
|
|
|
|
print(mobj)
|
|
|
|
tld = mobj.group('tld')
|
|
|
|
tld = mobj.group('tld')
|
|
|
|
user = mobj.group('user')
|
|
|
|
uuid = mobj.group('uuid')
|
|
|
|
playlist_id = mobj.group('id')
|
|
|
|
print(uuid)
|
|
|
|
|
|
|
|
|
|
|
|
playlist = self._call_api(
|
|
|
|
if uuid:
|
|
|
|
'playlist', tld, url, playlist_id, 'Downloading playlist JSON', {
|
|
|
|
playlist_id = uuid
|
|
|
|
'owner': user,
|
|
|
|
user = None
|
|
|
|
'kinds': playlist_id,
|
|
|
|
playlist = self._call_api(
|
|
|
|
'light': 'true',
|
|
|
|
'playlist-by-uid', tld, url, uuid, 'Downloading playlist JSON', {
|
|
|
|
'lang': tld,
|
|
|
|
'uid': uuid,
|
|
|
|
'external-domain': f'music.yandex.{tld}',
|
|
|
|
'light': 'true',
|
|
|
|
'overembed': 'false',
|
|
|
|
'lang': tld,
|
|
|
|
})['playlist']
|
|
|
|
'external-domain': f'music.yandex.{tld}',
|
|
|
|
|
|
|
|
})['playlist']
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
user = mobj.group('user')
|
|
|
|
|
|
|
|
playlist_id = mobj.group('id')
|
|
|
|
|
|
|
|
playlist = self._call_api(
|
|
|
|
|
|
|
|
'playlist', tld, url, playlist_id, 'Downloading playlist JSON', {
|
|
|
|
|
|
|
|
'owner': user,
|
|
|
|
|
|
|
|
'kinds': playlist_id,
|
|
|
|
|
|
|
|
'light': 'true',
|
|
|
|
|
|
|
|
'lang': tld,
|
|
|
|
|
|
|
|
'external-domain': f'music.yandex.{tld}',
|
|
|
|
|
|
|
|
'overembed': 'false',
|
|
|
|
|
|
|
|
})['playlist']
|
|
|
|
|
|
|
|
|
|
|
|
tracks = self._extract_tracks(playlist, playlist_id, url, tld)
|
|
|
|
tracks = self._extract_tracks(playlist, playlist_id, url, tld)
|
|
|
|
|
|
|
|
|
|
|
|