if is_song:
# songs don't store any useful info in the 'context' variable
song_data = self._search_regex(
- r'''<button.*data-song-id=(["\'])%s\1.*''' % video_id,
+ rf'''<button.*data-song-id=(["\']){video_id}\1.*''',
webpage, 'song_data', default=None, group=0)
if song_data is None:
# some songs in an album are not playable
self.report_warning(
- '%s: No downloadable song on this page' % video_id)
+ f'{video_id}: No downloadable song on this page')
return
def search_data(name):
return self._search_regex(
- r'''data-%s=([\'"])(?P<data>.*?)\1''' % name,
+ rf'''data-{name}=([\'"])(?P<data>.*?)\1''',
song_data, name, default='', group='data')
formats = formats_from_stream_urls(
search_data('stream-url'), search_data('hls-stream-url'),
vevo_id = search_data('vevo-id')
youtube_id = search_data('youtube-id')
if vevo_id:
- self.to_screen('Vevo video detected: %s' % vevo_id)
- return self.url_result('vevo:%s' % vevo_id, ie='Vevo')
+ self.to_screen(f'Vevo video detected: {vevo_id}')
+ return self.url_result(f'vevo:{vevo_id}', ie='Vevo')
elif youtube_id:
- self.to_screen('Youtube video detected: %s' % youtube_id)
+ self.to_screen(f'Youtube video detected: {youtube_id}')
return self.url_result(youtube_id, ie='Youtube')
else:
raise ExtractorError(
'Found song but don\'t know how to download it')
- self._sort_formats(formats)
return {
'id': video_id,
'title': self._og_search_title(webpage),
video.get('streamUrl'), video.get('hlsStreamUrl'),
video.get('mp4StreamUrl'), int_or_none(video.get('width')),
int_or_none(video.get('height')))
- self._sort_formats(formats)
return {
'id': video_id,
'title': video['title'],
tracks_paths = re.findall(r'"music:song" content="(.*?)"', webpage)
if not tracks_paths:
raise ExtractorError(
- '%s: No songs found, try using proxy' % display_id,
+ f'{display_id}: No songs found, try using proxy',
expected=True)
entries = [
self.url_result(t_path, ie=MySpaceIE.ie_key())