]>
Commit | Line | Data |
---|---|---|
27865b21 MH |
1 | # encoding: utf-8 |
2 | from __future__ import unicode_literals | |
3 | ||
27865b21 | 4 | from .common import InfoExtractor |
8e1f9374 | 5 | from ..utils import int_or_none |
27865b21 MH |
6 | |
7 | ||
8 | class AftonbladetIE(InfoExtractor): | |
866b296d | 9 | _VALID_URL = r'http://tv\.aftonbladet\.se/abtv/articles/(?P<id>[0-9]+)' |
27865b21 | 10 | _TEST = { |
866b296d | 11 | 'url': 'http://tv.aftonbladet.se/abtv/articles/36015', |
27865b21 | 12 | 'info_dict': { |
866b296d | 13 | 'id': '36015', |
27865b21 MH |
14 | 'ext': 'mp4', |
15 | 'title': 'Vulkanutbrott i rymden - nu släpper NASA bilderna', | |
16 | 'description': 'Jupiters måne mest aktiv av alla himlakroppar', | |
69f83640 | 17 | 'timestamp': 1394142732, |
27865b21 MH |
18 | 'upload_date': '20140306', |
19 | }, | |
20 | } | |
21 | ||
22 | def _real_extract(self, url): | |
d8620423 | 23 | video_id = self._match_id(url) |
27865b21 MH |
24 | webpage = self._download_webpage(url, video_id) |
25 | ||
26 | # find internal video meta data | |
69f83640 | 27 | meta_url = 'http://aftonbladet-play.drlib.aptoma.no/video/%s.json' |
866b296d NJ |
28 | player_config = self._parse_json(self._html_search_regex( |
29 | r'data-player-config="([^"]+)"', webpage, 'player config'), video_id) | |
30 | internal_meta_id = player_config['videoId'] | |
69f83640 | 31 | internal_meta_url = meta_url % internal_meta_id |
fbc2dcb4 PH |
32 | internal_meta_json = self._download_json( |
33 | internal_meta_url, video_id, 'Downloading video meta data') | |
27865b21 MH |
34 | |
35 | # find internal video formats | |
69f83640 | 36 | format_url = 'http://aftonbladet-play.videodata.drvideo.aptoma.no/actions/video/?id=%s' |
27865b21 | 37 | internal_video_id = internal_meta_json['videoId'] |
69f83640 | 38 | internal_formats_url = format_url % internal_video_id |
fbc2dcb4 PH |
39 | internal_formats_json = self._download_json( |
40 | internal_formats_url, video_id, 'Downloading video formats') | |
27865b21 | 41 | |
27865b21 | 42 | formats = [] |
fbc2dcb4 | 43 | for fmt in internal_formats_json['formats']['http']['pseudostreaming']['mp4']: |
27865b21 MH |
44 | p = fmt['paths'][0] |
45 | formats.append({ | |
46 | 'url': 'http://%s:%d/%s/%s' % (p['address'], p['port'], p['path'], p['filename']), | |
47 | 'ext': 'mp4', | |
8e1f9374 S |
48 | 'width': int_or_none(fmt.get('width')), |
49 | 'height': int_or_none(fmt.get('height')), | |
50 | 'tbr': int_or_none(fmt.get('bitrate')), | |
27865b21 MH |
51 | 'protocol': 'http', |
52 | }) | |
fbc2dcb4 | 53 | self._sort_formats(formats) |
27865b21 | 54 | |
fbc2dcb4 | 55 | return { |
27865b21 MH |
56 | 'id': video_id, |
57 | 'title': internal_meta_json['title'], | |
58 | 'formats': formats, | |
8e1f9374 S |
59 | 'thumbnail': internal_meta_json.get('imageUrl'), |
60 | 'description': internal_meta_json.get('shortPreamble'), | |
61 | 'timestamp': int_or_none(internal_meta_json.get('timePublished')), | |
62 | 'duration': int_or_none(internal_meta_json.get('duration')), | |
63 | 'view_count': int_or_none(internal_meta_json.get('views')), | |
fbc2dcb4 | 64 | } |