1
0
mirror of https://github.com/yt-dlp/yt-dlp.git synced 2025-06-28 01:18:30 +00:00
yt-dlp/yt_dlp/extractor/tvnoe.py
2025-06-02 02:17:51 +09:00

81 lines
3.1 KiB
Python

import re
from .common import InfoExtractor
from ..utils import (
clean_html,
extract_attributes,
js_to_json,
mimetype2ext,
unified_strdate,
urljoin,
)
from ..utils.traversal import find_element, traverse_obj
class TVNoeIE(InfoExtractor):
IE_NAME = 'tvnoe'
IE_DESC = 'Televize Noe'
_VALID_URL = r'https?://(?:www\.)?tvnoe\.cz/porad/(?P<id>[\w-]+)'
_TESTS = [{
'url': 'https://www.tvnoe.cz/porad/43216-outdoor-films-s-mudr-tomasem-kempnym-pomahat-potrebnym-nejen-u-nas',
'info_dict': {
'id': '43216-outdoor-films-s-mudr-tomasem-kempnym-pomahat-potrebnym-nejen-u-nas',
'ext': 'mp4',
'title': 'Pomáhat potřebným nejen u nás',
'description': 'md5:78b538ee32f7e881ec23b9c278a0ff3a',
'release_date': '20250531',
'series': 'Outdoor Films s MUDr. Tomášem Kempným',
'thumbnail': r're:https?://www\.tvnoe\.cz/.+\.jpg',
},
}, {
'url': 'https://www.tvnoe.cz/porad/43205-zamysleni-tomase-halika-7-nedele-velikonocni',
'info_dict': {
'id': '43205-zamysleni-tomase-halika-7-nedele-velikonocni',
'ext': 'mp4',
'title': '7. neděle velikonoční',
'description': 'md5:6bb9908efc59abe60e1c8c7c0e9bb6cd',
'release_date': '20250531',
'series': 'Zamyšlení Tomáše Halíka',
'thumbnail': r're:https?://www\.tvnoe\.cz/.+\.jpg',
},
}]
def _real_extract(self, url):
video_id = self._match_id(url)
webpage = self._download_webpage(url, video_id)
player = self._search_json(
r'var\s+INIT_PLAYER\s*=\s*', webpage, 'init player',
video_id, transform_source=js_to_json, fatal=True)
formats = []
for source in traverse_obj(player, ('tracks', ..., lambda _, v: v['src'])):
src_url = source['src']
ext = mimetype2ext(source.get('type'))
if ext == 'm3u8':
fmts = self._extract_m3u8_formats(
src_url, video_id, 'mp4', m3u8_id='hls', fatal=False)
elif ext == 'mpd':
fmts = self._extract_mpd_formats(
src_url, video_id, mpd_id='dash', fatal=False)
else:
self.report_warning(f'Unsupported stream type: {ext}')
continue
formats.extend(fmts)
return {
'id': video_id,
'description': clean_html(self._search_regex(
r'<p\s+class="">(.+)</p>', webpage, 'description', default='')),
'formats': formats,
**traverse_obj(webpage, {
'title': ({find_element(tag='h2')}, {clean_html}),
'release_date': (
{re.compile(r'\d{1,2}\.\d{1,2}\.\d{4}').findall}, filter, ..., {unified_strdate}, any),
'series': ({find_element(tag='h1')}, {clean_html}),
'thumbnail': (
{find_element(id='player-live', html=True)}, {extract_attributes},
'poster', {urljoin('https://www.tvnoe.cz/')}),
}),
}