]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/extractor/streamable.py
[extractors] Use new framework for existing embeds (#4307)
[yt-dlp.git] / yt_dlp / extractor / streamable.py
index 34725274e4148a1df3d2e3468600cb1c3eafedbd..3e60479ad04eb0ba76e237406122218c71288411 100644 (file)
@@ -1,18 +1,16 @@
-# coding: utf-8
-from __future__ import unicode_literals
-
-import re
-
 from .common import InfoExtractor
 from ..utils import (
     ExtractorError,
     float_or_none,
     int_or_none,
+    try_get,
+    parse_codecs,
 )
 
 
 class StreamableIE(InfoExtractor):
     _VALID_URL = r'https?://streamable\.com/(?:[es]/)?(?P<id>\w+)'
+    _EMBED_REGEX = [r'<iframe[^>]+\bsrc=(?P<q1>[\'"])(?P<url>(?:https?:)?//streamable\.com/.+?)(?P=q1)']
     _TESTS = [
         {
             'url': 'https://streamable.com/dnd1',
@@ -29,7 +27,7 @@ class StreamableIE(InfoExtractor):
                 'view_count': int,
             }
         },
-        # older video without bitrate, width/height, etc. info
+        # older video without bitrate, width/height, codecs, etc. info
         {
             'url': 'https://streamable.com/moo',
             'md5': '2cf6923639b87fba3279ad0df3a64e73',
@@ -54,14 +52,6 @@ class StreamableIE(InfoExtractor):
         }
     ]
 
-    @staticmethod
-    def _extract_url(webpage):
-        mobj = re.search(
-            r'<iframe[^>]+src=(?P<q1>[\'"])(?P<src>(?:https?:)?//streamable\.com/(?:(?!\1).+))(?P=q1)',
-            webpage)
-        if mobj:
-            return mobj.group('src')
-
     def _real_extract(self, url):
         video_id = self._match_id(url)
 
@@ -95,7 +85,9 @@ def _real_extract(self, url):
                 'height': int_or_none(info.get('height')),
                 'filesize': int_or_none(info.get('size')),
                 'fps': int_or_none(info.get('framerate')),
-                'vbr': float_or_none(info.get('bitrate'), 1000)
+                'vbr': float_or_none(info.get('bitrate'), 1000),
+                'vcodec': parse_codecs(try_get(info, lambda x: x['input_metadata']['video_codec_name'])).get('vcodec'),
+                'acodec': parse_codecs(try_get(info, lambda x: x['input_metadata']['audio_codec_name'])).get('acodec'),
             })
         self._sort_formats(formats)