[tvp] Telewizja Polska: new extractor for tvp.pl, fixes #1719
[youtube-dl] / youtube_dl / extractor / tvp.py
1 # encoding: utf-8
2 import re
3 import json
4
5 from .common import InfoExtractor
6 from ..utils import (
7     determine_ext,
8     ExtractorError,
9     RegexNotFoundError,
10 )
11
12 class TvpIE(InfoExtractor):
13     IE_NAME = u'tvp.pl'
14     _VALID_URL = r'https?://www\.tvp\.pl/.*?wideo/(?P<date>\d+)/(?P<id>\d+)'
15     _INFO_URL = 'http://www.tvp.pl/pub/stat/videofileinfo?video_id=%s'
16
17
18     _TEST = {
19         u'url': u'http://www.tvp.pl/warszawa/magazyny/campusnews/wideo/31102013/12878238',
20         u'file': u'31.10.2013-12878238.wmv',
21         u'info_dict': {
22             u'title': u'31.10.2013',
23             u'description': u'31.10.2013',
24         },
25     }
26
27     def _real_extract(self, url):
28         mobj = re.match(self._VALID_URL, url)
29         video_id = mobj.group('id')
30         webpage = self._download_webpage(url, video_id, "Downloading video webpage")
31         json_params = self._download_webpage(self._INFO_URL % video_id, video_id, "Downloading video metadata")
32
33         try:
34             params = json.loads(json_params)
35         except:
36             raise ExtractorError(u'Invalid JSON')
37
38         self.report_extraction(video_id)
39         try:
40             video_url = params['video_url']
41         except KeyError:
42             raise ExtractorError('Missing JSON parameter: ' + sys.exc_info()[1])
43
44         try:
45             title = self._og_search_title(webpage)
46         except RegexNotFoundError:
47             title = video_id
48         info = {
49             'id': video_id,
50             'title': title,
51             'ext': 'wmv',
52             'url': video_url,
53         }
54         try:
55             info['description'] = self._og_search_description(webpage)
56             info['thumbnail'] = self._og_search_thumbnail(webpage)
57         except RegexNotFoundError:
58             pass
59
60         return info