]> jfr.im git - yt-dlp.git/blame - yt_dlp/extractor/tv2hu.py
[extractor/FranceCulture] Fix extractor (#3874)
[yt-dlp.git] / yt_dlp / extractor / tv2hu.py
CommitLineData
3ef1d0c7 1# encoding: utf-8
3ef1d0c7 2from .common import InfoExtractor
58f68fe7
A
3from ..utils import (
4 traverse_obj,
5 UnsupportedError,
6)
3ef1d0c7 7
3ef1d0c7 8
e4d74e27 9class TV2HuIE(InfoExtractor):
58f68fe7
A
10 IE_NAME = 'tv2play.hu'
11 _VALID_URL = r'https?://(?:www\.)?tv2play\.hu/(?!szalag/)(?P<id>[^#&?]+)'
3ef1d0c7 12 _TESTS = [{
58f68fe7 13 'url': 'https://tv2play.hu/mintaapak/mintaapak_213_epizod_resz',
3ef1d0c7 14 'info_dict': {
58f68fe7 15 'id': '249240',
3ef1d0c7 16 'ext': 'mp4',
58f68fe7
A
17 'title': 'Mintaapák - 213. epizód',
18 'series': 'Mintaapák',
19 'duration': 2164,
20 'description': 'md5:7350147e75485a59598e806c47967b07',
21 'thumbnail': r're:^https?://.*\.jpg$',
22 'release_date': '20210825',
23 'season_number': None,
24 'episode_number': 213,
25 },
26 'params': {
27 'skip_download': True,
28 },
3ef1d0c7 29 }, {
58f68fe7
A
30 'url': 'https://tv2play.hu/taxi_2',
31 'md5': '585e58e2e090f34603804bb2c48e98d8',
32 'info_dict': {
33 'id': '199363',
34 'ext': 'mp4',
35 'title': 'Taxi 2',
36 'series': 'Taxi 2',
37 'duration': 5087,
38 'description': 'md5:47762155dc9a50241797ded101b1b08c',
39 'thumbnail': r're:^https?://.*\.jpg$',
40 'release_date': '20210118',
41 'season_number': None,
42 'episode_number': None,
43 },
44 'params': {
45 'skip_download': True,
46 },
3ef1d0c7
V
47 }]
48
49 def _real_extract(self, url):
58f68fe7
A
50 id = self._match_id(url)
51 json_data = self._download_json(f'https://tv2play.hu/api/search/{id}', id)
52
53 if json_data['contentType'] == 'showpage':
54 ribbon_ids = traverse_obj(json_data, ('pages', ..., 'tabs', ..., 'ribbonIds'), get_all=False, expected_type=list)
55 entries = [self.url_result(f'https://tv2play.hu/szalag/{ribbon_id}',
56 ie=TV2HuSeriesIE.ie_key(), video_id=ribbon_id) for ribbon_id in ribbon_ids]
57 return self.playlist_result(entries, playlist_id=id)
58 elif json_data['contentType'] != 'video':
59 raise UnsupportedError(url)
60
61 video_id = str(json_data['id'])
62 player_id = json_data.get('playerId')
63 series_json = json_data.get('seriesInfo', {})
64
65 video_json_url = self._download_json(f'https://tv2play.hu/api/streaming-url?playerId={player_id}', video_id)['url']
66 video_json = self._download_json(video_json_url, video_id)
67 m3u8_url = self._proto_relative_url(traverse_obj(video_json, ('bitrates', 'hls')))
68 formats, subtitles = self._extract_m3u8_formats_and_subtitles(m3u8_url, video_id)
3ef1d0c7
V
69 self._sort_formats(formats)
70
71 return {
72 'id': video_id,
58f68fe7
A
73 'title': json_data['title'],
74 'series': json_data.get('seriesTitle'),
75 'duration': json_data.get('length'),
76 'description': json_data.get('description'),
77 'thumbnail': 'https://tv2play.hu' + json_data.get('thumbnailUrl'),
78 'release_date': json_data.get('uploadedAt').replace('.', ''),
79 'season_number': series_json.get('seasonNr'),
80 'episode_number': series_json.get('episodeNr'),
e4d74e27 81 'formats': formats,
58f68fe7 82 'subtitles': subtitles,
3ef1d0c7 83 }
58f68fe7
A
84
85
86class TV2HuSeriesIE(InfoExtractor):
87 IE_NAME = 'tv2playseries.hu'
88 _VALID_URL = r'https?://(?:www\.)?tv2play\.hu/szalag/(?P<id>[^#&?]+)'
89
90 _TESTS = [{
91 'url': 'https://tv2play.hu/szalag/59?rendezes=nepszeruseg',
92 'playlist_mincount': 284,
93 'info_dict': {
94 'id': '59',
95 }
96 }]
97
98 def _real_extract(self, url):
99 id = self._match_id(url)
100 json_data = self._download_json(f'https://tv2play.hu/api/ribbons/{id}/0?size=100000', id)
101 entries = []
102 for card in json_data.get('cards', []):
103 video_id = card.get('slug')
104 if video_id:
105 entries.append(self.url_result(f'https://tv2play.hu/{video_id}',
106 ie=TV2HuIE.ie_key(), video_id=video_id))
107
108 return self.playlist_result(entries, playlist_id=id)