[kaltura] Add support for referrer protected videos (#7409)

This commit is contained in:
Sergey M․ 2015-11-21 01:34:02 +06:00
parent c711383811
commit 01b06aedcf

View File

@ -2,12 +2,17 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import re import re
import base64
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import compat_urllib_parse from ..compat import (
compat_urllib_parse,
compat_urlparse,
)
from ..utils import ( from ..utils import (
ExtractorError, ExtractorError,
int_or_none, int_or_none,
unsmuggle_url,
) )
@ -121,24 +126,40 @@ def _get_video_info(self, video_id, partner_id):
video_id, actions, note='Downloading video info JSON') video_id, actions, note='Downloading video info JSON')
def _real_extract(self, url): def _real_extract(self, url):
url, smuggled_data = unsmuggle_url(url, {})
mobj = re.match(self._VALID_URL, url) mobj = re.match(self._VALID_URL, url)
partner_id = mobj.group('partner_id_s') or mobj.group('partner_id') or mobj.group('partner_id_html5') partner_id = mobj.group('partner_id_s') or mobj.group('partner_id') or mobj.group('partner_id_html5')
entry_id = mobj.group('id_s') or mobj.group('id') or mobj.group('id_html5') entry_id = mobj.group('id_s') or mobj.group('id') or mobj.group('id_html5')
info, source_data = self._get_video_info(entry_id, partner_id) info, source_data = self._get_video_info(entry_id, partner_id)
formats = [{ source_url = smuggled_data.get('source_url')
'format_id': '%(fileExt)s-%(bitrate)s' % f, if source_url:
'ext': f['fileExt'], referrer = base64.b64encode(
'tbr': f['bitrate'], '://'.join(compat_urlparse.urlparse(source_url)[:2])
'fps': f.get('frameRate'), .encode('utf-8')).decode('utf-8')
'filesize_approx': int_or_none(f.get('size'), invscale=1024), else:
'container': f.get('containerFormat'), referrer = None
'vcodec': f.get('videoCodecId'),
'height': f.get('height'), formats = []
'width': f.get('width'), for f in source_data['flavorAssets']:
'url': '%s/flavorId/%s' % (info['dataUrl'], f['id']), video_url = '%s/flavorId/%s' % (info['dataUrl'], f['id'])
} for f in source_data['flavorAssets']] if referrer:
video_url += '?referrer=%s' % referrer
formats.append({
'format_id': '%(fileExt)s-%(bitrate)s' % f,
'ext': f['fileExt'],
'tbr': f['bitrate'],
'fps': f.get('frameRate'),
'filesize_approx': int_or_none(f.get('size'), invscale=1024),
'container': f.get('containerFormat'),
'vcodec': f.get('videoCodecId'),
'height': f.get('height'),
'width': f.get('width'),
'url': video_url,
})
self._check_formats(formats, entry_id)
self._sort_formats(formats) self._sort_formats(formats)
return { return {