Merge branch 'master' of github.com:rg3/youtube-dl

This commit is contained in:
Philipp Hagemeister 2015-01-25 21:39:50 +01:00
commit 71e7da6533
5 changed files with 35 additions and 20 deletions

View File

@ -105,3 +105,4 @@ Dinesh S
Johan K. Jensen Johan K. Jensen
Yen Chi Hsuan Yen Chi Hsuan
Enam Mijbah Noor Enam Mijbah Noor
David Luhmer

View File

@ -14,6 +14,7 @@
from ..compat import ( from ..compat import (
compat_cookiejar, compat_cookiejar,
compat_HTTPError,
compat_http_client, compat_http_client,
compat_urllib_error, compat_urllib_error,
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
@ -26,6 +27,7 @@
compiled_regex_type, compiled_regex_type,
ExtractorError, ExtractorError,
float_or_none, float_or_none,
HEADRequest,
int_or_none, int_or_none,
RegexNotFoundError, RegexNotFoundError,
sanitize_filename, sanitize_filename,
@ -716,6 +718,27 @@ def _formats_key(f):
) )
formats.sort(key=_formats_key) formats.sort(key=_formats_key)
def _check_formats(self, formats, video_id):
if formats:
formats[:] = filter(
lambda f: self._is_valid_url(
f['url'], video_id,
item='%s video format' % f.get('format_id') if f.get('format_id') else 'video'),
formats)
def _is_valid_url(self, url, video_id, item='video'):
try:
self._request_webpage(
HEADRequest(url), video_id,
'Checking %s URL' % item)
return True
except ExtractorError as e:
if isinstance(e.cause, compat_HTTPError):
self.report_warning(
'%s URL is invalid, skipping' % item, video_id)
return False
raise
def http_scheme(self): def http_scheme(self):
""" Either "http:" or "https:", depending on the user's preferences """ """ Either "http:" or "https:", depending on the user's preferences """
return ( return (

View File

@ -48,14 +48,20 @@ def _real_extract(self, url):
elif asset['Kind'] == 'VideoResource': elif asset['Kind'] == 'VideoResource':
duration = asset['DurationInMilliseconds'] / 1000.0 duration = asset['DurationInMilliseconds'] / 1000.0
restricted_to_denmark = asset['RestrictedToDenmark'] restricted_to_denmark = asset['RestrictedToDenmark']
spoken_subtitles = asset['Target'] == 'SpokenSubtitles'
for link in asset['Links']: for link in asset['Links']:
target = link['Target'] target = link['Target']
uri = link['Uri'] uri = link['Uri']
format_id = target
preference = -1 if target == 'HDS' else -2
if spoken_subtitles:
preference -= 2
format_id += '-spoken-subtitles'
formats.append({ formats.append({
'url': uri + '?hdcore=3.3.0&plugin=aasp-3.3.0.99.43' if target == 'HDS' else uri, 'url': uri + '?hdcore=3.3.0&plugin=aasp-3.3.0.99.43' if target == 'HDS' else uri,
'format_id': target, 'format_id': format_id,
'ext': link['FileFormat'], 'ext': link['FileFormat'],
'preference': -1 if target == 'HDS' else -2, 'preference': preference,
}) })
subtitles_list = asset.get('SubtitlesList') subtitles_list = asset.get('SubtitlesList')
if isinstance(subtitles_list, list): if isinstance(subtitles_list, list):

View File

@ -85,6 +85,7 @@ def _real_extract(self, url):
} for format_id, video_url in prioritized_streams['0'].items() } for format_id, video_url in prioritized_streams['0'].items()
]) ])
self._check_formats(formats, video_id)
self._sort_formats(formats) self._sort_formats(formats)
if self._downloader.params.get('listsubtitles', False): if self._downloader.params.get('listsubtitles', False):

View File

@ -4,14 +4,7 @@
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import ( from ..compat import compat_urlparse
compat_urlparse,
compat_HTTPError,
)
from ..utils import (
HEADRequest,
ExtractorError,
)
from .spiegeltv import SpiegeltvIE from .spiegeltv import SpiegeltvIE
@ -72,16 +65,6 @@ def _real_extract(self, url):
if n.tag.startswith('type') and n.tag != 'type6': if n.tag.startswith('type') and n.tag != 'type6':
format_id = n.tag.rpartition('type')[2] format_id = n.tag.rpartition('type')[2]
video_url = base_url + n.find('./filename').text video_url = base_url + n.find('./filename').text
# Test video URLs beforehand as some of them are invalid
try:
self._request_webpage(
HEADRequest(video_url), video_id,
'Checking %s video URL' % format_id)
except ExtractorError as e:
if isinstance(e.cause, compat_HTTPError) and e.cause.code == 404:
self.report_warning(
'%s video URL is invalid, skipping' % format_id, video_id)
continue
formats.append({ formats.append({
'format_id': format_id, 'format_id': format_id,
'url': video_url, 'url': video_url,
@ -94,6 +77,7 @@ def _real_extract(self, url):
}) })
duration = float(idoc[0].findall('./duration')[0].text) duration = float(idoc[0].findall('./duration')[0].text)
self._check_formats(formats, video_id)
self._sort_formats(formats) self._sort_formats(formats)
return { return {