|
|
@ -91,14 +91,15 @@ class KalturaIE(InfoExtractor):
|
|
|
|
if mobj:
|
|
|
|
if mobj:
|
|
|
|
embed_info = mobj.groupdict()
|
|
|
|
embed_info = mobj.groupdict()
|
|
|
|
url = 'kaltura:%(partner_id)s:%(id)s' % embed_info
|
|
|
|
url = 'kaltura:%(partner_id)s:%(id)s' % embed_info
|
|
|
|
|
|
|
|
escaped_pid = re.escape(embed_info['partner_id'])
|
|
|
|
service_url = re.search(
|
|
|
|
service_url = re.search(
|
|
|
|
'<script[^>]+src=(?:["\'])((?:https?:)?//.+?)/p/%(partner_id)s/sp/%(partner_id)s00/embedIframeJs' % embed_info,
|
|
|
|
r'<script[^>]+src=["\']((?:https?:)?//.+?)/p/%s/sp/%s00/embedIframeJs' % (escaped_pid, escaped_pid),
|
|
|
|
webpage)
|
|
|
|
webpage)
|
|
|
|
if service_url:
|
|
|
|
if service_url:
|
|
|
|
url = smuggle_url(url, {'service_url': service_url.group(1)})
|
|
|
|
url = smuggle_url(url, {'service_url': service_url.group(1)})
|
|
|
|
return url
|
|
|
|
return url
|
|
|
|
|
|
|
|
|
|
|
|
def _kaltura_api_call(self, video_id, actions, *args, **kwargs):
|
|
|
|
def _kaltura_api_call(self, video_id, actions, service_url=None, *args, **kwargs):
|
|
|
|
params = actions[0]
|
|
|
|
params = actions[0]
|
|
|
|
if len(actions) > 1:
|
|
|
|
if len(actions) > 1:
|
|
|
|
for i, a in enumerate(actions[1:], start=1):
|
|
|
|
for i, a in enumerate(actions[1:], start=1):
|
|
|
@ -106,7 +107,7 @@ class KalturaIE(InfoExtractor):
|
|
|
|
params['%d:%s' % (i, k)] = v
|
|
|
|
params['%d:%s' % (i, k)] = v
|
|
|
|
|
|
|
|
|
|
|
|
data = self._download_json(
|
|
|
|
data = self._download_json(
|
|
|
|
self._SERVICE_URL + self._SERVICE_BASE,
|
|
|
|
(service_url or self._SERVICE_URL) + self._SERVICE_BASE,
|
|
|
|
video_id, query=params, *args, **kwargs)
|
|
|
|
video_id, query=params, *args, **kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
status = data if len(actions) == 1 else data[0]
|
|
|
|
status = data if len(actions) == 1 else data[0]
|
|
|
@ -116,7 +117,7 @@ class KalturaIE(InfoExtractor):
|
|
|
|
|
|
|
|
|
|
|
|
return data
|
|
|
|
return data
|
|
|
|
|
|
|
|
|
|
|
|
def _get_kaltura_signature(self, video_id, partner_id):
|
|
|
|
def _get_kaltura_signature(self, video_id, partner_id, service_url=None):
|
|
|
|
actions = [{
|
|
|
|
actions = [{
|
|
|
|
'apiVersion': '3.1',
|
|
|
|
'apiVersion': '3.1',
|
|
|
|
'expiry': 86400,
|
|
|
|
'expiry': 86400,
|
|
|
@ -126,10 +127,10 @@ class KalturaIE(InfoExtractor):
|
|
|
|
'widgetId': '_%s' % partner_id,
|
|
|
|
'widgetId': '_%s' % partner_id,
|
|
|
|
}]
|
|
|
|
}]
|
|
|
|
return self._kaltura_api_call(
|
|
|
|
return self._kaltura_api_call(
|
|
|
|
video_id, actions, note='Downloading Kaltura signature')['ks']
|
|
|
|
video_id, actions, service_url, note='Downloading Kaltura signature')['ks']
|
|
|
|
|
|
|
|
|
|
|
|
def _get_video_info(self, video_id, partner_id):
|
|
|
|
def _get_video_info(self, video_id, partner_id, service_url=None):
|
|
|
|
signature = self._get_kaltura_signature(video_id, partner_id)
|
|
|
|
signature = self._get_kaltura_signature(video_id, partner_id, service_url)
|
|
|
|
actions = [
|
|
|
|
actions = [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
'action': 'null',
|
|
|
|
'action': 'null',
|
|
|
@ -152,19 +153,16 @@ class KalturaIE(InfoExtractor):
|
|
|
|
},
|
|
|
|
},
|
|
|
|
]
|
|
|
|
]
|
|
|
|
return self._kaltura_api_call(
|
|
|
|
return self._kaltura_api_call(
|
|
|
|
video_id, actions, note='Downloading video info JSON')
|
|
|
|
video_id, actions, service_url, note='Downloading video info JSON')
|
|
|
|
|
|
|
|
|
|
|
|
def _real_extract(self, url):
|
|
|
|
def _real_extract(self, url):
|
|
|
|
url, smuggled_data = unsmuggle_url(url, {})
|
|
|
|
url, smuggled_data = unsmuggle_url(url, {})
|
|
|
|
service_url = smuggled_data.get('service_url')
|
|
|
|
|
|
|
|
if service_url:
|
|
|
|
|
|
|
|
self._SERVICE_URL = service_url
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mobj = re.match(self._VALID_URL, url)
|
|
|
|
mobj = re.match(self._VALID_URL, url)
|
|
|
|
partner_id, entry_id = mobj.group('partner_id', 'id')
|
|
|
|
partner_id, entry_id = mobj.group('partner_id', 'id')
|
|
|
|
ks = None
|
|
|
|
ks = None
|
|
|
|
if partner_id and entry_id:
|
|
|
|
if partner_id and entry_id:
|
|
|
|
info, flavor_assets = self._get_video_info(entry_id, partner_id)
|
|
|
|
info, flavor_assets = self._get_video_info(entry_id, partner_id, smuggled_data.get('service_url'))
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
path, query = mobj.group('path', 'query')
|
|
|
|
path, query = mobj.group('path', 'query')
|
|
|
|
if not path and not query:
|
|
|
|
if not path and not query:
|
|
|
|