]>
Commit | Line | Data |
---|---|---|
a820dc72 | 1 | import json |
a820dc72 | 2 | |
bb18d787 | 3 | from .common import InfoExtractor |
dfd78699 | 4 | from ..utils import ( |
5 | try_get, | |
6 | ) | |
bb18d787 JMF |
7 | |
8 | ||
9 | class AlJazeeraIE(InfoExtractor): | |
dfd78699 | 10 | _VALID_URL = r'https?://(?P<base>\w+\.aljazeera\.\w+)/(?P<type>programs?/[^/]+|(?:feature|video|new)s)?/\d{4}/\d{1,2}/\d{1,2}/(?P<id>[^/?&#]+)' |
bb18d787 | 11 | |
851a01ae | 12 | _TESTS = [{ |
dfd78699 | 13 | 'url': 'https://balkans.aljazeera.net/videos/2021/11/6/pojedini-domovi-u-sarajevu-jos-pod-vodom-mjestanima-se-dostavlja-hrana', |
bb18d787 | 14 | 'info_dict': { |
dfd78699 | 15 | 'id': '6280641530001', |
bb18d787 | 16 | 'ext': 'mp4', |
dfd78699 | 17 | 'title': 'Pojedini domovi u Sarajevu još pod vodom, mještanima se dostavlja hrana', |
18 | 'timestamp': 1636219149, | |
19 | 'description': 'U sarajevskim naseljima Rajlovac i Reljevo stambeni objekti, ali i industrijska postrojenja i dalje su pod vodom.', | |
20 | 'upload_date': '20211106', | |
21 | } | |
a820dc72 | 22 | }, { |
dfd78699 | 23 | 'url': 'https://balkans.aljazeera.net/videos/2021/11/6/djokovic-usao-u-finale-mastersa-u-parizu', |
24 | 'info_dict': { | |
25 | 'id': '6280654936001', | |
26 | 'ext': 'mp4', | |
27 | 'title': 'Đoković ušao u finale Mastersa u Parizu', | |
28 | 'timestamp': 1636221686, | |
29 | 'description': 'Novak Đoković je u polufinalu Mastersa u Parizu nakon preokreta pobijedio Poljaka Huberta Hurkacza.', | |
30 | 'upload_date': '20211106', | |
31 | }, | |
851a01ae | 32 | }] |
dfd78699 | 33 | BRIGHTCOVE_URL_RE = r'https?://players.brightcove.net/(?P<account>\d+)/(?P<player_id>[a-zA-Z0-9]+)_(?P<embed>[^/]+)/index.html\?videoId=(?P<id>\d+)' |
bb18d787 JMF |
34 | |
35 | def _real_extract(self, url): | |
dfd78699 | 36 | base, post_type, id = self._match_valid_url(url).groups() |
37 | wp = { | |
38 | 'balkans.aljazeera.net': 'ajb', | |
39 | 'chinese.aljazeera.net': 'chinese', | |
40 | 'mubasher.aljazeera.net': 'ajm', | |
41 | }.get(base) or 'aje' | |
a820dc72 RA |
42 | post_type = { |
43 | 'features': 'post', | |
44 | 'program': 'episode', | |
dfd78699 | 45 | 'programs': 'episode', |
a820dc72 | 46 | 'videos': 'video', |
dfd78699 | 47 | 'news': 'news', |
a820dc72 RA |
48 | }[post_type.split('/')[0]] |
49 | video = self._download_json( | |
dfd78699 | 50 | f'https://{base}/graphql', id, query={ |
51 | 'wp-site': wp, | |
e43e9f3c | 52 | 'operationName': 'ArchipelagoSingleArticleQuery', |
a820dc72 | 53 | 'variables': json.dumps({ |
dfd78699 | 54 | 'name': id, |
a820dc72 RA |
55 | 'postType': post_type, |
56 | }), | |
57 | }, headers={ | |
dfd78699 | 58 | 'wp-site': wp, |
59 | }) | |
60 | video = try_get(video, lambda x: x['data']['article']['video']) or {} | |
61 | video_id = video.get('id') | |
62 | account = video.get('accountId') or '911432371001' | |
63 | player_id = video.get('playerId') or 'csvTfAlKW' | |
64 | embed = 'default' | |
65 | ||
66 | if video_id is None: | |
67 | webpage = self._download_webpage(url, id) | |
68 | ||
69 | account, player_id, embed, video_id = self._search_regex(self.BRIGHTCOVE_URL_RE, webpage, 'video id', | |
70 | group=(1, 2, 3, 4), default=(None, None, None, None)) | |
71 | ||
72 | if video_id is None: | |
73 | return { | |
74 | '_type': 'url_transparent', | |
75 | 'url': url, | |
76 | 'ie_key': 'Generic' | |
77 | } | |
78 | ||
79 | return { | |
80 | '_type': 'url_transparent', | |
81 | 'url': f'https://players.brightcove.net/{account}/{player_id}_{embed}/index.html?videoId={video_id}', | |
82 | 'ie_key': 'BrightcoveNew' | |
83 | } |