]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/extractor/ooyala.py
[ie/box] Fix formats extraction (#8649)
[yt-dlp.git] / yt_dlp / extractor / ooyala.py
index 20cfa0a8704d4417fb2cdfd02123de3f7d0d2277..65afccdb1c95824c2da74fc1961bc41d805bf0e0 100644 (file)
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 import base64
 import re
 
@@ -12,6 +10,7 @@
     determine_ext,
     float_or_none,
     int_or_none,
+    smuggle_url,
     try_get,
     unsmuggle_url,
 )
@@ -86,7 +85,6 @@ def _extract(self, content_tree_url, video_id, domain=None, supportedformats=Non
         if not formats and not auth_data.get('authorized'):
             self.raise_no_formats('%s said: %s' % (
                 self.IE_NAME, auth_data['message']), expected=True)
-        self._sort_formats(formats)
 
         subtitles = {}
         for lang, sub in metadata.get('closed_captions_vtt', {}).get('captions', {}).items():
@@ -153,6 +151,29 @@ class OoyalaIE(OoyalaBaseIE):
         }
     ]
 
+    def _extract_from_webpage(self, url, webpage):
+        mobj = (re.search(r'player\.ooyala\.com/[^"?]+[?#][^"]*?(?:embedCode|ec)=(?P<ec>[^"&]+)', webpage)
+                or re.search(r'OO\.Player\.create\([\'"].*?[\'"],\s*[\'"](?P<ec>.{32})[\'"]', webpage)
+                or re.search(r'OO\.Player\.create\.apply\(\s*OO\.Player\s*,\s*op\(\s*\[\s*[\'"][^\'"]*[\'"]\s*,\s*[\'"](?P<ec>.{32})[\'"]', webpage)
+                or re.search(r'SBN\.VideoLinkset\.ooyala\([\'"](?P<ec>.{32})[\'"]\)', webpage)
+                or re.search(r'data-ooyala-video-id\s*=\s*[\'"](?P<ec>.{32})[\'"]', webpage))
+        if mobj is not None:
+            embed_token = self._search_regex(
+                r'embedToken[\'"]?\s*:\s*[\'"]([^\'"]+)',
+                webpage, 'ooyala embed token', default=None)
+            yield self._build_url_result(smuggle_url(
+                mobj.group('ec'), {
+                    'domain': url,
+                    'embed_token': embed_token,
+                }))
+            return
+
+        # Look for multiple Ooyala embeds on SBN network websites
+        mobj = re.search(r'SBN\.VideoLinkset\.entryGroup\((\[.*?\])', webpage)
+        if mobj is not None:
+            for v in self._parse_json(mobj.group(1), self._generic_id(url), fatal=False) or []:
+                yield self._build_url_result(smuggle_url(v['provider_video_id'], {'domain': url}))
+
     @staticmethod
     def _url_for_embed_code(embed_code):
         return 'http://player.ooyala.com/player.js?embedCode=%s' % embed_code