]> jfr.im git - yt-dlp.git/blame - youtube_dl/extractor/tvp.py
[ndtv] Modernize
[yt-dlp.git] / youtube_dl / extractor / tvp.py
CommitLineData
29f400b9 1# -*- coding: utf-8 -*-
24144e3b 2from __future__ import unicode_literals
5137ebac 3
29f400b9
TF
4import re
5
5137ebac 6from .common import InfoExtractor
c3a3028f 7
5137ebac
MC
8
9class TvpIE(InfoExtractor):
24144e3b 10 IE_NAME = 'tvp.pl'
fb4b030a
PH
11 _VALID_URL = r'https?://(?:vod|www)\.tvp\.pl/.*/(?P<id>\d+)$'
12
13 _TESTS = [{
14 'url': 'http://vod.tvp.pl/filmy-fabularne/filmy-za-darmo/ogniem-i-mieczem/wideo/odc-2/4278035',
15 'info_dict': {
16 'id': '4278035',
17 'ext': 'wmv',
18 'title': 'Ogniem i mieczem, odc. 2',
19 'description': 'Bohun dowiaduje się o złamaniu przez kniahinię danego mu słowa i wyrusza do Rozłogów. Helenie w ostatniej chwili udaje się uciec dzięki pomocy Zagłoby.',
20 },
21 }, {
22 'url': 'http://vod.tvp.pl/seriale/obyczajowe/czas-honoru/sezon-1-1-13/i-seria-odc-13/194536',
23 'info_dict': {
24 'id': '194536',
25 'ext': 'mp4',
26 'title': 'Czas honoru, I seria – odc. 13',
27 # 'description': 'WŁADEK\nCzesław prosi Marię o dostarczenie Władkowi zarazki tyfusu. Jeśli zachoruje zostanie przewieziony do szpitala skąd łatwiej będzie go odbić. Czy matka zdecyduje się zarazić syna? Karol odwiedza Wandę przyznaje się, że ją oszukiwał, ale ostrzega też, że grozi jej aresztowanie i nalega, żeby wyjechała z Warszawy. Czy dziewczyna zdecyduje się znów oddalić od ukochanego? Rozpoczyna się akcja odbicia Władka.',
28 },
29 }, {
30 'url': 'http://www.tvp.pl/there-can-be-anything-so-i-shortened-it/17916176',
31 'info_dict': {
32 'id': '17916176',
33 'ext': 'mp4',
34 'title': 'TVP Gorzów pokaże filmy studentów z podroży dookoła świata',
35 },
36 'params': {
37 # m3u8 download
38 'skip_download': 'true',
5137ebac 39 },
fb4b030a
PH
40 }, {
41 'url': 'http://vod.tvp.pl/seriale/obyczajowe/na-sygnale/sezon-2-27-/odc-39/17834272',
42 'info_dict': {
43 'id': '17834272',
44 'ext': 'mp4',
45 'title': 'Na sygnale, odc. 39',
46 'description': 'Ekipa Wiktora ratuje młodą matkę, która spadła ze schodów trzymając na rękach noworodka. Okazuje się, że dziewczyna jest surogatką, a biologiczni rodzice dziecka próbują zmusić ją do oddania synka…',
47 },
48 'params': {
49 # m3u8 download
50 'skip_download': 'true',
51 },
52 }]
5137ebac
MC
53
54 def _real_extract(self, url):
fb4b030a 55 video_id = self._match_id(url)
29f400b9
TF
56 webpage = self._download_webpage(
57 'http://www.tvp.pl/sess/tvplayer.php?object_id=%s' % video_id, video_id)
fb4b030a 58
29f400b9
TF
59 title = self._og_search_title(webpage)
60 series = self._search_regex(
61 r'{name:\s*([\'"])SeriesTitle\1,\s*value:\s*\1(?P<series>.*?)\1},',
62 webpage, 'series', group='series', default=None)
63 if series is not None and series not in title:
64 title = '%s, %s' % (series, title)
fb4b030a
PH
65 description = self._og_search_description(webpage, default=None)
66
29f400b9
TF
67 video_url = self._search_regex(
68 r'0:{src:([\'"])(?P<url>.*?)\1', webpage, 'formats', group='url', default=None)
69 if video_url is None:
70 video_url = self._download_json(
71 'http://www.tvp.pl/pub/stat/videofileinfo?video_id=%s' % video_id,
72 video_id)['video_url']
73
74 ext = video_url.rsplit('.', 1)[-1]
75 if ext != 'ism/manifest':
76 if '/' in ext:
77 ext = 'mp4'
fb4b030a
PH
78 formats = [{
79 'format_id': 'direct',
29f400b9 80 'url': video_url,
fb4b030a
PH
81 'ext': ext,
82 }]
29f400b9
TF
83 else:
84 m3u8_url = re.sub('([^/]*)\.ism/manifest', r'\1.ism/\1.m3u8', video_url)
85 formats = self._extract_m3u8_formats(m3u8_url, video_id, 'mp4')
fb4b030a
PH
86
87 self._sort_formats(formats)
88
89 return {
90 'id': video_id,
91 'title': title,
92 'thumbnail': self._og_search_thumbnail(webpage),
93 'description': description,
94 'formats': formats,
95 }
6ce2c678
TF
96
97
98class TvpSeriesIE(InfoExtractor):
99 IE_NAME = 'tvp.pl:Series'
100 _VALID_URL = r'https?://vod\.tvp\.pl/(?:[^/]+/){2}(?P<id>[^/]+)/?$'
101
fb4b030a
PH
102 _TESTS = [{
103 'url': 'http://vod.tvp.pl/filmy-fabularne/filmy-za-darmo/ogniem-i-mieczem',
104 'info_dict': {
105 'title': 'Ogniem i mieczem',
106 'id': '4278026',
107 },
108 'playlist_count': 4,
109 }, {
110 'url': 'http://vod.tvp.pl/audycje/podroze/boso-przez-swiat',
111 'info_dict': {
112 'title': 'Boso przez świat',
113 'id': '9329207',
114 },
115 'playlist_count': 86,
116 }]
6ce2c678 117
6ce2c678
TF
118 def _real_extract(self, url):
119 display_id = self._match_id(url)
2415951e 120 webpage = self._download_webpage(url, display_id, tries=5)
fb4b030a 121
6ce2c678 122 title = self._html_search_regex(
2415951e 123 r'(?s) id=[\'"]path[\'"]>(?:.*? / ){2}(.*?)</span>', webpage, 'series')
6ce2c678 124 playlist_id = self._search_regex(r'nodeId:\s*(\d+)', webpage, 'playlist id')
2415951e 125 playlist = self._download_webpage(
6ce2c678 126 'http://vod.tvp.pl/vod/seriesAjax?type=series&nodeId=%s&recommend'
fb4b030a
PH
127 'edId=0&sort=&page=0&pageSize=10000' % playlist_id, display_id, tries=5,
128 note='Downloading playlist')
129
6ce2c678
TF
130 videos_paths = re.findall(
131 '(?s)class="shortTitle">.*?href="(/[^"]+)', playlist)
132 entries = [
133 self.url_result('http://vod.tvp.pl%s' % v_path, ie=TvpIE.ie_key())
134 for v_path in videos_paths]
fb4b030a 135
6ce2c678
TF
136 return {
137 '_type': 'playlist',
138 'id': playlist_id,
139 'display_id': display_id,
140 'title': title,
141 'entries': entries,
142 }