]>
Commit | Line | Data |
---|---|---|
fecb20a5 | 1 | # coding: utf-8 |
2 | from __future__ import unicode_literals | |
3 | ||
4 | import re | |
5 | ||
fecb20a5 | 6 | from .common import InfoExtractor |
7 | from ..utils import ( | |
8 | unified_timestamp, | |
9 | extract_attributes, | |
10 | ) | |
11 | ||
12 | ||
13 | class N1InfoAssetIE(InfoExtractor): | |
14 | _VALID_URL = r'https?://best-vod\.umn\.cdn\.united\.cloud/stream\?asset=(?P<id>[^&]+)' | |
15 | _TESTS = [{ | |
16 | 'url': 'https://best-vod.umn.cdn.united.cloud/stream?asset=ljsottomazilirija3060921-n1info-si-worldwide&stream=hp1400&t=0&player=m3u8v&sp=n1info&u=n1info&p=n1Sh4redSecre7iNf0', | |
17 | 'md5': '28b08b32aeaff2b8562736ccd5a66fe7', | |
18 | 'info_dict': { | |
19 | 'id': 'ljsottomazilirija3060921-n1info-si-worldwide', | |
20 | 'ext': 'mp4', | |
21 | 'title': 'ljsottomazilirija3060921-n1info-si-worldwide', | |
22 | } | |
23 | }] | |
24 | ||
25 | def _real_extract(self, url): | |
26 | video_id = self._match_id(url) | |
27 | formats = self._extract_m3u8_formats( | |
28 | url, video_id, 'mp4', entry_protocol='m3u8_native', m3u8_id='hls', fatal=False) | |
29 | ||
30 | self._sort_formats(formats) | |
31 | ||
32 | return { | |
33 | 'id': video_id, | |
34 | 'title': video_id, | |
35 | 'formats': formats, | |
36 | } | |
37 | ||
38 | ||
39 | class N1InfoIIE(InfoExtractor): | |
40 | IE_NAME = 'N1Info:article' | |
0f651893 | 41 | _VALID_URL = r'https?://(?:(?:(?:ba|rs|hr)\.)?n1info\.(?:com|si)|nova\.rs)/(?:[^/]+/){1,2}(?P<id>[^/]+)' |
fecb20a5 | 42 | _TESTS = [{ |
43 | # Youtube embedded | |
44 | 'url': 'https://rs.n1info.com/sport-klub/tenis/kako-je-djokovic-propustio-istorijsku-priliku-video/', | |
45 | 'md5': '01ddb6646d0fd9c4c7d990aa77fe1c5a', | |
46 | 'info_dict': { | |
47 | 'id': 'L5Hd4hQVUpk', | |
48 | 'ext': 'mp4', | |
49 | 'upload_date': '20210913', | |
50 | 'title': 'Ozmo i USO21, ep. 13: Novak Đoković – Danil Medvedev | Ključevi Poraza, Budućnost | SPORT KLUB TENIS', | |
51 | 'description': 'md5:467f330af1effedd2e290f10dc31bb8e', | |
52 | 'uploader': 'Sport Klub', | |
53 | 'uploader_id': 'sportklub', | |
54 | } | |
55 | }, { | |
56 | 'url': 'https://rs.n1info.com/vesti/djilas-los-plan-za-metro-nece-resiti-nijedan-saobracajni-problem/', | |
57 | 'info_dict': { | |
58 | 'id': 'bgmetrosot2409zta20210924174316682-n1info-rs-worldwide', | |
59 | 'ext': 'mp4', | |
60 | 'title': 'Đilas: Predlog izgradnje metroa besmislen; SNS odbacuje navode', | |
61 | 'upload_date': '20210924', | |
62 | 'timestamp': 1632481347, | |
63 | }, | |
64 | 'params': { | |
65 | 'skip_download': True, | |
66 | }, | |
67 | }, { | |
68 | 'url': 'https://n1info.si/novice/slovenija/zadnji-dnevi-na-kopaliscu-ilirija-ilirija-ni-umrla-ubili-so-jo/', | |
69 | 'info_dict': { | |
70 | 'id': 'ljsottomazilirija3060921-n1info-si-worldwide', | |
71 | 'ext': 'mp4', | |
72 | 'title': 'Zadnji dnevi na kopališču Ilirija: “Ilirija ni umrla, ubili so jo”', | |
73 | 'timestamp': 1632567630, | |
74 | 'upload_date': '20210925', | |
75 | }, | |
76 | 'params': { | |
77 | 'skip_download': True, | |
78 | }, | |
79 | }, { | |
80 | # Reddit embedded | |
81 | 'url': 'https://ba.n1info.com/lifestyle/vucic-bolji-od-tita-ako-izgubi-ja-cu-da-crknem-jugoslavija-je-gotova/', | |
82 | 'info_dict': { | |
83 | 'id': '2wmfee9eycp71', | |
84 | 'ext': 'mp4', | |
85 | 'title': '"Ako Vučić izgubi izbore, ja ću da crknem, Jugoslavija je gotova"', | |
86 | 'upload_date': '20210924', | |
87 | 'timestamp': 1632448649.0, | |
88 | 'uploader': 'YouLotWhatDontStop', | |
89 | }, | |
90 | 'params': { | |
fecb20a5 | 91 | 'skip_download': True, |
92 | }, | |
0f651893 | 93 | }, { |
94 | 'url': 'https://nova.rs/vesti/politika/zaklina-tatalovic-ani-brnabic-pricate-lazi-video/', | |
95 | 'info_dict': { | |
96 | 'id': 'tnjganabrnabicizaklinatatalovic100danavladegp-novas-worldwide', | |
97 | 'ext': 'mp4', | |
98 | 'title': 'Žaklina Tatalović Ani Brnabić: Pričate laži (VIDEO)', | |
99 | 'upload_date': '20211102', | |
100 | 'timestamp': 1635861677, | |
101 | }, | |
fecb20a5 | 102 | }, { |
103 | 'url': 'https://hr.n1info.com/vijesti/pravobraniteljica-o-ubojstvu-u-zagrebu-radi-se-o-doista-nezapamcenoj-situaciji/', | |
104 | 'only_matching': True, | |
105 | }] | |
106 | ||
107 | def _real_extract(self, url): | |
108 | video_id = self._match_id(url) | |
109 | webpage = self._download_webpage(url, video_id) | |
110 | ||
111 | title = self._html_search_regex(r'<h1[^>]+>(.+?)</h1>', webpage, 'title') | |
112 | timestamp = unified_timestamp(self._html_search_meta('article:published_time', webpage)) | |
113 | ||
114 | videos = re.findall(r'(?m)(<video[^>]+>)', webpage) | |
115 | entries = [] | |
116 | for video in videos: | |
117 | video_data = extract_attributes(video) | |
118 | entries.append({ | |
119 | '_type': 'url_transparent', | |
120 | 'url': video_data.get('data-url'), | |
121 | 'id': video_data.get('id'), | |
122 | 'title': title, | |
123 | 'thumbnail': video_data.get('data-thumbnail'), | |
124 | 'timestamp': timestamp, | |
0f651893 | 125 | 'ie_key': 'N1InfoAsset'}) |
fecb20a5 | 126 | |
127 | embedded_videos = re.findall(r'(<iframe[^>]+>)', webpage) | |
128 | for embedded_video in embedded_videos: | |
129 | video_data = extract_attributes(embedded_video) | |
0f651893 | 130 | url = video_data.get('src') or '' |
fecb20a5 | 131 | if url.startswith('https://www.youtube.com'): |
0f651893 | 132 | entries.append(self.url_result(url, ie='Youtube')) |
fecb20a5 | 133 | elif url.startswith('https://www.redditmedia.com'): |
0f651893 | 134 | entries.append(self.url_result(url, ie='RedditR')) |
fecb20a5 | 135 | |
136 | return { | |
137 | '_type': 'playlist', | |
138 | 'id': video_id, | |
139 | 'title': title, | |
140 | 'timestamp': timestamp, | |
141 | 'entries': entries, | |
142 | } |