]>
Commit | Line | Data |
---|---|---|
7d273a38 | 1 | from .common import InfoExtractor |
cf282071 S |
2 | from ..compat import ( |
3 | compat_b64decode, | |
4 | compat_urllib_parse_unquote, | |
7d273a38 | 5 | ) |
cf282071 | 6 | from ..utils import int_or_none |
7d273a38 RA |
7 | |
8 | ||
9 | class MangomoloBaseIE(InfoExtractor): | |
755541a4 RA |
10 | _BASE_REGEX = r'https?://(?:admin\.mangomolo\.com/analytics/index\.php/customers/embed/|player\.mangomolo\.com/v1/)' |
11 | ||
7d273a38 RA |
12 | def _get_real_id(self, page_id): |
13 | return page_id | |
14 | ||
15 | def _real_extract(self, url): | |
16 | page_id = self._get_real_id(self._match_id(url)) | |
755541a4 RA |
17 | webpage = self._download_webpage( |
18 | 'https://player.mangomolo.com/v1/%s?%s' % (self._TYPE, url.split('?')[1]), page_id) | |
7d273a38 RA |
19 | hidden_inputs = self._hidden_inputs(webpage) |
20 | m3u8_entry_protocol = 'm3u8' if self._IS_LIVE else 'm3u8_native' | |
21 | ||
22 | format_url = self._html_search_regex( | |
23 | [ | |
755541a4 | 24 | r'(?:file|src)\s*:\s*"(https?://[^"]+?/playlist\.m3u8)', |
7d273a38 RA |
25 | r'<a[^>]+href="(rtsp://[^"]+)"' |
26 | ], webpage, 'format url') | |
27 | formats = self._extract_wowza_formats( | |
28 | format_url, page_id, m3u8_entry_protocol, ['smil']) | |
29 | self._sort_formats(formats) | |
30 | ||
31 | return { | |
32 | 'id': page_id, | |
39ca3b5c | 33 | 'title': page_id, |
7d273a38 RA |
34 | 'uploader_id': hidden_inputs.get('userid'), |
35 | 'duration': int_or_none(hidden_inputs.get('duration')), | |
36 | 'is_live': self._IS_LIVE, | |
37 | 'formats': formats, | |
38 | } | |
39 | ||
40 | ||
41 | class MangomoloVideoIE(MangomoloBaseIE): | |
755541a4 RA |
42 | _TYPE = 'video' |
43 | IE_NAME = 'mangomolo:' + _TYPE | |
44 | _VALID_URL = MangomoloBaseIE._BASE_REGEX + r'video\?.*?\bid=(?P<id>\d+)' | |
7d273a38 RA |
45 | _IS_LIVE = False |
46 | ||
47 | ||
48 | class MangomoloLiveIE(MangomoloBaseIE): | |
755541a4 RA |
49 | _TYPE = 'live' |
50 | IE_NAME = 'mangomolo:' + _TYPE | |
51 | _VALID_URL = MangomoloBaseIE._BASE_REGEX + r'(live|index)\?.*?\bchannelid=(?P<id>(?:[A-Za-z0-9+/=]|%2B|%2F|%3D)+)' | |
7d273a38 RA |
52 | _IS_LIVE = True |
53 | ||
54 | def _get_real_id(self, page_id): | |
cf282071 | 55 | return compat_b64decode(compat_urllib_parse_unquote(page_id)).decode() |