[extractor/common] Respect default in _search_json_ld
authorSergey M․ <dstftw@gmail.com>
Mon, 8 Aug 2016 15:36:18 +0000 (22:36 +0700)
committerSergey M․ <dstftw@gmail.com>
Mon, 8 Aug 2016 15:36:18 +0000 (22:36 +0700)
youtube_dl/extractor/common.py

index 0891309dd506dab2f7c44c256fdd6203e846be80..e47770c1d1717db7970fe46080ef410655b00911 100644 (file)
@@ -816,11 +816,14 @@ class InfoExtractor(object):
         json_ld = self._search_regex(
             r'(?s)<script[^>]+type=(["\'])application/ld\+json\1[^>]*>(?P<json_ld>.+?)</script>',
             html, 'JSON-LD', group='json_ld', **kwargs)
+        default = kwargs.get('default', NO_DEFAULT)
         if not json_ld:
-            return {}
-        return self._json_ld(
-            json_ld, video_id, fatal=kwargs.get('fatal', True),
-            expected_type=expected_type)
+            return default if default is not NO_DEFAULT else {}
+        # JSON-LD may be malformed and thus `fatal` should be respected.
+        # At the same time `default` may be passed that assumes `fatal=False`
+        # for _search_regex. Let's simulate the same behavior here as well.
+        fatal = kwargs.get('fatal', True) if default == NO_DEFAULT else False
+        return self._json_ld(json_ld, video_id, fatal=fatal, expected_type=expected_type)
 
     def _json_ld(self, json_ld, video_id, fatal=True, expected_type=None):
         if isinstance(json_ld, compat_str):