|
@@ -220,19 +220,27 @@ class GoogleDriveIE(InfoExtractor):
|
|
'id': video_id,
|
|
'id': video_id,
|
|
'export': 'download',
|
|
'export': 'download',
|
|
})
|
|
})
|
|
- urlh = self._request_webpage(
|
|
|
|
- source_url, video_id, note='Requesting source file',
|
|
|
|
- errnote='Unable to request source file', fatal=False)
|
|
|
|
|
|
+
|
|
|
|
+ def request_source_file(source_url, kind):
|
|
|
|
+ return self._request_webpage(
|
|
|
|
+ source_url, video_id, note='Requesting %s file' % kind,
|
|
|
|
+ errnote='Unable to request %s file' % kind, fatal=False)
|
|
|
|
+ urlh = request_source_file(source_url, 'source')
|
|
if urlh:
|
|
if urlh:
|
|
- def add_source_format(src_url):
|
|
|
|
|
|
+ def add_source_format(urlh):
|
|
formats.append({
|
|
formats.append({
|
|
- 'url': src_url,
|
|
|
|
|
|
+ # Use redirect URLs as download URLs in order to calculate
|
|
|
|
+ # correct cookies in _calc_cookies.
|
|
|
|
+ # Using original URLs may result in redirect loop due to
|
|
|
|
+ # google.com's cookies mistakenly used for googleusercontent.com
|
|
|
|
+ # redirect URLs (see #23919).
|
|
|
|
+ 'url': urlh.geturl(),
|
|
'ext': determine_ext(title, 'mp4').lower(),
|
|
'ext': determine_ext(title, 'mp4').lower(),
|
|
'format_id': 'source',
|
|
'format_id': 'source',
|
|
'quality': 1,
|
|
'quality': 1,
|
|
})
|
|
})
|
|
if urlh.headers.get('Content-Disposition'):
|
|
if urlh.headers.get('Content-Disposition'):
|
|
- add_source_format(source_url)
|
|
|
|
|
|
+ add_source_format(urlh)
|
|
else:
|
|
else:
|
|
confirmation_webpage = self._webpage_read_content(
|
|
confirmation_webpage = self._webpage_read_content(
|
|
urlh, url, video_id, note='Downloading confirmation page',
|
|
urlh, url, video_id, note='Downloading confirmation page',
|
|
@@ -242,9 +250,12 @@ class GoogleDriveIE(InfoExtractor):
|
|
r'confirm=([^&"\']+)', confirmation_webpage,
|
|
r'confirm=([^&"\']+)', confirmation_webpage,
|
|
'confirmation code', fatal=False)
|
|
'confirmation code', fatal=False)
|
|
if confirm:
|
|
if confirm:
|
|
- add_source_format(update_url_query(source_url, {
|
|
|
|
|
|
+ confirmed_source_url = update_url_query(source_url, {
|
|
'confirm': confirm,
|
|
'confirm': confirm,
|
|
- }))
|
|
|
|
|
|
+ })
|
|
|
|
+ urlh = request_source_file(confirmed_source_url, 'confirmed source')
|
|
|
|
+ if urlh and urlh.headers.get('Content-Disposition'):
|
|
|
|
+ add_source_format(urlh)
|
|
|
|
|
|
if not formats:
|
|
if not formats:
|
|
reason = self._search_regex(
|
|
reason = self._search_regex(
|