diff options
author | Sergey M․ <dstftw@gmail.com> | 2017-06-20 22:58:33 +0700 |
---|---|---|
committer | Sergey M․ <dstftw@gmail.com> | 2017-06-20 22:58:33 +0700 |
commit | 9be9ec5980c1c53642eb112ccced3246ac8a391e (patch) | |
tree | 2c74da45f580a0176f9d6bbebd059468239a15f1 /youtube_dl | |
parent | 048b55804da21c2b2978cd2f710b2c7b438e24ba (diff) |
[googledrive] Fix formats' sorting (closes #13443)
Diffstat (limited to 'youtube_dl')
-rw-r--r-- | youtube_dl/extractor/googledrive.py | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/youtube_dl/extractor/googledrive.py b/youtube_dl/extractor/googledrive.py index fec36cbbb..9705cfadd 100644 --- a/youtube_dl/extractor/googledrive.py +++ b/youtube_dl/extractor/googledrive.py @@ -69,19 +69,32 @@ class GoogleDriveIE(InfoExtractor): r'"fmt_stream_map"\s*,\s*"([^"]+)', webpage, 'fmt stream map').split(',') fmt_list = self._search_regex(r'"fmt_list"\s*,\s*"([^"]+)', webpage, 'fmt_list').split(',') + resolutions = {} + for fmt in fmt_list: + mobj = re.search( + r'^(?P<format_id>\d+)/(?P<width>\d+)[xX](?P<height>\d+)', fmt) + if mobj: + resolutions[mobj.group('format_id')] = ( + int(mobj.group('width')), int(mobj.group('height'))) + formats = [] - for fmt, fmt_stream in zip(fmt_list, fmt_stream_map): - fmt_id, fmt_url = fmt_stream.split('|') - resolution = fmt.split('/')[1] - width, height = resolution.split('x') - formats.append({ - 'url': lowercase_escape(fmt_url), - 'format_id': fmt_id, - 'resolution': resolution, - 'width': int_or_none(width), - 'height': int_or_none(height), - 'ext': self._FORMATS_EXT[fmt_id], - }) + for fmt_stream in fmt_stream_map: + fmt_stream_split = fmt_stream.split('|') + if len(fmt_stream_split) < 2: + continue + format_id, format_url = fmt_stream_split[:2] + f = { + 'url': lowercase_escape(format_url), + 'format_id': format_id, + 'ext': self._FORMATS_EXT[format_id], + } + resolution = resolutions.get(format_id) + if resolution: + f.update({ + 'width': resolution[0], + 'height': resolution[0], + }) + formats.append(f) self._sort_formats(formats) return { |