Compare commits

...

8 Commits

Author SHA1 Message Date
Stefan Lobbenmeier
bc2124e496 autopep8 2024-12-26 09:26:31 -03:00
Stefan Lobbenmeier
9f7bad8677 use md5 for description 2024-12-26 09:23:02 -03:00
Stefan Lobbenmeier
5bca3bb9a0 replace rf with fr 2024-12-26 09:21:21 -03:00
Stefan Lobbenmeier
be42b07646 skip video that is no longer available 2024-12-26 08:53:19 -03:00
pukkandan
ee8e09e0cb
cleanup 2024-12-26 17:20:10 +05:30
Stefan Lobbenmeier
6cda50c0aa use fancy traverse_obj syntax from PR review suggestion 2024-12-26 08:46:17 -03:00
Stefan Lobbenmeier
e8c84f4ee3 replace seriesId with series_id 2024-12-26 08:40:33 -03:00
Stefan Lobbenmeier
1420dfaaf9 revert formatting from % back to f string 2024-12-26 08:37:43 -03:00

View File

@ -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'