]>
Commit | Line | Data |
---|---|---|
25fadd06 | 1 | # coding: utf-8 |
2 | from __future__ import unicode_literals | |
3 | ||
4 | from .common import InfoExtractor | |
5 | ||
6 | from ..utils import ( | |
7 | float_or_none, | |
896c7a23 | 8 | unescapeHTML, |
25fadd06 | 9 | ) |
10 | ||
11 | ||
12 | class RteIE(InfoExtractor): | |
896c7a23 | 13 | IE_NAME = 'rte' |
14 | IE_DESC = 'Raidió Teilifís Éireann TV' | |
6df7179e | 15 | _VALID_URL = r'https?://(?:www\.)?rte\.ie/player/[^/]{2,3}/show/[^/]+/(?P<id>[0-9]+)' |
25fadd06 | 16 | _TEST = { |
36eb802b | 17 | 'url': 'http://www.rte.ie/player/ie/show/iwitness-862/10478715/', |
25fadd06 | 18 | 'info_dict': { |
36eb802b | 19 | 'id': '10478715', |
896c7a23 | 20 | 'ext': 'flv', |
36eb802b | 21 | 'title': 'Watch iWitness online', |
25fadd06 | 22 | 'thumbnail': 're:^https?://.*\.jpg$', |
36eb802b JMF |
23 | 'description': 'iWitness : The spirit of Ireland, one voice and one minute at a time.', |
24 | 'duration': 60.046, | |
ea1d5bdc PH |
25 | }, |
26 | 'params': { | |
27 | 'skip_download': 'f4m fails with --test atm' | |
25fadd06 | 28 | } |
29 | } | |
3462af03 | 30 | |
25fadd06 | 31 | def _real_extract(self, url): |
32 | video_id = self._match_id(url) | |
25fadd06 | 33 | webpage = self._download_webpage(url, video_id) |
ea1d5bdc | 34 | |
25fadd06 | 35 | title = self._og_search_title(webpage) |
ea1d5bdc PH |
36 | description = self._html_search_meta('description', webpage, 'description') |
37 | duration = float_or_none(self._html_search_meta( | |
38 | 'duration', webpage, 'duration', fatal=False), 1000) | |
39 | ||
40 | thumbnail_id = self._search_regex( | |
41 | r'<meta name="thumbnail" content="uri:irus:(.*?)" />', webpage, 'thumbnail') | |
42 | thumbnail = 'http://img.rasset.ie/' + thumbnail_id + '.jpg' | |
43 | ||
25fadd06 | 44 | feeds_url = self._html_search_meta("feeds-prefix", webpage, 'feeds url') + video_id |
45 | json_string = self._download_json(feeds_url, video_id) | |
ea1d5bdc | 46 | |
25fadd06 | 47 | # f4m_url = server + relative_url |
48 | f4m_url = json_string['shows'][0]['media:group'][0]['rte:server'] + json_string['shows'][0]['media:group'][0]['url'] | |
49 | f4m_formats = self._extract_f4m_formats(f4m_url, video_id) | |
ea1d5bdc | 50 | |
25fadd06 | 51 | return { |
52 | 'id': video_id, | |
53 | 'title': title, | |
54 | 'formats': f4m_formats, | |
55 | 'description': description, | |
56 | 'thumbnail': thumbnail, | |
57 | 'duration': duration, | |
ea1d5bdc | 58 | } |
896c7a23 | 59 | |
60 | ||
896c7a23 | 61 | class RteRadioIE(InfoExtractor): |
62 | IE_NAME = 'rte:radio' | |
63 | IE_DESC = 'Raidió Teilifís Éireann radio' | |
64 | # Radioplayer URLs have the specifier #!rii=<channel_id>:<id>:<playable_item_id>:<date>: | |
65 | # where the IDs are int/empty, the date is DD-MM-YYYY, and the specifier may be truncated. | |
66 | # An <id> uniquely defines an individual recording, and is the only part we require. | |
67 | _VALID_URL = r'https?://(?:www\.)?rte\.ie/radio/utils/radioplayer/rteradioweb\.html#!rii=(?:[0-9]*)(?:%3A|:)(?P<id>[0-9]+)' | |
68 | ||
69 | _TEST = { | |
70 | 'url': 'http://www.rte.ie/radio/utils/radioplayer/rteradioweb.html#!rii=16:10507902:2414:27-12-2015:', | |
71 | 'info_dict': { | |
72 | 'id': '10507902', | |
73 | 'ext': 'flv', | |
74 | 'title': 'Gloria', | |
75 | 'thumbnail': 're:^https?://.*\.jpg$', | |
76 | 'description': 'Tim Thurston guides you through a millennium of sacred music featuring Gregorian chant, pure solo voices and choral masterpieces, framed around the glorious music of J.S. Bach.', | |
77 | 'duration': 7230.0, | |
78 | }, | |
79 | 'params': { | |
80 | 'skip_download': 'f4m fails with --test atm' | |
81 | } | |
82 | } | |
83 | ||
84 | def _real_extract(self, url): | |
85 | item_id = self._match_id(url) | |
86 | feeds_url = 'http://www.rte.ie/rteavgen/getplaylist/?type=web&format=json&id=' + item_id | |
87 | json_string = self._download_json(feeds_url, item_id) | |
88 | ||
89 | # NB the string values in the JSON are stored using XML escaping(!) | |
90 | show = json_string['shows'][0] | |
91 | title = unescapeHTML(show['title']) | |
92 | description = unescapeHTML(show.get('description')) | |
93 | thumbnail = show.get('thumbnail') | |
94 | duration = float_or_none(show.get('duration'), 1000) | |
95 | ||
96 | mg = show['media:group'][0] | |
97 | ||
98 | formats = [] | |
99 | ||
100 | if mg.get('url') and not mg['url'].startswith('rtmpe:'): | |
101 | formats.append({'url': mg.get('url')}) | |
102 | ||
103 | if mg.get('hls_server') and mg.get('hls_url'): | |
0238451f | 104 | hls_url = mg['hls_server'] + mg['hls_url'] |
896c7a23 | 105 | hls_formats = self._extract_m3u8_formats( |
0238451f | 106 | hls_url, item_id, 'mp4', m3u8_id='hls', fatal=False) |
896c7a23 | 107 | formats.extend(hls_formats) |
108 | ||
109 | if mg.get('hds_server') and mg.get('hds_url'): | |
110 | f4m_url = mg['hds_server'] + mg['hds_url'] | |
111 | f4m_formats = self._extract_f4m_formats( | |
0238451f | 112 | f4m_url, item_id, f4m_id='hds', fatal=False) |
896c7a23 | 113 | formats.extend(f4m_formats) |
114 | ||
115 | return { | |
116 | 'id': item_id, | |
117 | 'title': title, | |
118 | 'formats': formats, | |
119 | 'description': description, | |
120 | 'thumbnail': thumbnail, | |
121 | 'duration': duration, | |
122 | } |