2 from __future__ import unicode_literals
7 from .common import InfoExtractor
14 class ORFIE(InfoExtractor):
15 _VALID_URL = r'https?://tvthek\.orf\.at/(?:programs/.+?/episodes|topics/.+?|program/[^/]+)/(?P<id>\d+)'
18 'url': 'http://tvthek.orf.at/program/matinee-Was-Sie-schon-immer-ueber-Klassik-wissen-wollten/7317210/Was-Sie-schon-immer-ueber-Klassik-wissen-wollten/7319746/Was-Sie-schon-immer-ueber-Klassik-wissen-wollten/7319747',
19 'file': '7319747.mp4',
20 'md5': 'bd803c5d8c32d3c64a0ea4b4eeddf375',
22 'title': 'Was Sie schon immer über Klassik wissen wollten',
23 'description': 'md5:0ddf0d5f0060bd53f744edaa5c2e04a4',
25 'upload_date': '20140105',
27 'skip': 'Blocked outside of Austria',
30 def _real_extract(self, url):
31 mobj = re.match(self._VALID_URL, url)
32 playlist_id = mobj.group('id')
33 webpage = self._download_webpage(url, playlist_id)
35 data_json = self._search_regex(
36 r'initializeAdworx\((.+?)\);\n', webpage, 'video info')
37 all_data = json.loads(data_json)
38 sdata = all_data[0]['values']['segments']
40 def quality_to_int(s):
41 m = re.search('([0-9]+)', s)
44 return int(m.group(1))
50 'preference': -10 if fd['delivery'] == 'hls' else None,
51 'format_id': '%s-%s-%s' % (
52 fd['delivery'], fd['quality'], fd['quality_string']),
54 'protocol': fd['protocol'],
55 'quality': quality_to_int(fd['quality']),
56 } for fd in sd['playlist_item_array']['sources']]
58 # Check for geoblocking.
59 # There is a property is_geoprotection, but that's always false
60 geo_str = sd.get('geoprotection_string')
66 if re.match(r'^https?://.*\.mp4$', f['url']))
70 req = HEADRequest(http_url)
71 self._request_webpage(
73 note='Testing for geoblocking',
75 'This video seems to be blocked outside of %s. '
76 'You may want to try the streaming-* formats.')
80 self._sort_formats(formats)
82 upload_date = unified_strdate(sd['created_date'])
86 'title': sd['header'],
88 'description': sd.get('description'),
89 'duration': int(sd['duration_in_seconds']),
90 'upload_date': upload_date,
91 'thumbnail': sd.get('image_full_url'),