diff options
Diffstat (limited to 'youtube_dl/extractor/vbox7.py')
| -rw-r--r-- | youtube_dl/extractor/vbox7.py | 22 | 
1 files changed, 22 insertions, 0 deletions
| diff --git a/youtube_dl/extractor/vbox7.py b/youtube_dl/extractor/vbox7.py index c504c5311..d114ecb07 100644 --- a/youtube_dl/extractor/vbox7.py +++ b/youtube_dl/extractor/vbox7.py @@ -5,6 +5,7 @@ import re  import time  from .common import InfoExtractor +from ..compat import compat_kwargs  from ..utils import (      determine_ext,      ExtractorError, @@ -75,6 +76,27 @@ class Vbox7IE(InfoExtractor):          if mobj:              return mobj.group('url') +    # transform_source=None, fatal=True +    def _parse_json(self, json_string, video_id, *args, **kwargs): +        if '"@context"' in json_string[:30]: +            # this is ld+json, or that's the way to bet +            transform_source = args[0] if len(args) > 0 else kwargs.get('transform_source') +            if not transform_source: + +                def fix_chars(src): +                    # fix malformed ld+json: replace raw CRLFs with escaped LFs +                    return re.sub( +                        r'"[^"]+"', lambda m: re.sub(r'\r?\n', r'\\n', m.group(0)), src) + +                if len(args) > 0: +                    args = (fix_chars,) + args[1:] +                else: +                    kwargs['transform_source'] = fix_chars +                    kwargs = compat_kwargs(kwargs) + +        return super(Vbox7IE, self)._parse_json( +            json_string, video_id, *args, **kwargs) +      def _real_extract(self, url):          video_id = self._match_id(url)          url = 'https://vbox7.com/play:%s' % (video_id,) | 
