1
0
Fork 0
mirror of https://github.com/ytdl-org/youtube-dl.git synced 2024-12-23 17:28:03 +00:00

Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Yen Chi Hsuan 2015-04-30 23:33:49 +08:00
commit ffbc3901d2
3 changed files with 19 additions and 26 deletions

View file

@ -237,7 +237,7 @@ class TestFormatSelection(unittest.TestCase):
f2['url'] = 'url:' + f2id f2['url'] = 'url:' + f2id
info_dict = _make_result([f1, f2], extractor='youtube') info_dict = _make_result([f1, f2], extractor='youtube')
ydl = YDL() ydl = YDL({'format': 'best/bestvideo'})
yie = YoutubeIE(ydl) yie = YoutubeIE(ydl)
yie._sort_formats(info_dict['formats']) yie._sort_formats(info_dict['formats'])
ydl.process_ie_result(info_dict) ydl.process_ie_result(info_dict)
@ -245,7 +245,7 @@ class TestFormatSelection(unittest.TestCase):
self.assertEqual(downloaded['format_id'], f1id) self.assertEqual(downloaded['format_id'], f1id)
info_dict = _make_result([f2, f1], extractor='youtube') info_dict = _make_result([f2, f1], extractor='youtube')
ydl = YDL() ydl = YDL({'format': 'best/bestvideo'})
yie = YoutubeIE(ydl) yie = YoutubeIE(ydl)
yie._sort_formats(info_dict['formats']) yie._sort_formats(info_dict['formats'])
ydl.process_ie_result(info_dict) ydl.process_ie_result(info_dict)

View file

@ -914,15 +914,16 @@ class YoutubeDL(object):
if not available_formats: if not available_formats:
return None return None
if format_spec == 'best' or format_spec is None: if format_spec in ['best', 'worst', None]:
return available_formats[-1] format_idx = 0 if format_spec == 'worst' else -1
elif format_spec == 'worst':
audiovideo_formats = [ audiovideo_formats = [
f for f in available_formats f for f in available_formats
if f.get('vcodec') != 'none' and f.get('acodec') != 'none'] if f.get('vcodec') != 'none' and f.get('acodec') != 'none']
if audiovideo_formats: if audiovideo_formats:
return audiovideo_formats[0] return audiovideo_formats[format_idx]
return available_formats[0] # for audio only urls, select the best/worst audio format
elif all(f.get('acodec') != 'none' for f in available_formats):
return available_formats[format_idx]
elif format_spec == 'bestaudio': elif format_spec == 'bestaudio':
audio_formats = [ audio_formats = [
f for f in available_formats f for f in available_formats

View file

@ -27,9 +27,6 @@ class VpornIE(InfoExtractor):
'duration': 393, 'duration': 393,
'age_limit': 18, 'age_limit': 18,
'view_count': int, 'view_count': int,
'like_count': int,
'dislike_count': int,
'comment_count': int,
} }
}, },
{ {
@ -47,9 +44,6 @@ class VpornIE(InfoExtractor):
'duration': 588, 'duration': 588,
'age_limit': 18, 'age_limit': 18,
'view_count': int, 'view_count': int,
'like_count': int,
'dislike_count': int,
'comment_count': int,
} }
}, },
] ]
@ -64,29 +58,29 @@ class VpornIE(InfoExtractor):
title = self._html_search_regex( title = self._html_search_regex(
r'videoname\s*=\s*\'([^\']+)\'', webpage, 'title').strip() r'videoname\s*=\s*\'([^\']+)\'', webpage, 'title').strip()
description = self._html_search_regex( description = self._html_search_regex(
r'<div class="description_txt">(.*?)</div>', webpage, 'description', fatal=False) r'class="(?:descr|description_txt)">(.*?)</div>',
webpage, 'description', fatal=False)
thumbnail = self._html_search_regex( thumbnail = self._html_search_regex(
r'flashvars\.imageUrl\s*=\s*"([^"]+)"', webpage, 'description', fatal=False, default=None) r'flashvars\.imageUrl\s*=\s*"([^"]+)"', webpage, 'description', fatal=False, default=None)
if thumbnail: if thumbnail:
thumbnail = 'http://www.vporn.com' + thumbnail thumbnail = 'http://www.vporn.com' + thumbnail
uploader = self._html_search_regex( uploader = self._html_search_regex(
r'(?s)UPLOADED BY.*?<a href="/user/[^"]+">([^<]+)</a>', r'(?s)Uploaded by:.*?<a href="/user/[^"]+"[^>]*>(.+?)</a>',
webpage, 'uploader', fatal=False) webpage, 'uploader', fatal=False)
categories = re.findall(r'<a href="/cat/[^"]+">([^<]+)</a>', webpage) categories = re.findall(r'<a href="/cat/[^"]+"[^>]*>([^<]+)</a>', webpage)
duration = parse_duration(self._search_regex( duration = parse_duration(self._search_regex(
r'duration (\d+ min \d+ sec)', webpage, 'duration', fatal=False)) r'Runtime:\s*</span>\s*(\d+ min \d+ sec)',
webpage, 'duration', fatal=False))
view_count = str_to_int(self._html_search_regex( view_count = str_to_int(self._search_regex(
r'<span>([\d,\.]+) VIEWS</span>', webpage, 'view count', fatal=False)) r'class="views">([\d,\.]+) [Vv]iews<',
like_count = str_to_int(self._html_search_regex( webpage, 'view count', fatal=False))
r'<span id="like" class="n">([\d,\.]+)</span>', webpage, 'like count', fatal=False))
dislike_count = str_to_int(self._html_search_regex(
r'<span id="dislike" class="n">([\d,\.]+)</span>', webpage, 'dislike count', fatal=False))
comment_count = str_to_int(self._html_search_regex( comment_count = str_to_int(self._html_search_regex(
r'<h4>Comments \(<b>([\d,\.]+)</b>\)</h4>', webpage, 'comment count', fatal=False)) r"'Comments \(([\d,\.]+)\)'",
webpage, 'comment count', default=None))
formats = [] formats = []
@ -117,8 +111,6 @@ class VpornIE(InfoExtractor):
'categories': categories, 'categories': categories,
'duration': duration, 'duration': duration,
'view_count': view_count, 'view_count': view_count,
'like_count': like_count,
'dislike_count': dislike_count,
'comment_count': comment_count, 'comment_count': comment_count,
'age_limit': 18, 'age_limit': 18,
'formats': formats, 'formats': formats,