aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbashonly <88596187+bashonly@users.noreply.github.com>2024-04-18 18:18:56 -0500
committerGitHub <noreply@github.com>2024-04-18 23:18:56 +0000
commitc9ce57d9bf51541da2381d99bc096a9d0ddf1f27 (patch)
treea0bf7afadd2a3c060897d9236ba31e5aeff6c910
parent02483bea1c4dbe1bace8ca4d19700104fbb8a00f (diff)
[ie/patreon] Fix Vimeo embed extraction (#9712)
Fixes regression in 36b240f9a72af57eb2c9d927ebb7fd1c917ebf18 Closes #9709 Authored by: bashonly
-rw-r--r--yt_dlp/extractor/patreon.py47
1 files changed, 35 insertions, 12 deletions
diff --git a/yt_dlp/extractor/patreon.py b/yt_dlp/extractor/patreon.py
index d4f822f52..9381c7eab 100644
--- a/yt_dlp/extractor/patreon.py
+++ b/yt_dlp/extractor/patreon.py
@@ -1,8 +1,8 @@
import itertools
+import urllib.parse
from .common import InfoExtractor
from .vimeo import VimeoIE
-from ..compat import compat_urllib_parse_unquote
from ..networking.exceptions import HTTPError
from ..utils import (
KNOWN_EXTENSIONS,
@@ -14,7 +14,6 @@ from ..utils import (
parse_iso8601,
str_or_none,
traverse_obj,
- try_get,
url_or_none,
urljoin,
)
@@ -199,6 +198,27 @@ class PatreonIE(PatreonBaseIE):
'channel_id': '2147162',
'uploader_url': 'https://www.patreon.com/yaboyroshi',
},
+ }, {
+ # NSFW vimeo embed URL
+ 'url': 'https://www.patreon.com/posts/4k-spiderman-4k-96414599',
+ 'info_dict': {
+ 'id': '902250943',
+ 'ext': 'mp4',
+ 'title': '❤️(4K) Spiderman Girl Yeonhwa’s Gift ❤️(4K) 스파이더맨걸 연화의 선물',
+ 'description': '❤️(4K) Spiderman Girl Yeonhwa’s Gift \n❤️(4K) 스파이더맨걸 연화의 선물',
+ 'uploader': 'Npickyeonhwa',
+ 'uploader_id': '90574422',
+ 'uploader_url': 'https://www.patreon.com/Yeonhwa726',
+ 'channel_id': '10237902',
+ 'channel_url': 'https://www.patreon.com/Yeonhwa726',
+ 'duration': 70,
+ 'timestamp': 1705150153,
+ 'upload_date': '20240113',
+ 'comment_count': int,
+ 'like_count': int,
+ 'thumbnail': r're:^https?://.+',
+ },
+ 'params': {'skip_download': 'm3u8'},
}]
def _real_extract(self, url):
@@ -268,16 +288,19 @@ class PatreonIE(PatreonBaseIE):
})
# handle Vimeo embeds
- if try_get(attributes, lambda x: x['embed']['provider']) == 'Vimeo':
- embed_html = try_get(attributes, lambda x: x['embed']['html'])
- v_url = url_or_none(compat_urllib_parse_unquote(
- self._search_regex(r'(https(?:%3A%2F%2F|://)player\.vimeo\.com.+app_id(?:=|%3D)+\d+)', embed_html, 'vimeo url', fatal=False)))
- if v_url:
- v_url = VimeoIE._smuggle_referrer(v_url, 'https://patreon.com')
- if self._request_webpage(v_url, video_id, 'Checking Vimeo embed URL', fatal=False, errnote=False):
- return self.url_result(v_url, VimeoIE, url_transparent=True, **info)
-
- embed_url = try_get(attributes, lambda x: x['embed']['url'])
+ if traverse_obj(attributes, ('embed', 'provider')) == 'Vimeo':
+ v_url = urllib.parse.unquote(self._html_search_regex(
+ r'(https(?:%3A%2F%2F|://)player\.vimeo\.com.+app_id(?:=|%3D)+\d+)',
+ traverse_obj(attributes, ('embed', 'html', {str})), 'vimeo url', fatal=False) or '')
+ if url_or_none(v_url) and self._request_webpage(
+ v_url, video_id, 'Checking Vimeo embed URL',
+ headers={'Referer': 'https://patreon.com/'},
+ fatal=False, errnote=False):
+ return self.url_result(
+ VimeoIE._smuggle_referrer(v_url, 'https://patreon.com/'),
+ VimeoIE, url_transparent=True, **info)
+
+ embed_url = traverse_obj(attributes, ('embed', 'url', {url_or_none}))
if embed_url and self._request_webpage(embed_url, video_id, 'Checking embed URL', fatal=False, errnote=False):
return self.url_result(embed_url, **info)