|
@@ -503,14 +503,14 @@ class GenericIE(InfoExtractor):
|
|
|
self.to_screen('%s: Requesting header' % video_id)
|
|
|
|
|
|
head_req = HEADRequest(url)
|
|
|
- response = self._request_webpage(
|
|
|
+ head_response = self._request_webpage(
|
|
|
head_req, video_id,
|
|
|
note=False, errnote='Could not send HEAD request to %s' % url,
|
|
|
fatal=False)
|
|
|
|
|
|
- if response is not False:
|
|
|
+ if head_response is not False:
|
|
|
# Check for redirect
|
|
|
- new_url = response.geturl()
|
|
|
+ new_url = head_response.geturl()
|
|
|
if url != new_url:
|
|
|
self.report_following_redirect(new_url)
|
|
|
if force_videoid:
|
|
@@ -518,34 +518,35 @@ class GenericIE(InfoExtractor):
|
|
|
new_url, {'force_videoid': force_videoid})
|
|
|
return self.url_result(new_url)
|
|
|
|
|
|
- # Check for direct link to a video
|
|
|
- content_type = response.headers.get('Content-Type', '')
|
|
|
- m = re.match(r'^(?P<type>audio|video|application(?=/ogg$))/(?P<format_id>.+)$', content_type)
|
|
|
- if m:
|
|
|
- upload_date = response.headers.get('Last-Modified')
|
|
|
- if upload_date:
|
|
|
- upload_date = unified_strdate(upload_date)
|
|
|
- return {
|
|
|
- 'id': video_id,
|
|
|
- 'title': os.path.splitext(url_basename(url))[0],
|
|
|
- 'formats': [{
|
|
|
- 'format_id': m.group('format_id'),
|
|
|
- 'url': url,
|
|
|
- 'vcodec': 'none' if m.group('type') == 'audio' else None
|
|
|
- }],
|
|
|
- 'upload_date': upload_date,
|
|
|
- }
|
|
|
+ full_response = None
|
|
|
+ if head_response is False:
|
|
|
+ full_response = self._request_webpage(url, video_id)
|
|
|
+ head_response = full_response
|
|
|
+
|
|
|
+ # Check for direct link to a video
|
|
|
+ content_type = head_response.headers.get('Content-Type', '')
|
|
|
+ m = re.match(r'^(?P<type>audio|video|application(?=/ogg$))/(?P<format_id>.+)$', content_type)
|
|
|
+ if m:
|
|
|
+ upload_date = unified_strdate(
|
|
|
+ head_response.headers.get('Last-Modified'))
|
|
|
+ return {
|
|
|
+ 'id': video_id,
|
|
|
+ 'title': os.path.splitext(url_basename(url))[0],
|
|
|
+ 'formats': [{
|
|
|
+ 'format_id': m.group('format_id'),
|
|
|
+ 'url': url,
|
|
|
+ 'vcodec': 'none' if m.group('type') == 'audio' else None
|
|
|
+ }],
|
|
|
+ 'upload_date': upload_date,
|
|
|
+ }
|
|
|
|
|
|
if not self._downloader.params.get('test', False) and not is_intentional:
|
|
|
self._downloader.report_warning('Falling back on generic information extractor.')
|
|
|
|
|
|
- try:
|
|
|
+ if full_response:
|
|
|
+ webpage = _webpage_read_content(url, video_id)
|
|
|
+ else:
|
|
|
webpage = self._download_webpage(url, video_id)
|
|
|
- except ValueError:
|
|
|
- # since this is the last-resort InfoExtractor, if
|
|
|
- # this error is thrown, it'll be thrown here
|
|
|
- raise ExtractorError('Failed to download URL: %s' % url)
|
|
|
-
|
|
|
self.report_extraction(video_id)
|
|
|
|
|
|
# Is it an RSS feed?
|