|
|
@ -1712,30 +1712,36 @@ class YoutubeIE(YoutubeBaseInfoExtractor): |
|
|
|
else: |
|
|
|
video_description = '' |
|
|
|
|
|
|
|
if 'multifeed_metadata_list' in video_info and not smuggled_data.get('force_singlefeed', False): |
|
|
|
if not smuggled_data.get('force_singlefeed', False): |
|
|
|
if not self._downloader.params.get('noplaylist'): |
|
|
|
entries = [] |
|
|
|
feed_ids = [] |
|
|
|
multifeed_metadata_list = video_info['multifeed_metadata_list'][0] |
|
|
|
for feed in multifeed_metadata_list.split(','): |
|
|
|
# Unquote should take place before split on comma (,) since textual |
|
|
|
# fields may contain comma as well (see |
|
|
|
# https://github.com/rg3/youtube-dl/issues/8536) |
|
|
|
feed_data = compat_parse_qs(compat_urllib_parse_unquote_plus(feed)) |
|
|
|
entries.append({ |
|
|
|
'_type': 'url_transparent', |
|
|
|
'ie_key': 'Youtube', |
|
|
|
'url': smuggle_url( |
|
|
|
'%s://www.youtube.com/watch?v=%s' % (proto, feed_data['id'][0]), |
|
|
|
{'force_singlefeed': True}), |
|
|
|
'title': '%s (%s)' % (video_title, feed_data['title'][0]), |
|
|
|
}) |
|
|
|
feed_ids.append(feed_data['id'][0]) |
|
|
|
self.to_screen( |
|
|
|
'Downloading multifeed video (%s) - add --no-playlist to just download video %s' |
|
|
|
% (', '.join(feed_ids), video_id)) |
|
|
|
return self.playlist_result(entries, video_id, video_title, video_description) |
|
|
|
self.to_screen('Downloading just video %s because of --no-playlist' % video_id) |
|
|
|
multifeed_metadata_list = try_get( |
|
|
|
player_response, |
|
|
|
lambda x: x['multicamera']['playerLegacyMulticameraRenderer']['metadataList'], |
|
|
|
compat_str) or try_get( |
|
|
|
video_info, lambda x: x['multifeed_metadata_list'][0], compat_str) |
|
|
|
if multifeed_metadata_list: |
|
|
|
entries = [] |
|
|
|
feed_ids = [] |
|
|
|
for feed in multifeed_metadata_list.split(','): |
|
|
|
# Unquote should take place before split on comma (,) since textual |
|
|
|
# fields may contain comma as well (see |
|
|
|
# https://github.com/rg3/youtube-dl/issues/8536) |
|
|
|
feed_data = compat_parse_qs(compat_urllib_parse_unquote_plus(feed)) |
|
|
|
entries.append({ |
|
|
|
'_type': 'url_transparent', |
|
|
|
'ie_key': 'Youtube', |
|
|
|
'url': smuggle_url( |
|
|
|
'%s://www.youtube.com/watch?v=%s' % (proto, feed_data['id'][0]), |
|
|
|
{'force_singlefeed': True}), |
|
|
|
'title': '%s (%s)' % (video_title, feed_data['title'][0]), |
|
|
|
}) |
|
|
|
feed_ids.append(feed_data['id'][0]) |
|
|
|
self.to_screen( |
|
|
|
'Downloading multifeed video (%s) - add --no-playlist to just download video %s' |
|
|
|
% (', '.join(feed_ids), video_id)) |
|
|
|
return self.playlist_result(entries, video_id, video_title, video_description) |
|
|
|
else: |
|
|
|
self.to_screen('Downloading just video %s because of --no-playlist' % video_id) |
|
|
|
|
|
|
|
if view_count is None: |
|
|
|
view_count = extract_view_count(video_info) |
|
|
|