mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2026-05-01 13:06:10 +00:00
Compare commits
8 Commits
96a79bbdae
...
bc2124e496
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bc2124e496 | ||
|
|
9f7bad8677 | ||
|
|
5bca3bb9a0 | ||
|
|
be42b07646 | ||
|
|
ee8e09e0cb | ||
|
|
6cda50c0aa | ||
|
|
e8c84f4ee3 | ||
|
|
1420dfaaf9 |
@ -29,11 +29,11 @@ class ZDFBaseIE(InfoExtractor):
|
||||
def _call_api(self, url, video_id, item, api_token=None, referrer=None):
|
||||
headers = {}
|
||||
if api_token:
|
||||
headers['Api-Auth'] = 'Bearer %s' % api_token
|
||||
headers['Api-Auth'] = f'Bearer {api_token}'
|
||||
if referrer:
|
||||
headers['Referer'] = referrer
|
||||
return self._download_json(
|
||||
url, video_id, 'Downloading JSON %s' % item, headers=headers)
|
||||
url, video_id, f'Downloading JSON {item}', headers=headers)
|
||||
|
||||
@staticmethod
|
||||
def _extract_subtitles(src):
|
||||
@ -137,6 +137,7 @@ class ZDFBaseIE(InfoExtractor):
|
||||
|
||||
class ZDFIE(ZDFBaseIE):
|
||||
_VALID_URL = r'https?://www\.zdf\.de/(?:[^/]+/)*(?P<id>[^/?#&]+)\.html'
|
||||
|
||||
_TESTS = [{
|
||||
# Same as https://www.phoenix.de/sendungen/ereignisse/corona-nachgehakt/wohin-fuehrt-der-protest-in-der-pandemie-a-2050630.html
|
||||
'url': 'https://www.zdf.de/politik/phoenix-sendungen/wohin-fuehrt-der-protest-in-der-pandemie-100.html',
|
||||
@ -195,7 +196,7 @@ class ZDFIE(ZDFBaseIE):
|
||||
'season': 'Staffel 1',
|
||||
'series': 'Die Magie der Farben',
|
||||
'season_number': 1,
|
||||
'seriesId': 'a39900dd-cdbd-4a6a-a413-44e8c6ae18bc',
|
||||
'series_id': 'a39900dd-cdbd-4a6a-a413-44e8c6ae18bc',
|
||||
'season_id': '5a92e619-8a0f-4410-a3d5-19c76fbebb37',
|
||||
'episode_number': 2,
|
||||
},
|
||||
@ -258,7 +259,7 @@ class ZDFIE(ZDFBaseIE):
|
||||
'upload_date': '20241015',
|
||||
'thumbnail': 'https://epg-image.zdf.de/fotobase-webdelivery/images/e2d7e55a-09f0-424e-ac73-6cac4dd65f35?layout=2400x1350',
|
||||
'series': 'SOKO Stuttgart',
|
||||
'seriesId': 'f862ce9a-6dd1-4388-a698-22b36ac4c9e9',
|
||||
'series_id': 'f862ce9a-6dd1-4388-a698-22b36ac4c9e9',
|
||||
'season': 'Staffel 11',
|
||||
'season_number': 11,
|
||||
'season_id': 'ae1b4990-6d87-4970-a571-caccf1ba2879',
|
||||
@ -280,18 +281,19 @@ class ZDFIE(ZDFBaseIE):
|
||||
'thumbnail': 'https://www.zdf.de/assets/unser-gruener-planet-making-of-1-tropen-100~3840x2160?cb=1653493335577',
|
||||
'episode': 'Making-of Unser grüner Planet - Tropen',
|
||||
},
|
||||
'skip': 'No longer available: "Leider kein Video verfügbar"',
|
||||
}, {
|
||||
'url': 'https://www.zdf.de/serien/northern-lights/begegnung-auf-der-bruecke-100.html',
|
||||
'info_dict': {
|
||||
'id': '240319_2310_sendung_not',
|
||||
'ext': 'mp4',
|
||||
'title': 'Begegnung auf der Brücke',
|
||||
'description': 'Lloyd begegnet an einem verregneten Abend in Dublin einer jungen Frau, die völlig durchnässt auf der Grattan Bridge steht. Es ist der Beginn einer außergewöhnlichen Freundschaft.',
|
||||
'description': 'md5:e53a555da87447f7f1207f10353f8e45',
|
||||
'thumbnail': 'https://epg-image.zdf.de/fotobase-webdelivery/images/c5ff1d1f-f5c8-4468-86ac-1b2f1dbecc76?layout=2400x1350',
|
||||
'upload_date': '20240319',
|
||||
'duration': 3083.0,
|
||||
'timestamp': 1710886200,
|
||||
'seriesId': '1d7a1879-01ee-4468-8237-c6b4ecd633c7',
|
||||
'series_id': '1d7a1879-01ee-4468-8237-c6b4ecd633c7',
|
||||
'series': 'Northern Lights',
|
||||
'season': 'Staffel 1',
|
||||
'season_number': 1,
|
||||
@ -344,7 +346,6 @@ class ZDFIE(ZDFBaseIE):
|
||||
'title': chap.get('anchorLabel'),
|
||||
} for chap, next_chap in zip(chapter_marks, chapter_marks[1:])]
|
||||
|
||||
target_info = traverse_obj(content, ('programmeItem', 0, 'http://zdf.de/rels/target'))
|
||||
return merge_dicts(info, {
|
||||
'title': title,
|
||||
'description': content.get('leadParagraph') or content.get('teasertext'),
|
||||
@ -352,14 +353,16 @@ class ZDFIE(ZDFBaseIE):
|
||||
'timestamp': unified_timestamp(content.get('editorialDate')),
|
||||
'thumbnails': thumbnails,
|
||||
'chapters': chapters or None,
|
||||
'seriesId': traverse_obj(target_info, ('http://zdf.de/rels/cmdm/series', 'seriesUuid')),
|
||||
'series': traverse_obj(target_info, ('http://zdf.de/rels/cmdm/series', 'seriesTitle')),
|
||||
'season': traverse_obj(target_info, ('http://zdf.de/rels/cmdm/season', 'seasonTitle')),
|
||||
'season_number': traverse_obj(target_info, ('http://zdf.de/rels/cmdm/season', 'seasonNumber')),
|
||||
'season_id': traverse_obj(target_info, ('http://zdf.de/rels/cmdm/season', 'seasonUuid')),
|
||||
'episode': title,
|
||||
'episode_number': traverse_obj(target_info, 'episodeNumber'),
|
||||
'episode_id': traverse_obj(target_info, 'contentId'),
|
||||
**traverse_obj(content, ('programmeItem', 0, 'http://zdf.de/rels/target', {
|
||||
'series_id': ('http://zdf.de/rels/cmdm/series', 'seriesUuid'),
|
||||
'series': ('http://zdf.de/rels/cmdm/series', 'seriesTitle'),
|
||||
'season': ('http://zdf.de/rels/cmdm/season', 'seasonTitle'),
|
||||
'season_number': ('http://zdf.de/rels/cmdm/season', 'seasonNumber'),
|
||||
'season_id': ('http://zdf.de/rels/cmdm/season', 'seasonUuid'),
|
||||
'episode_number': 'episodeNumber',
|
||||
'episode_id': 'contentId',
|
||||
})),
|
||||
})
|
||||
|
||||
def _extract_regular(self, url, player, video_id):
|
||||
@ -375,7 +378,7 @@ class ZDFIE(ZDFBaseIE):
|
||||
|
||||
def _extract_mobile(self, video_id):
|
||||
video = self._download_json(
|
||||
'https://zdf-cdn.live.cellular.de/mediathekV2/document/%s' % video_id,
|
||||
f'https://zdf-cdn.live.cellular.de/mediathekV2/document/{video_id}',
|
||||
video_id)
|
||||
|
||||
formats = []
|
||||
@ -470,7 +473,7 @@ class ZDFChannelIE(ZDFBaseIE):
|
||||
webpage = self._download_webpage(url, channel_id)
|
||||
|
||||
matches = re.finditer(
|
||||
r'''<div\b[^>]*?\sdata-plusbar-id\s*=\s*(["'])(?P<p_id>[\w-]+)\1[^>]*?\sdata-plusbar-url=\1(?P<url>%s)\1''' % ZDFIE._VALID_URL,
|
||||
fr'''<div\b[^>]*?\sdata-plusbar-id\s*=\s*(["'])(?P<p_id>[\w-]+)\1[^>]*?\sdata-plusbar-url=\1(?P<url>{ZDFIE._VALID_URL})\1''',
|
||||
webpage)
|
||||
|
||||
if self._downloader.params.get('noplaylist', False):
|
||||
@ -481,11 +484,11 @@ class ZDFChannelIE(ZDFBaseIE):
|
||||
if entry:
|
||||
return entry
|
||||
else:
|
||||
self.to_screen('Downloading playlist %s - add --no-playlist to download just the main video' % (channel_id, ))
|
||||
self.to_screen(f'Downloading playlist {channel_id} - add --no-playlist to download just the main video')
|
||||
|
||||
def check_video(m):
|
||||
v_ref = self._search_regex(
|
||||
r'''(<a\b[^>]*?\shref\s*=[^>]+?\sdata-target-id\s*=\s*(["'])%s\2[^>]*>)''' % (m.group('p_id'), ),
|
||||
fr'''(<a\b[^>]*?\shref\s*=[^>]+?\sdata-target-id\s*=\s*(["']){m.group("p_id")}\2[^>]*>)''',
|
||||
webpage, 'check id', default='')
|
||||
v_ref = extract_attributes(v_ref)
|
||||
return v_ref.get('data-target-video-type') != 'novideo'
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user