[vier] Add new extractor
[youtube-dl] / youtube_dl / extractor / vier.py
1 from .common import InfoExtractor
2 from ..utils import escape_url
3
4 import re
5
6 class VierIE (InfoExtractor):
7   _VALID_URL = r'(?:http://)?www.vier.be/(?P<program>.*)/videos/(.+?)/(?P<id>\d*)'
8   _TEST = {
9       'url': 'http://www.vier.be/planb/videos/het-wordt-warm-de-moestuin/16129',
10       'md5': 'bf48f4eb998cbde44ecd02fc42c51149',
11       'info_dict': {
12           'id': '16129',
13           'ext': 'mp4',
14           'title': 'Het wordt warm in De Moestuin',
15           'description': 'De vele uren werk eisen hun tol. Wim droomt van assistentie...',
16       },
17   }
18
19   def _real_extract (self, url):
20     mobj = re.match (self._VALID_URL, url)
21
22     program = mobj.group ('program')
23     video_id = mobj.group ('id')
24
25     webpage = self._download_webpage (url, video_id)
26
27     title = self._html_search_regex(r'<meta property="og:title" content="(.+?)" />', webpage, u'title')
28     description = self._html_search_regex (r'<meta property="og:description" content="(.+?)" />', webpage, u'description')
29     vod_id =  self._html_search_regex(r'"filename" : "(.+?)"', webpage, u'playlist URL')
30     url = escape_url ("http://vod.streamcloud.be/vier_vod/mp4:_definst_/" + vod_id + ".mp4/playlist.m3u8")
31
32     return {
33         'id': video_id,
34         'title': title,
35         'description': description,
36         'formats': self._extract_m3u8_formats(url, video_id, 'mp4'),
37     }
38
39 class VierVideosIE (InfoExtractor):
40   _VALID_URL = r'http://www.vier.be/(?P<program>.*)/videos(\?page=(?P<page>\d*))?$'
41   _TESTS = [{
42     'url': 'http://www.vier.be/demoestuin/videos',
43     'info_dict': {
44       'id': 'demoestuin page(0)',
45     },
46     'playlist_mincount': 20,
47   },
48   {
49     'url': 'http://www.vier.be/demoestuin/videos?page=6',
50     'info_dict': {
51       'id': 'demoestuin page(6)',
52     },
53     'playlist_mincount': 20,
54   }]
55
56   def _real_extract (self, url):
57     mobj = re.match (self._VALID_URL, url)
58
59     program = mobj.group ('program')
60     page = mobj.group ('page')
61     if page == None:
62       page = 0
63
64     videos_id = program + " page(" + str (page) + ")"
65     videos_page = self._download_webpage (url, videos_id, note='Retrieving videos page')
66
67     return {
68         '_type': 'playlist',
69         'id': videos_id,
70         'entries': [{
71             '_type': 'url',
72             'url': "http://www.vier.be/" + eurl[0],
73             'ie_key': 'Vier',
74           } for eurl in re.findall (r'<h3><a href="(.+?)">(.+?)</a></h3>', videos_page)]
75         }