[pornhub] Improve locked videos detection (closes #22449, closes #22780)
authorSergey M․ <dstftw@gmail.com>
Tue, 31 Dec 2019 16:43:43 +0000 (23:43 +0700)
committerSergey M․ <dstftw@gmail.com>
Tue, 31 Dec 2019 16:43:43 +0000 (23:43 +0700)
youtube_dl/extractor/pornhub.py

index 75ed69cde3db4c4116be3089f77f8f43f3205271..b3251ccd9b2300188f7efce561c3c5d1fbff702e 100644 (file)
@@ -17,6 +17,7 @@ from ..utils import (
     determine_ext,
     ExtractorError,
     int_or_none,
+    NO_DEFAULT,
     orderedSet,
     remove_quotes,
     str_to_int,
@@ -227,9 +228,9 @@ class PornHubIE(PornHubBaseIE):
         else:
             thumbnail, duration = [None] * 2
 
-        def extract_js_vars(webpage, pattern, fatal=True):
+        def extract_js_vars(webpage, pattern, default=NO_DEFAULT):
             assignments = self._search_regex(
-                pattern, webpage, 'encoded url', fatal=fatal)
+                pattern, webpage, 'encoded url', default=default)
             if not assignments:
                 return {}
 
@@ -270,11 +271,15 @@ class PornHubIE(PornHubBaseIE):
             FORMAT_PREFIXES = ('media', 'quality')
             js_vars = extract_js_vars(
                 webpage, r'(var\s+(?:%s)_.+)' % '|'.join(FORMAT_PREFIXES),
-                fatal=False)
+                default=None)
             if js_vars:
                 for key, format_url in js_vars.items():
                     if any(key.startswith(p) for p in FORMAT_PREFIXES):
                         add_video_url(format_url)
+            if not video_urls and re.search(
+                    r'<[^>]+\bid=["\']lockedPlayer', webpage):
+                raise ExtractorError(
+                    'Video %s is locked' % video_id, expected=True)
 
         if not video_urls:
             js_vars = extract_js_vars(