aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2022-05-18 05:11:47 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2022-05-18 05:16:08 +0530
commitaedaa455d9874f14662023f21b254168ecd55579 (patch)
tree583d6346ac2ed974dfac47e9861f814390121673
parentd6bf1161db0aa316229c0bc79352917d27fafa09 (diff)
downloadhypervideo-pre-aedaa455d9874f14662023f21b254168ecd55579.tar.lz
hypervideo-pre-aedaa455d9874f14662023f21b254168ecd55579.tar.xz
hypervideo-pre-aedaa455d9874f14662023f21b254168ecd55579.zip
[vimeo] Fix extractors
Closes #3037, Closes #2858, Closes #2880, Closes #3712 May also fix #3602, #3360
-rw-r--r--yt_dlp/extractor/dropout.py2
-rw-r--r--yt_dlp/extractor/generic.py2
-rw-r--r--yt_dlp/extractor/vimeo.py32
3 files changed, 21 insertions, 15 deletions
diff --git a/yt_dlp/extractor/dropout.py b/yt_dlp/extractor/dropout.py
index 475825eb8..096216418 100644
--- a/yt_dlp/extractor/dropout.py
+++ b/yt_dlp/extractor/dropout.py
@@ -137,7 +137,7 @@ class DropoutIE(InfoExtractor):
return {
'_type': 'url_transparent',
'ie_key': VHXEmbedIE.ie_key(),
- 'url': embed_url,
+ 'url': VHXEmbedIE._smuggle_referrer(embed_url, 'https://www.dropout.tv'),
'id': self._search_regex(r'embed\.vhx\.tv/videos/(.+?)\?', embed_url, 'id'),
'display_id': display_id,
'title': title,
diff --git a/yt_dlp/extractor/generic.py b/yt_dlp/extractor/generic.py
index 54d9f61c9..dda2b1eef 100644
--- a/yt_dlp/extractor/generic.py
+++ b/yt_dlp/extractor/generic.py
@@ -2954,7 +2954,7 @@ class GenericIE(InfoExtractor):
if vimeo_urls:
return self.playlist_from_matches(vimeo_urls, video_id, video_title, ie=VimeoIE.ie_key())
- vhx_url = VHXEmbedIE._extract_url(webpage)
+ vhx_url = VHXEmbedIE._extract_url(url, webpage)
if vhx_url:
return self.url_result(vhx_url, VHXEmbedIE.ie_key())
diff --git a/yt_dlp/extractor/vimeo.py b/yt_dlp/extractor/vimeo.py
index 59c5353ab..961734345 100644
--- a/yt_dlp/extractor/vimeo.py
+++ b/yt_dlp/extractor/vimeo.py
@@ -40,6 +40,18 @@ class VimeoBaseInfoExtractor(InfoExtractor):
_LOGIN_REQUIRED = False
_LOGIN_URL = 'https://vimeo.com/log_in'
+ @staticmethod
+ def _smuggle_referrer(url, referrer_url):
+ return smuggle_url(url, {'http_headers': {'Referer': referrer_url}})
+
+ def _unsmuggle_headers(self, url):
+ """@returns (url, smuggled_data, headers)"""
+ url, data = unsmuggle_url(url, {})
+ headers = self.get_param('http_headers').copy()
+ if 'http_headers' in data:
+ headers.update(data['http_headers'])
+ return url, data, headers
+
def _perform_login(self, username, password):
webpage = self._download_webpage(
self._LOGIN_URL, None, 'Downloading login page')
@@ -718,10 +730,6 @@ class VimeoIE(VimeoBaseInfoExtractor):
]
@staticmethod
- def _smuggle_referrer(url, referrer_url):
- return smuggle_url(url, {'http_headers': {'Referer': referrer_url}})
-
- @staticmethod
def _extract_urls(url, webpage):
urls = []
# Look for embedded (iframe) Vimeo player
@@ -754,8 +762,8 @@ class VimeoIE(VimeoBaseInfoExtractor):
'Content-Type': 'application/x-www-form-urlencoded',
})
checked = self._download_json(
- url + '/check-password', video_id,
- 'Verifying the password', data=data, headers=headers)
+ f'{compat_urlparse.urlsplit(url)._replace(query=None).geturl()}/check-password',
+ video_id, 'Verifying the password', data=data, headers=headers)
if checked is False:
raise ExtractorError('Wrong video password', expected=True)
return checked
@@ -830,10 +838,7 @@ class VimeoIE(VimeoBaseInfoExtractor):
raise
def _real_extract(self, url):
- url, data = unsmuggle_url(url, {})
- headers = self.get_param('http_headers').copy()
- if 'http_headers' in data:
- headers.update(data['http_headers'])
+ url, data, headers = self._unsmuggle_headers(url)
if 'Referer' not in headers:
headers['Referer'] = url
@@ -1383,14 +1388,15 @@ class VHXEmbedIE(VimeoBaseInfoExtractor):
_VALID_URL = r'https?://embed\.vhx\.tv/videos/(?P<id>\d+)'
@staticmethod
- def _extract_url(webpage):
+ def _extract_url(url, webpage):
mobj = re.search(
r'<iframe[^>]+src="(https?://embed\.vhx\.tv/videos/\d+[^"]*)"', webpage)
- return unescapeHTML(mobj.group(1)) if mobj else None
+ return VimeoIE._smuggle_referrer(unescapeHTML(mobj.group(1)), url) if mobj else None
def _real_extract(self, url):
video_id = self._match_id(url)
- webpage = self._download_webpage(url, video_id)
+ url, _, headers = self._unsmuggle_headers(url)
+ webpage = self._download_webpage(url, video_id, headers=headers)
config_url = self._parse_json(self._search_regex(
r'window\.OTTData\s*=\s*({.+})', webpage,
'ott data'), video_id, js_to_json)['config_url']