]>
Commit | Line | Data |
---|---|---|
114ed20e | 1 | from .common import InfoExtractor |
02c126a7 | 2 | from ..utils import ( |
a62fd1af | 3 | js_to_json, |
02c126a7 | 4 | ExtractorError, |
a62fd1af | 5 | int_or_none |
84c0ed50 | 6 | ) |
114ed20e | 7 | |
8 | class ShahidIE(InfoExtractor): | |
9 | _VALID_URL = r'https?://shahid\.mbc\.net/ar/episode/(?P<id>\d+)/?' | |
10 | _TESTS = [ | |
11 | { | |
12 | 'url': 'https://shahid.mbc.net/ar/episode/108084/%D8%AE%D9%88%D8%A7%D8%B7%D8%B1-%D8%A7%D9%84%D9%85%D9%88%D8%B3%D9%85-11-%D8%A7%D9%84%D8%AD%D9%84%D9%82%D8%A9-1.html', | |
13 | 'info_dict': { | |
14 | 'id': '108084', | |
15 | 'ext': 'm3u8', | |
a62fd1af | 16 | 'title': 'خواطر الموسم 11 الحلقة 1', |
17 | 'description': 'بسم الله', | |
18 | 'duration': 1166, | |
114ed20e | 19 | }, |
20 | 'params': { | |
21 | # m3u8 download | |
22 | 'skip_download': True, | |
23 | } | |
24 | }, | |
25 | { | |
26 | #shahid plus subscriber only | |
27 | 'url': 'https://shahid.mbc.net/ar/series/90497/%D9%85%D8%B1%D8%A7%D9%8A%D8%A7-2011.html', | |
28 | 'only_matching': True | |
29 | } | |
30 | ] | |
31 | ||
32 | def _real_extract(self, url): | |
33 | video_id = self._match_id(url) | |
34 | webpage = self._download_webpage(url, video_id) | |
a62fd1af | 35 | player_info = '' |
36 | for line in self._search_regex( 'var flashvars = ({[^}]+})', webpage, 'flashvars').splitlines(): | |
37 | if '+' not in line and '(' not in line and ')' not in line: | |
38 | player_info += line | |
39 | player_info = self._parse_json(js_to_json(player_info), video_id) | |
40 | video_id = player_info['id'] | |
41 | player_type = player_info['playerType'] | |
42 | ||
43 | video_info = self._download_json( | |
44 | player_info['url'] + '/' + player_type + '/' + video_id + | |
45 | '?apiKey=sh%40hid0nlin3&hash=b2wMCTHpSmyxGqQjJFOycRmLSex%2BBpTK%2Fooxy6vHaqs%3D', | |
114ed20e | 46 | video_id |
a62fd1af | 47 | )['data'] |
48 | if video_info['error']: | |
49 | for error in video_info['error']: | |
50 | raise ExtractorError(error) | |
51 | video_info = video_info[player_type] | |
52 | if video_info.get('availabilities').get('plus'): | |
53 | raise ExtractorError('plus members only') | |
54 | title = video_info['title'] | |
55 | thumbnail = video_info.get('thumbnailUrl') | |
56 | categories = [category['name'] for category in video_info.get('genres')] | |
57 | description = video_info.get('description') | |
58 | duration = int_or_none(video_info.get('duration')) | |
59 | ||
114ed20e | 60 | player_json_data = self._download_json( |
a62fd1af | 61 | 'https://shahid.mbc.net/arContent/getPlayerContent-param-.id-' + video_id + '.type-' + player_info['type'] + '.html', |
114ed20e | 62 | video_id |
63 | )['data'] | |
64 | if 'url' in player_json_data: | |
65 | m3u8_url = player_json_data['url'] | |
66 | else: | |
dfaba1ab | 67 | for error in player_json_data['error'].values(): |
02c126a7 | 68 | raise ExtractorError(error) |
114ed20e | 69 | return |
70 | formats = self._extract_m3u8_formats(m3u8_url, video_id) | |
71 | return { | |
72 | 'id': video_id, | |
73 | 'title': title, | |
74 | 'thumbnail': thumbnail, | |
75 | 'categories': categories, | |
76 | 'description': description, | |
a62fd1af | 77 | 'duration': duration, |
114ed20e | 78 | 'formats': formats, |
79 | } |