2 from __future__ import unicode_literals
8 from .common import InfoExtractor
10 class YandexMusicAlbumIE(InfoExtractor):
11 _VALID_URL = r'http://music.yandex.ru/album/(?P<id>\d+)'
13 def _get_track_url(self, storage_dir, track_id):
14 data = self._download_json('http://music.yandex.ru/api/v1.5/handlers/api-jsonp.jsx?requestId=2&nc=%d&action=getTrackSrc&p=download-info/%s/2.mp3' % (time.time(), storage_dir), track_id)
17 hsh.update('XGRlBW9FXlekgbPrRHuSiA' + data['path'][1:] + data['s'])
18 hash = hsh.hexdigest()
19 storage = storage_dir.split('.')
21 return 'http://%s/get-mp3/%s/%s?track-id=%s&from=service-10-track&similarities-experiment=default' % (data['host'], hash, data['ts'] + data['path'], storage[1])
23 def _get_album_id_and_data(self, url):
24 matched = re.match(self._VALID_URL, url)
25 id = matched.group('id')
27 webpage = self._download_webpage(url, id)
28 data = self._parse_json(
30 r'var\s+Mu\s+=\s+(.+?);\s+<\/script>', webpage, 'player'),
32 return id, data['pageData']
34 def _real_extract(self, url):
36 id, data = self._get_album_id_and_data(url)
40 for track in data['volumes'][0]:
44 'url': self._get_track_url(track['storageDir'], track['id']),
45 'title': track['artists'][0]['name'] + ' - ' + track['title'],
52 'title': data['title'],
55 class YandexMusicPlaylistIE(YandexMusicAlbumIE):
56 _VALID_URL = r'http://music.yandex.ru/users/(?P<user_name>[^/]+)/playlists/(?P<id>\d+)'
58 def _real_extract(self, url):
59 id, data = self._get_album_id_and_data(url)
60 data = data['playlist']
64 for track in data['tracks']:
68 'url': self._get_track_url(track['storageDir'], track['id']),
69 'title': track['artists'][0]['name'] + ' - ' + track['title'],
76 'title': data['title'],
79 class YandexMusicTrackIE(YandexMusicAlbumIE):
80 _VALID_URL = r'http://music.yandex.ru/album/(?P<album_id>\d+)/track/(?P<id>\d+)'
82 'url': 'http://music.yandex.ru/album/540508/track/4878838',
86 'title': 'Carlo Ambrosio - Gypsy Eyes 1',
90 def _real_extract(self, url):
92 id, data = self._get_album_id_and_data(url)
94 for track in data['volumes'][0]:
96 track_url = self._get_track_url(track['storageDir'], id)
103 'title': track['artists'][0]['name'] + ' - ' + track['title'],