X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Fyoutube.py;h=55c345e8a8d4f2c48ff2620fa56df98cecd5db6b;hb=41cc67c542046d300fc0a8a6bfb6c471db2db6b2;hp=58d27497002de5467ab08ebb9a2b0188177943e9;hpb=e56f22ae203d10ab6d3715bc2dc1c9b927294e50;p=youtube-dl diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 58d274970..55c345e8a 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -1432,10 +1432,17 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): 'height': height, 'format_note': note, }) + def _formats_key(f): - return (f.get('height') if f.get('height') is not None else -1, - f.get('width') if f.get('width') is not None else -1) - formats = sorted(formats, key=_formats_key) + note = f.get('format_note') + if note is None: + note = u'' + is_dash = u'DASH' in note + return ( + 0 if is_dash else 1, + f.get('height') if f.get('height') is not None else -1, + f.get('width') if f.get('width') is not None else -1) + formats.sort(key=_formats_key) return { 'id': video_id, @@ -1666,7 +1673,7 @@ class YoutubeUserIE(InfoExtractor): # page by page until there are no video ids - it means we got # all of them. - video_ids = [] + url_results = [] for pagenum in itertools.count(0): start_index = pagenum * self._GDATA_PAGE_SIZE + 1 @@ -1684,10 +1691,17 @@ class YoutubeUserIE(InfoExtractor): break # Extract video identifiers - ids_in_page = [] - for entry in response['feed']['entry']: - ids_in_page.append(entry['id']['$t'].split('/')[-1]) - video_ids.extend(ids_in_page) + entries = response['feed']['entry'] + for entry in entries: + title = entry['title']['$t'] + video_id = entry['id']['$t'].split('/')[-1] + url_results.append({ + '_type': 'url', + 'url': video_id, + 'ie_key': 'Youtube', + 'id': 'video_id', + 'title': title, + }) # A little optimization - if current page is not # "full", ie. does not contain PAGE_SIZE video ids then @@ -1695,12 +1709,9 @@ class YoutubeUserIE(InfoExtractor): # are no more ids on further pages - no need to query # again. - if len(ids_in_page) < self._GDATA_PAGE_SIZE: + if len(entries) < self._GDATA_PAGE_SIZE: break - url_results = [ - self.url_result(video_id, 'Youtube', video_id=video_id) - for video_id in video_ids] return self.playlist_result(url_results, playlist_title=username)