|
|
|
@ -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,)
|
|
|
|
|