]>
Commit | Line | Data |
---|---|---|
df58ecbe S |
1 | # coding: utf-8 |
2 | from __future__ import unicode_literals | |
3 | ||
549cb2a8 B |
4 | import re |
5 | ||
df58ecbe S |
6 | from .common import InfoExtractor |
7 | ||
549cb2a8 B |
8 | from ..utils import ( |
9 | parse_duration, | |
10 | traverse_obj, | |
11 | unified_timestamp, | |
12 | ) | |
13 | ||
df58ecbe S |
14 | |
15 | class RTVSIE(InfoExtractor): | |
549cb2a8 | 16 | _VALID_URL = r'https?://(?:www\.)?rtvs\.sk/(?:radio|televizia)/archiv(?:/\d+)?/(?P<id>\d+)/?(?:[#?]|$)' |
df58ecbe S |
17 | _TESTS = [{ |
18 | # radio archive | |
19 | 'url': 'http://www.rtvs.sk/radio/archiv/11224/414872', | |
20 | 'md5': '134d5d6debdeddf8a5d761cbc9edacb8', | |
21 | 'info_dict': { | |
22 | 'id': '414872', | |
23 | 'ext': 'mp3', | |
549cb2a8 B |
24 | 'title': 'Ostrov pokladov 1 časť.mp3', |
25 | 'duration': 2854, | |
26 | 'thumbnail': 'https://www.rtvs.sk/media/a501/image/file/2/0000/b1R8.rtvs.jpg', | |
27 | 'display_id': '135331', | |
df58ecbe S |
28 | } |
29 | }, { | |
30 | # tv archive | |
31 | 'url': 'http://www.rtvs.sk/televizia/archiv/8249/63118', | |
df58ecbe S |
32 | 'info_dict': { |
33 | 'id': '63118', | |
34 | 'ext': 'mp4', | |
35 | 'title': 'Amaro Džives - Náš deň', | |
549cb2a8 B |
36 | 'description': 'Galavečer pri príležitosti Medzinárodného dňa Rómov.', |
37 | 'thumbnail': 'https://www.rtvs.sk/media/a501/image/file/2/0031/L7Qm.amaro_dzives_png.jpg', | |
38 | 'timestamp': 1428555900, | |
39 | 'upload_date': '20150409', | |
40 | 'duration': 4986, | |
41 | } | |
42 | }, { | |
43 | # tv archive | |
44 | 'url': 'https://www.rtvs.sk/televizia/archiv/18083?utm_source=web&utm_medium=rozcestnik&utm_campaign=Robin', | |
45 | 'info_dict': { | |
46 | 'id': '18083', | |
47 | 'ext': 'mp4', | |
48 | 'title': 'Robin', | |
49 | 'description': 'md5:2f70505a7b8364491003d65ff7a0940a', | |
50 | 'timestamp': 1636652760, | |
51 | 'display_id': '307655', | |
52 | 'duration': 831, | |
53 | 'upload_date': '20211111', | |
54 | 'thumbnail': 'https://www.rtvs.sk/media/a501/image/file/2/0916/robin.jpg', | |
df58ecbe S |
55 | } |
56 | }] | |
57 | ||
58 | def _real_extract(self, url): | |
59 | video_id = self._match_id(url) | |
60 | ||
61 | webpage = self._download_webpage(url, video_id) | |
549cb2a8 B |
62 | iframe_id = self._search_regex( |
63 | r'<iframe[^>]+id\s*=\s*"player_[^_]+_([0-9]+)"', webpage, 'Iframe ID') | |
64 | iframe_url = self._search_regex( | |
65 | fr'<iframe[^>]+id\s*=\s*"player_[^_]+_{re.escape(iframe_id)}"[^>]+src\s*=\s*"([^"]+)"', webpage, 'Iframe URL') | |
66 | ||
67 | webpage = self._download_webpage(iframe_url, video_id, 'Downloading iframe') | |
68 | json_url = self._search_regex(r'var\s+url\s*=\s*"([^"]+)"\s*\+\s*ruurl', webpage, 'json URL') | |
69 | data = self._download_json(f'https:{json_url}b=mozilla&p=win&v=97&f=0&d=1', video_id) | |
df58ecbe | 70 | |
549cb2a8 B |
71 | if data.get('clip'): |
72 | data['playlist'] = [data['clip']] | |
df58ecbe | 73 | |
549cb2a8 B |
74 | if traverse_obj(data, ('playlist', 0, 'sources', 0, 'type')) == 'audio/mp3': |
75 | formats = [{'url': traverse_obj(data, ('playlist', 0, 'sources', 0, 'src'))}] | |
76 | else: | |
77 | formats = self._extract_m3u8_formats(traverse_obj(data, ('playlist', 0, 'sources', 0, 'src')), video_id) | |
78 | self._sort_formats(formats) | |
79 | ||
80 | return { | |
81 | 'id': video_id, | |
82 | 'display_id': iframe_id, | |
83 | 'title': traverse_obj(data, ('playlist', 0, 'title')), | |
84 | 'description': traverse_obj(data, ('playlist', 0, 'description')), | |
85 | 'duration': parse_duration(traverse_obj(data, ('playlist', 0, 'length'))), | |
86 | 'thumbnail': traverse_obj(data, ('playlist', 0, 'image')), | |
87 | 'timestamp': unified_timestamp(traverse_obj(data, ('playlist', 0, 'datetime_create'))), | |
88 | 'formats': formats | |
89 | } |