]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/extractor/mangomolo.py
[ie/crunchyroll] Fix stream extraction (#10005)
[yt-dlp.git] / yt_dlp / extractor / mangomolo.py
index 68ce138b3e4818c8179d6883d485284f26cef2a0..efaf66fa200d123685e59b80f7ae1c2d07534695 100644 (file)
@@ -1,16 +1,31 @@
-# coding: utf-8
-from __future__ import unicode_literals
-
 from .common import InfoExtractor
 from ..compat import (
     compat_b64decode,
     compat_urllib_parse_unquote,
 )
-from ..utils import int_or_none
+from ..utils import classproperty, int_or_none
 
 
 class MangomoloBaseIE(InfoExtractor):
-    _BASE_REGEX = r'https?://(?:admin\.mangomolo\.com/analytics/index\.php/customers/embed/|player\.mangomolo\.com/v1/)'
+    _BASE_REGEX = r'(?:https?:)?//(?:admin\.mangomolo\.com/analytics/index\.php/customers/embed/|player\.mangomolo\.com/v1/)'
+    _SLUG = None
+
+    @classproperty
+    def _VALID_URL(cls):
+        return f'{cls._BASE_REGEX}{cls._SLUG}'
+
+    @classproperty
+    def _EMBED_REGEX(cls):
+        return [rf'<iframe[^>]+src=(["\'])(?P<url>{cls._VALID_URL}.+?)\1']
+
+    def _extract_from_webpage(self, url, webpage):
+        for res in super()._extract_from_webpage(url, webpage):
+            yield {
+                **res,
+                '_type': 'url_transparent',
+                'id': self._search_regex(self._SLUG, res['url'], 'id', group='id'),
+                'uploader': self._search_regex(r'^(?:https?://)?([^/]*)/.*', url, 'video uploader'),
+            }
 
     def _get_real_id(self, page_id):
         return page_id
@@ -29,7 +44,6 @@ def _real_extract(self, url):
             ], webpage, 'format url')
         formats = self._extract_wowza_formats(
             format_url, page_id, m3u8_entry_protocol, ['smil'])
-        self._sort_formats(formats)
 
         return {
             'id': page_id,
@@ -44,14 +58,15 @@ def _real_extract(self, url):
 class MangomoloVideoIE(MangomoloBaseIE):
     _TYPE = 'video'
     IE_NAME = 'mangomolo:' + _TYPE
-    _VALID_URL = MangomoloBaseIE._BASE_REGEX + r'video\?.*?\bid=(?P<id>\d+)'
+    _SLUG = r'video\?.*?\bid=(?P<id>\d+)'
+
     _IS_LIVE = False
 
 
 class MangomoloLiveIE(MangomoloBaseIE):
     _TYPE = 'live'
     IE_NAME = 'mangomolo:' + _TYPE
-    _VALID_URL = MangomoloBaseIE._BASE_REGEX + r'(live|index)\?.*?\bchannelid=(?P<id>(?:[A-Za-z0-9+/=]|%2B|%2F|%3D)+)'
+    _SLUG = r'(?:live|index)\?.*?\bchannelid=(?P<id>(?:[A-Za-z0-9+/=]|%2B|%2F|%3D)+)'
     _IS_LIVE = True
 
     def _get_real_id(self, page_id):