]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/extractor/patreon.py
[youtube_live_chat] use `clickTrackingParams` (#449)
[yt-dlp.git] / yt_dlp / extractor / patreon.py
index 761a4b1de3d194686339d4d8eb15a5f1bb2b50a6..7bd892fa56ca65541f14b3e24adb7fa494707f45 100644 (file)
@@ -2,6 +2,9 @@
 from __future__ import unicode_literals
 
 from .common import InfoExtractor
+from .vimeo import VimeoIE
+
+from ..compat import compat_urllib_parse_unquote
 from ..utils import (
     clean_html,
     determine_ext,
@@ -11,6 +14,7 @@
     parse_iso8601,
     str_or_none,
     try_get,
+    url_or_none
 )
 
 
@@ -63,6 +67,20 @@ class PatreonIE(InfoExtractor):
     }, {
         'url': 'https://www.patreon.com/posts/743933',
         'only_matching': True,
+    }, {
+        'url': 'https://www.patreon.com/posts/kitchen-as-seen-51706779',
+        'md5': '96656690071f6d64895866008484251b',
+        'info_dict': {
+            'id': '555089736',
+            'ext': 'mp4',
+            'title': 'KITCHEN AS SEEN ON DEEZ NUTS EXTENDED!',
+            'uploader': 'Cold Ones',
+            'thumbnail': 're:^https?://.*$',
+            'upload_date': '20210526',
+            'description': 'md5:557a409bd79d3898689419094934ba79',
+            'uploader_id': '14936315',
+        },
+        'skip': 'Patron-only content'
     }]
 
     # Currently Patreon exposes download URL via hidden CSS, so login is not
@@ -136,6 +154,19 @@ def _real_extract(self, url):
                         'uploader_url': user_attributes.get('url'),
                     })
 
+        if not info.get('url'):
+            # 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'src=(https%3A%2F%2Fplayer\.vimeo\.com.+)%3F', embed_html, 'vimeo url', fatal=False)))
+                if v_url:
+                    info.update({
+                        '_type': 'url_transparent',
+                        'url': VimeoIE._smuggle_referrer(v_url, 'https://patreon.com'),
+                        'ie_key': 'Vimeo',
+                    })
+
         if not info.get('url'):
             embed_url = try_get(attributes, lambda x: x['embed']['url'])
             if embed_url: