diff options
| -rw-r--r-- | youtube_dl/extractor/kaltura.py | 22 | 
1 files changed, 10 insertions, 12 deletions
| diff --git a/youtube_dl/extractor/kaltura.py b/youtube_dl/extractor/kaltura.py index 147bb8cf0..1729f5bfb 100644 --- a/youtube_dl/extractor/kaltura.py +++ b/youtube_dl/extractor/kaltura.py @@ -91,14 +91,15 @@ class KalturaIE(InfoExtractor):          if mobj:              embed_info = mobj.groupdict()              url = 'kaltura:%(partner_id)s:%(id)s' % embed_info +            escaped_pid = re.escape(embed_info['partner_id'])              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)              if service_url:                  url = smuggle_url(url, {'service_url': service_url.group(1)})              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]          if len(actions) > 1:              for i, a in enumerate(actions[1:], start=1): @@ -106,7 +107,7 @@ class KalturaIE(InfoExtractor):                      params['%d:%s' % (i, k)] = v          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)          status = data if len(actions) == 1 else data[0] @@ -116,7 +117,7 @@ class KalturaIE(InfoExtractor):          return data -    def _get_kaltura_signature(self, video_id, partner_id): +    def _get_kaltura_signature(self, video_id, partner_id, service_url=None):          actions = [{              'apiVersion': '3.1',              'expiry': 86400, @@ -126,10 +127,10 @@ class KalturaIE(InfoExtractor):              'widgetId': '_%s' % partner_id,          }]          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): -        signature = self._get_kaltura_signature(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, service_url)          actions = [              {                  'action': 'null', @@ -152,19 +153,16 @@ class KalturaIE(InfoExtractor):              },          ]          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):          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)          partner_id, entry_id = mobj.group('partner_id', 'id')          ks = None          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:              path, query = mobj.group('path', 'query')              if not path and not query: | 
