]> jfr.im git - yt-dlp.git/commitdiff
[xtube] fix extractor (#17)
authorinsaneracist <redacted>
Wed, 28 Oct 2020 20:48:55 +0000 (13:48 -0700)
committerinsaneracist <redacted>
Wed, 28 Oct 2020 20:48:55 +0000 (13:48 -0700)
youtube_dlc/extractor/xtube.py

index 01b253dcb1e8c92232a06c0b2b4153a545dabcc1..081c5e2e736625424769e08dd4859d7cca213a6f 100644 (file)
@@ -5,6 +5,7 @@
 
 from .common import InfoExtractor
 from ..utils import (
+    ExtractorError,
     int_or_none,
     js_to_json,
     orderedSet,
@@ -33,27 +34,11 @@ class XTubeIE(InfoExtractor):
             'title': 'strange erotica',
             'description': 'contains:an ET kind of thing',
             'uploader': 'greenshowers',
-            'duration': 450,
+            'duration': 449,
             'view_count': int,
             'comment_count': int,
             'age_limit': 18,
         }
-    }, {
-        # FLV videos with duplicated formats
-        'url': 'http://www.xtube.com/video-watch/A-Super-Run-Part-1-YT-9299752',
-        'md5': 'a406963eb349dd43692ec54631efd88b',
-        'info_dict': {
-            'id': '9299752',
-            'display_id': 'A-Super-Run-Part-1-YT',
-            'ext': 'flv',
-            'title': 'A Super Run - Part 1 (YT)',
-            'description': 'md5:4cc3af1aa1b0413289babc88f0d4f616',
-            'uploader': 'tshirtguy59',
-            'duration': 579,
-            'view_count': int,
-            'comment_count': int,
-            'age_limit': 18,
-        },
     }, {
         # new URL schema
         'url': 'http://www.xtube.com/video-watch/strange-erotica-625837',
@@ -89,16 +74,24 @@ def _real_extract(self, url):
 
         title, thumbnail, duration = [None] * 3
 
-        config = self._parse_json(self._search_regex(
-            r'playerConf\s*=\s*({.+?})\s*,\s*\n', webpage, 'config',
-            default='{}'), video_id, transform_source=js_to_json, fatal=False)
-        if config:
-            config = config.get('mainRoll')
-            if isinstance(config, dict):
-                title = config.get('title')
-                thumbnail = config.get('poster')
-                duration = int_or_none(config.get('duration'))
-                sources = config.get('sources') or config.get('format')
+        json_config_string = self._search_regex(
+            r'playerConf=({.+?}),loaderConf',
+            webpage, 'config', default=None)
+        if not json_config_string:
+            raise ExtractorError("Could not extract video player data")
+
+        json_config_string = json_config_string.replace("!0", "true").replace("!1", "false")
+
+        config = self._parse_json(json_config_string, video_id, transform_source=js_to_json, fatal=False)
+        if not config:
+            raise ExtractorError("Could not extract video player data")
+
+        config = config.get('mainRoll')
+        if isinstance(config, dict):
+            title = config.get('title')
+            thumbnail = config.get('poster')
+            duration = int_or_none(config.get('duration'))
+            sources = config.get('sources') or config.get('format')
 
         if not isinstance(sources, dict):
             sources = self._parse_json(self._search_regex(