1
0
mirror of https://github.com/l1ving/youtube-dl synced 2025-02-04 10:52:53 +08:00

[tudou] fix multipart formats extraction

This commit is contained in:
remitamine 2016-01-15 01:26:20 +01:00
parent c56621f173
commit 4cb71dd785

View File

@ -62,49 +62,41 @@ class TudouIE(InfoExtractor):
if youku_vcode: if youku_vcode:
return self.url_result('youku:' + youku_vcode, ie='Youku') return self.url_result('youku:' + youku_vcode, ie='Youku')
title = unescapeHTML(item_data['kw'])
description = item_data.get('desc')
thumbnail_url = item_data.get('pic')
view_count = int_or_none(item_data.get('playTimes'))
timestamp = int_or_none(item_data.get('pt'))
segments = self._parse_json(item_data['itemSegs'], video_id) segments = self._parse_json(item_data['itemSegs'], video_id)
# It looks like the keys are the arguments that have to be passed as # It looks like the keys are the arguments that have to be passed as
# the hd field in the request url, we pick the higher # the hd field in the request url, we filter non-number qualities (see issue #3643).
# Also, filter non-number qualities (see issue #3643). qualites = sorted(filter(lambda k: k.isdigit(), segments.keys()),
quality = sorted(filter(lambda k: k.isdigit(), segments.keys()), key=lambda k: int(k))
key=lambda k: int(k))[-1] formats = []
parts = segments[quality] for quality in qualites:
result = [] parts = []
len_parts = len(parts) for part in segments[quality]:
if len_parts > 1: final_url = self._url_for_id(part['k'], quality)
self.to_screen('%s: found %s parts' % (video_id, len_parts)) ext = (final_url.split('?')[0]).split('.')[-1]
for part in parts: part_info = {
part_id = part['k'] 'url': final_url,
final_url = self._url_for_id(part_id, quality) 'ext': ext,
ext = (final_url.split('?')[0]).split('.')[-1] 'duration': float_or_none(part.get('seconds'), 1000),
part_info = { 'filesize': int_or_none(part.get('size')),
'id': '%s' % part_id, 'http_headers': {
'url': final_url, 'Referer': self._PLAYER_URL,
'ext': ext, },
'title': title, }
'thumbnail': thumbnail_url, parts.append(part_info)
'description': description, formats.append({
'view_count': view_count, 'formats_id': compat_str(quality),
'timestamp': timestamp, 'parts': parts,
'duration': float_or_none(part.get('seconds'), 1000), })
'filesize': int_or_none(part.get('size')), self._sort_formats(formats)
'http_headers': {
'Referer': self._PLAYER_URL,
},
}
result.append(part_info)
return { return {
'_type': 'multi_video',
'entries': result,
'id': video_id, 'id': video_id,
'title': title, 'title': unescapeHTML(item_data['kw']),
'thumbnail': item_data.get('pic'),
'description': item_data.get('desc'),
'view_count': int_or_none(item_data.get('playTimes')),
'timestamp': int_or_none(item_data.get('pt')),
'formats': formats,
} }