Compare commits

..

2 Commits

Author SHA1 Message Date
bashonly
27afb31edc
[ie/tarangplus] Sanitize m3u8 URLs (#15502)
Fix 260ba3abba2849aa175dd0bcfec308fc6ba6a678

Closes #15501
Authored by: bashonly
2026-01-06 05:44:30 +00:00
InvalidUsernameException
48b845a296
[ie/zdf] Support sister sites URLs (#15370)
Closes #13319
Authored by: InvalidUsernameException
2026-01-06 04:56:18 +00:00
2 changed files with 158 additions and 129 deletions

View File

@ -2,6 +2,7 @@ import base64
import binascii import binascii
import functools import functools
import re import re
import urllib.parse
from .common import InfoExtractor from .common import InfoExtractor
from ..dependencies import Cryptodome from ..dependencies import Cryptodome
@ -36,7 +37,7 @@ class TarangPlusVideoIE(TarangPlusBaseIE):
'ext': 'mp4', 'ext': 'mp4',
'title': 'Khitpit Ep-10', 'title': 'Khitpit Ep-10',
'description': 'md5:a45b805cb628e15c853d78b0406eab48', 'description': 'md5:a45b805cb628e15c853d78b0406eab48',
'thumbnail': r're:https?://.*\.jpg', 'thumbnail': r're:https?://.+/.+\.jpg',
'duration': 756.0, 'duration': 756.0,
'timestamp': 1740355200, 'timestamp': 1740355200,
'upload_date': '20250224', 'upload_date': '20250224',
@ -52,13 +53,30 @@ class TarangPlusVideoIE(TarangPlusBaseIE):
'ext': 'mp4', 'ext': 'mp4',
'title': 'Bada Bohu | Ep -233', 'title': 'Bada Bohu | Ep -233',
'description': 'md5:e6b8e7edc9e60b92c1b390f8789ecd69', 'description': 'md5:e6b8e7edc9e60b92c1b390f8789ecd69',
'thumbnail': r're:https?://.*\.jpg', 'thumbnail': r're:https?://.+/.+\.jpg',
'duration': 1392.0, 'duration': 1392.0,
'timestamp': 1745539200, 'timestamp': 1745539200,
'upload_date': '20250425', 'upload_date': '20250425',
'media_type': 'episode', 'media_type': 'episode',
'categories': ['Prime'], 'categories': ['Prime'],
}, },
}, {
# Decrypted m3u8 URL has trailing control characters that need to be stripped
'url': 'https://tarangplus.in/tarangaplus-originals/ichha/ichha-teaser-1',
'md5': '16ee43fe21ad8b6e652ec65eba38a64e',
'info_dict': {
'id': '5f0f252d3326af0720000342',
'ext': 'mp4',
'display_id': 'ichha-teaser-1',
'title': 'Ichha Teaser',
'description': 'md5:c724b0b0669a2cefdada3711cec792e6',
'media_type': 'episode',
'duration': 21.0,
'thumbnail': r're:https?://.+/.+\.jpg',
'categories': ['Originals'],
'timestamp': 1758153600,
'upload_date': '20250918',
},
}, { }, {
'url': 'https://tarangplus.in/short/ai-maa/ai-maa', 'url': 'https://tarangplus.in/short/ai-maa/ai-maa',
'only_matching': True, 'only_matching': True,
@ -100,7 +118,8 @@ class TarangPlusVideoIE(TarangPlusBaseIE):
m.group('k'): m.group('v') m.group('k'): m.group('v')
for m in re.finditer(r'(?:^|\|)(?P<k>[a-z_]+)=(?P<v>(?:(?!\|[a-z_]+=).)+)', attrs) for m in re.finditer(r'(?:^|\|)(?P<k>[a-z_]+)=(?P<v>(?:(?!\|[a-z_]+=).)+)', attrs)
} }
m3u8_url = self.decrypt(encrypted_data, metadata['key']) m3u8_url = urllib.parse.unquote(
self.decrypt(encrypted_data, metadata['key'])).rstrip('\x0e\x0f')
return { return {
'id': display_id, # Fallback 'id': display_id, # Fallback

View File

@ -127,6 +127,7 @@ class ZDFBaseIE(InfoExtractor):
**parse_codecs(quality.get('mimeCodec')), **parse_codecs(quality.get('mimeCodec')),
'height': height, 'height': height,
'width': width, 'width': width,
'filesize': int_or_none(variant.get('filesize')),
'format_id': join_nonempty('http', stream.get('type')), 'format_id': join_nonempty('http', stream.get('type')),
'tbr': int_or_none(self._search_regex(r'_(\d+)k_', format_url, 'tbr', default=None)), 'tbr': int_or_none(self._search_regex(r'_(\d+)k_', format_url, 'tbr', default=None)),
}] }]
@ -193,8 +194,10 @@ class ZDFBaseIE(InfoExtractor):
class ZDFIE(ZDFBaseIE): class ZDFIE(ZDFBaseIE):
_VALID_URL = [ _VALID_URL = [
r'https?://(?:www\.)?zdf\.de/(?:video|play)/(?:[^/?#]+/)*(?P<id>[^/?#]+)', r'https?://(?:www\.)?zdf\.de/(?:video|play)/(?:[^/?#]+/)*(?P<id>[^/?#]+)',
# /nachrichten/ sub-site URLs and legacy redirects from before the redesign in 2025-03 # Legacy redirects from before the redesign in 2025-03 or from before sister sites moved to their own domains
r'https?://(?:www\.)?zdf\.de/(?:[^/?#]+/)*(?P<id>[^/?#]+)\.html', r'https?://(?:www\.)?zdf\.de/(?:[^/?#]+/)*(?P<id>[^/?#]+)\.html',
# Sister sites
r'https?://(?:www\.)?(?:zdfheute|logo)\.de/(?:[^/?#]+/)*(?P<id>[^/?#]+)\.html',
] ]
IE_NAME = 'zdf' IE_NAME = 'zdf'
_TESTS = [{ _TESTS = [{
@ -206,7 +209,7 @@ class ZDFIE(ZDFBaseIE):
'title': 'Sylt - Deutschlands edles Nordlicht', 'title': 'Sylt - Deutschlands edles Nordlicht',
'description': 'md5:35407b810c2e1e33efbe15ef6e4c06c3', 'description': 'md5:35407b810c2e1e33efbe15ef6e4c06c3',
'duration': 810.0, 'duration': 810.0,
'thumbnail': 'https://www.zdf.de/assets/sylt-118~original?cb=1613992485011', 'thumbnail': r're:https://www\.zdf\.de/assets/sylt-118~original\?cb=\d+',
'series': 'Sylt - Deutschlands edles Nordlicht', 'series': 'Sylt - Deutschlands edles Nordlicht',
'series_id': 'sylt---deutschlands-edles-nordlicht-movie-100', 'series_id': 'sylt---deutschlands-edles-nordlicht-movie-100',
'timestamp': 1612462500, 'timestamp': 1612462500,
@ -222,7 +225,7 @@ class ZDFIE(ZDFBaseIE):
'title': 'Sylt - Deutschlands edles Nordlicht', 'title': 'Sylt - Deutschlands edles Nordlicht',
'description': 'md5:35407b810c2e1e33efbe15ef6e4c06c3', 'description': 'md5:35407b810c2e1e33efbe15ef6e4c06c3',
'duration': 810.0, 'duration': 810.0,
'thumbnail': 'https://www.zdf.de/assets/sylt-118~original?cb=1613992485011', 'thumbnail': r're:https://www\.zdf\.de/assets/sylt-118~original\?cb=\d+',
'series': 'Sylt - Deutschlands edles Nordlicht', 'series': 'Sylt - Deutschlands edles Nordlicht',
'series_id': 'sylt---deutschlands-edles-nordlicht-movie-100', 'series_id': 'sylt---deutschlands-edles-nordlicht-movie-100',
'timestamp': 1612462500, 'timestamp': 1612462500,
@ -239,7 +242,7 @@ class ZDFIE(ZDFBaseIE):
'title': 'Sylt - Deutschlands edles Nordlicht', 'title': 'Sylt - Deutschlands edles Nordlicht',
'description': 'md5:35407b810c2e1e33efbe15ef6e4c06c3', 'description': 'md5:35407b810c2e1e33efbe15ef6e4c06c3',
'duration': 810.0, 'duration': 810.0,
'thumbnail': 'https://www.zdf.de/assets/sylt-118~original?cb=1613992485011', 'thumbnail': r're:https://www\.zdf\.de/assets/sylt-118~original\?cb=\d+',
'series': 'Sylt - Deutschlands edles Nordlicht', 'series': 'Sylt - Deutschlands edles Nordlicht',
'series_id': 'sylt---deutschlands-edles-nordlicht-movie-100', 'series_id': 'sylt---deutschlands-edles-nordlicht-movie-100',
'timestamp': 1612462500, 'timestamp': 1612462500,
@ -249,67 +252,66 @@ class ZDFIE(ZDFBaseIE):
'params': {'skip_download': True}, 'params': {'skip_download': True},
}, { }, {
# Video belongs to a playlist, video URL # Video belongs to a playlist, video URL
'url': 'https://www.zdf.de/video/dokus/die-magie-der-farben-116/die-magie-der-farben-von-koenigspurpur-und-jeansblau-100', # Also: video mirrored from ARD Mediathek
'md5': '1eda17eb40a9ead3046326e10b9c5973', 'url': 'https://www.zdf.de/video/dokus/collection-index-page-ard-collection-ard-dxjuomfyzdpzag93ojy2mzhhmmq3mzk2ztq4nda-132/page-video-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102',
'md5': '84980c1a0148da6cd94de58333d7e1ee',
'info_dict': { 'info_dict': {
'id': 'die-magie-der-farben-von-koenigspurpur-und-jeansblau-100', 'id': 'page-video-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102',
'ext': 'mp4', 'ext': 'mp4',
'title': 'Von Königspurpur bis Jeansblau', 'title': 'Gelb: Vom hellen Glanz zu finsteren Abgründen',
'description': 'md5:a89da10c928c6235401066b60a6d5c1a', 'description': 'md5:9aad4806b4c8ea152ab21e70c9d516be',
'duration': 2615.0, 'duration': 895.0,
'thumbnail': 'https://www.zdf.de/assets/koenigspurpur-bis-jeansblau-100~original?cb=1741857765971', 'thumbnail': r're:https://www\.zdf\.de/assets/image-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102~original\?cb=\d+',
'series': 'Die Magie der Farben', 'series': 'Die Magie der Farben',
'series_id': 'die-magie-der-farben-116', 'series_id': 'collection-index-page-ard-collection-ard-dxjuomfyzdpzag93ojy2mzhhmmq3mzk2ztq4nda-132',
'season': 'Season 1', 'season': 'Season 2023',
'season_number': 1, 'season_number': 2023,
'episode': 'Episode 2', 'episode': 'Episode 5',
'episode_number': 2, 'episode_number': 5,
'timestamp': 1445797800, 'timestamp': 1690902120,
'upload_date': '20151025', 'upload_date': '20230801',
'_old_archive_ids': ['zdf 151025_magie_farben2_tex'], '_old_archive_ids': ['zdf video_ard_dXJuOmFyZDpwdWJsaWNhdGlvbjo0YTYyOTJjM2Q0ZThlNmY1'],
}, },
}, { }, {
# Video belongs to a playlist, play URL # Video belongs to a playlist, play URL
'url': 'https://www.zdf.de/play/dokus/die-magie-der-farben-116/die-magie-der-farben-von-koenigspurpur-und-jeansblau-100', 'url': 'https://www.zdf.de/play/dokus/collection-index-page-ard-collection-ard-dxjuomfyzdpzag93ojy2mzhhmmq3mzk2ztq4nda-132/page-video-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102',
'md5': '1eda17eb40a9ead3046326e10b9c5973',
'info_dict': { 'info_dict': {
'id': 'die-magie-der-farben-von-koenigspurpur-und-jeansblau-100', 'id': 'page-video-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102',
'ext': 'mp4', 'ext': 'mp4',
'title': 'Von Königspurpur bis Jeansblau', 'title': 'Gelb: Vom hellen Glanz zu finsteren Abgründen',
'description': 'md5:a89da10c928c6235401066b60a6d5c1a', 'description': 'md5:9aad4806b4c8ea152ab21e70c9d516be',
'duration': 2615.0, 'duration': 895.0,
'thumbnail': 'https://www.zdf.de/assets/koenigspurpur-bis-jeansblau-100~original?cb=1741857765971', 'thumbnail': r're:https://www\.zdf\.de/assets/image-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102~original\?cb=\d+',
'series': 'Die Magie der Farben', 'series': 'Die Magie der Farben',
'series_id': 'die-magie-der-farben-116', 'series_id': 'collection-index-page-ard-collection-ard-dxjuomfyzdpzag93ojy2mzhhmmq3mzk2ztq4nda-132',
'season': 'Season 1', 'season': 'Season 2023',
'season_number': 1, 'season_number': 2023,
'episode': 'Episode 2', 'episode': 'Episode 5',
'episode_number': 2, 'episode_number': 5,
'timestamp': 1445797800, 'timestamp': 1690902120,
'upload_date': '20151025', 'upload_date': '20230801',
'_old_archive_ids': ['zdf 151025_magie_farben2_tex'], '_old_archive_ids': ['zdf video_ard_dXJuOmFyZDpwdWJsaWNhdGlvbjo0YTYyOTJjM2Q0ZThlNmY1'],
}, },
'params': {'skip_download': True}, 'params': {'skip_download': True},
}, { }, {
# Video belongs to a playlist, legacy URL before website redesign in 2025-03 # Video belongs to a playlist, legacy URL before website redesign in 2025-03
'url': 'https://www.zdf.de/dokumentation/terra-x/die-magie-der-farben-von-koenigspurpur-und-jeansblau-100.html', 'url': 'https://www.zdf.de/dokus/collection-index-page-ard-collection-ard-dxjuomfyzdpzag93ojy2mzhhmmq3mzk2ztq4nda-132/page-video-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102.html',
'md5': '1eda17eb40a9ead3046326e10b9c5973',
'info_dict': { 'info_dict': {
'id': 'die-magie-der-farben-von-koenigspurpur-und-jeansblau-100', 'id': 'page-video-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102',
'ext': 'mp4', 'ext': 'mp4',
'title': 'Von Königspurpur bis Jeansblau', 'title': 'Gelb: Vom hellen Glanz zu finsteren Abgründen',
'description': 'md5:a89da10c928c6235401066b60a6d5c1a', 'description': 'md5:9aad4806b4c8ea152ab21e70c9d516be',
'duration': 2615.0, 'duration': 895.0,
'thumbnail': 'https://www.zdf.de/assets/koenigspurpur-bis-jeansblau-100~original?cb=1741857765971', 'thumbnail': r're:https://www\.zdf\.de/assets/image-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102~original\?cb=\d+',
'series': 'Die Magie der Farben', 'series': 'Die Magie der Farben',
'series_id': 'die-magie-der-farben-116', 'series_id': 'collection-index-page-ard-collection-ard-dxjuomfyzdpzag93ojy2mzhhmmq3mzk2ztq4nda-132',
'season': 'Season 1', 'season': 'Season 2023',
'season_number': 1, 'season_number': 2023,
'episode': 'Episode 2', 'episode': 'Episode 5',
'episode_number': 2, 'episode_number': 5,
'timestamp': 1445797800, 'timestamp': 1690902120,
'upload_date': '20151025', 'upload_date': '20230801',
'_old_archive_ids': ['zdf 151025_magie_farben2_tex'], '_old_archive_ids': ['zdf video_ard_dXJuOmFyZDpwdWJsaWNhdGlvbjo0YTYyOTJjM2Q0ZThlNmY1'],
}, },
'params': {'skip_download': True}, 'params': {'skip_download': True},
}, { }, {
@ -337,7 +339,50 @@ class ZDFIE(ZDFBaseIE):
'_old_archive_ids': ['zdf 211219_sendung_hjo'], '_old_archive_ids': ['zdf 211219_sendung_hjo'],
}, },
}, { }, {
# Video that requires fallback extraction # FUNK video (hosted on a different CDN, has atypical PTMD and HLS files)
'url': 'https://www.zdf.de/video/serien/funk-collection-funk-11790-1596/funk-alles-ist-verzaubert-102',
'md5': '57af4423db0455a3975d2dc4578536bc',
'info_dict': {
'id': 'funk-alles-ist-verzaubert-102',
'ext': 'mp4',
'title': 'Alles ist verzaubert',
'description': 'Die Neue an der Schule verdreht Ismail den Kopf.',
'duration': 1278.0,
'thumbnail': r're:https://www\.zdf\.de/assets/teaser-funk-alles-ist-verzaubert-102~original\?cb=\d+',
'series': 'DRUCK',
'series_id': 'funk-collection-funk-11790-1596',
'season': 'Season 2021',
'season_number': 2021,
'episode': 'Episode 50',
'episode_number': 50,
'timestamp': 1635520560,
'upload_date': '20211029',
'_old_archive_ids': ['zdf video_funk_1770473'],
},
}, {
# zdfheute video, also available on zdf.de
'url': 'https://www.zdfheute.de/video/heute-journal/heute-journal-vom-19-dezember-2025-100.html',
'md5': '47af8c2cfa30abf74501170f62754c63',
'info_dict': {
'id': 'heute-journal-vom-19-dezember-2025-100',
'ext': 'mp4',
'title': 'heute journal vom 19. Dezember 2025',
'description': 'md5:fd0dfbce0783486db839ff9140a8074b',
'duration': 1780.0,
'thumbnail': 'https://epg-image.zdf.de/fotobase-webdelivery/images/273e5545-16e7-4ca3-898e-52fe9e06d964?layout=2400x1350',
'chapters': 'count:10',
'series': 'heute journal',
'series_id': 'heute-journal-104',
'season': 'Season 2025',
'season_number': 2025,
'episode': 'Episode 365',
'episode_number': 365,
'timestamp': 1766178000,
'upload_date': '20251219',
'_old_archive_ids': ['zdf 251219_2200_sendung_hjo'],
},
}, {
# zdfheute video, not available on zdf.de (uses the fallback extraction path)
'url': 'https://www.zdf.de/nachrichten/politik/deutschland/koalitionsverhandlungen-spd-cdu-csu-dobrindt-100.html', 'url': 'https://www.zdf.de/nachrichten/politik/deutschland/koalitionsverhandlungen-spd-cdu-csu-dobrindt-100.html',
'md5': 'c3a78514dd993a5781aa3afe50db51e2', 'md5': 'c3a78514dd993a5781aa3afe50db51e2',
'info_dict': { 'info_dict': {
@ -346,71 +391,50 @@ class ZDFIE(ZDFBaseIE):
'title': 'Dobrindt schließt Steuererhöhungen aus', 'title': 'Dobrindt schließt Steuererhöhungen aus',
'description': 'md5:9a117646d7b8df6bc902eb543a9c9023', 'description': 'md5:9a117646d7b8df6bc902eb543a9c9023',
'duration': 325, 'duration': 325,
'thumbnail': 'https://www.zdfheute.de/assets/dobrindt-csu-berlin-direkt-100~1920x1080?cb=1743357653736', 'thumbnail': r're:https://www\.zdfheute\.de/assets/dobrindt-csu-berlin-direkt-100~1920x1080\?cb=\d+',
'timestamp': 1743374520, 'timestamp': 1743374520,
'upload_date': '20250330', 'upload_date': '20250330',
'_old_archive_ids': ['zdf 250330_clip_2_bdi'], '_old_archive_ids': ['zdf 250330_clip_2_bdi'],
}, },
}, { }, {
# FUNK video (hosted on a different CDN, has atypical PTMD and HLS files) # logo! video, also available on zdf.de
'url': 'https://www.zdf.de/funk/druck-11790/funk-alles-ist-verzaubert-102.html', 'url': 'https://www.logo.de/logo-vom-freitag-19-dezember-2025-102.html',
'md5': '57af4423db0455a3975d2dc4578536bc', 'md5': 'cfb1a0988b1249f052a437a55851134b',
'info_dict': { 'info_dict': {
'id': 'funk-alles-ist-verzaubert-102', 'id': 'logo-vom-freitag-19-dezember-2025-102',
'ext': 'mp4', 'ext': 'mp4',
'title': 'Alles ist verzaubert', 'title': 'logo! vom Freitag, 19. Dezember 2025',
'description': 'Die Neue an der Schule verdreht Ismail den Kopf.', 'description': 'md5:971428cb563e924c153580f23870c613',
'duration': 1278.0, 'duration': 490.0,
'thumbnail': 'https://www.zdf.de/assets/teaser-funk-alles-ist-verzaubert-102~original?cb=1663848412907', 'thumbnail': r're:https://www\.zdf\.de/assets/iran-rote-erde-sendung-19-dezember-2025-100~original\?cb=\d+',
'series': 'DRUCK', 'chapters': 'count:7',
'series_id': 'funk-collection-funk-11790-1590', 'series': 'logo!',
'season': 'Season 7', 'series_id': 'logo-154',
'season_number': 7, 'season': 'Season 2025',
'episode': 'Episode 1', 'season_number': 2025,
'episode_number': 1, 'episode': 'Episode 382',
'timestamp': 1635520560, 'episode_number': 382,
'upload_date': '20211029', 'timestamp': 1766168700,
'_old_archive_ids': ['zdf video_funk_1770473'], 'upload_date': '20251219',
'_old_archive_ids': ['zdf 251219_1925_sendung_log'],
}, },
}, { }, {
'url': 'https://www.zdf.de/serien/soko-stuttgart/das-geld-anderer-leute-100.html', # logo! video, not available on zdf.de (uses the fallback extraction path)
'url': 'https://www.logo.de/kinderreporter-vivaan-trifft-alina-grijseels-100.html',
'md5': '094cea026babb67aa25fd0108400bc12',
'info_dict': { 'info_dict': {
'id': 'das-geld-anderer-leute-100', 'id': 'kinderreporter-vivaan-trifft-alina-grijseels-100',
'ext': 'mp4', 'ext': 'mp4',
'title': 'Das Geld anderer Leute', 'title': 'Vivaan trifft Handballerin Alina Grijseels',
'description': 'md5:cb6f660850dc5eb7d1ab776ea094959d', 'description': 'md5:9572e7f4340dda823ea4091a76624da6',
'duration': 2581.0, 'duration': 166.0,
'thumbnail': 'https://epg-image.zdf.de/fotobase-webdelivery/images/e2d7e55a-09f0-424e-ac73-6cac4dd65f35?layout=1920x1080', 'thumbnail': r're:https://www\.zdf\.de/assets/vivaan-alina-grijseels-100~original\?cb=\d+',
'series': 'SOKO Stuttgart', 'series': 'logo!',
'series_id': 'soko-stuttgart-104', 'series_id': 'logo-154',
'season': 'Season 11', 'timestamp': 1766236320,
'season_number': 11, 'upload_date': '20251220',
'episode': 'Episode 10', '_old_archive_ids': ['zdf 251219_kr_alina_grijseels_neu_log'],
'episode_number': 10,
'timestamp': 1728983700,
'upload_date': '20241015',
'_old_archive_ids': ['zdf 191205_1800_sendung_sok8'],
}, },
}, {
'url': 'https://www.zdf.de/serien/northern-lights/begegnung-auf-der-bruecke-100.html',
'info_dict': {
'id': 'begegnung-auf-der-bruecke-100',
'ext': 'webm',
'title': 'Begegnung auf der Brücke',
'description': 'md5:e53a555da87447f7f1207f10353f8e45',
'duration': 3083.0,
'thumbnail': 'https://epg-image.zdf.de/fotobase-webdelivery/images/c5ff1d1f-f5c8-4468-86ac-1b2f1dbecc76?layout=1920x1080',
'series': 'Northern Lights',
'series_id': 'northern-lights-100',
'season': 'Season 1',
'season_number': 1,
'episode': 'Episode 1',
'episode_number': 1,
'timestamp': 1738546500,
'upload_date': '20250203',
'_old_archive_ids': ['zdf 240319_2310_sendung_not'],
},
'params': {'skip_download': 'geo-restricted http format'},
}, { }, {
# Same as https://www.phoenix.de/sendungen/ereignisse/corona-nachgehakt/wohin-fuehrt-der-protest-in-der-pandemie-a-2050630.html # 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', 'url': 'https://www.zdf.de/politik/phoenix-sendungen/wohin-fuehrt-der-protest-in-der-pandemie-100.html',
@ -617,7 +641,7 @@ class ZDFChannelIE(ZDFBaseIE):
'title': 'Sylt - Deutschlands edles Nordlicht', 'title': 'Sylt - Deutschlands edles Nordlicht',
'description': 'md5:35407b810c2e1e33efbe15ef6e4c06c3', 'description': 'md5:35407b810c2e1e33efbe15ef6e4c06c3',
'duration': 810.0, 'duration': 810.0,
'thumbnail': 'https://www.zdf.de/assets/sylt-118~original?cb=1613992485011', 'thumbnail': r're:https://www\.zdf\.de/assets/sylt-118~original\?cb=\d+',
'series': 'Sylt - Deutschlands edles Nordlicht', 'series': 'Sylt - Deutschlands edles Nordlicht',
'series_id': 'sylt---deutschlands-edles-nordlicht-movie-100', 'series_id': 'sylt---deutschlands-edles-nordlicht-movie-100',
'timestamp': 1612462500, 'timestamp': 1612462500,
@ -634,38 +658,24 @@ class ZDFChannelIE(ZDFBaseIE):
}, },
'playlist_mincount': 2, 'playlist_mincount': 2,
}, { }, {
'url': 'https://www.zdf.de/serien/taunuskrimi/', # All seasons of playlist
'info_dict': {
'id': 'taunuskrimi-100',
'title': 'Taunuskrimi',
'description': 'md5:ee7204e9c625c3b611d1274f9d0e3070',
},
'playlist_mincount': 8,
}, {
'url': 'https://www.zdf.de/serien/taunuskrimi/?staffel=1',
'info_dict': {
'id': 'taunuskrimi-100-s1',
'title': 'Taunuskrimi - Season 1',
'description': 'md5:ee7204e9c625c3b611d1274f9d0e3070',
},
'playlist_count': 7,
}, {
'url': 'https://www.zdf.de/magazine/heute-journal-104', 'url': 'https://www.zdf.de/magazine/heute-journal-104',
'info_dict': { 'info_dict': {
'id': 'heute-journal-104', 'id': 'heute-journal-104',
'title': 'heute journal', 'title': 'heute journal',
'description': 'md5:6edad39189abf8431795d3d6d7f986b3', 'description': 'md5:6edad39189abf8431795d3d6d7f986b3',
}, },
'playlist_mincount': 500, 'playlist_mincount': 366,
}, { }, {
'url': 'https://www.zdf.de/magazine/heute-journal-104?staffel=2024', # Only selected season
'url': 'https://www.zdf.de/magazine/heute-journal-104?staffel=2025',
'info_dict': { 'info_dict': {
'id': 'heute-journal-104-s2024', 'id': 'heute-journal-104-s2025',
'title': 'heute journal - Season 2024', 'title': 'heute journal - Season 2025',
'description': 'md5:6edad39189abf8431795d3d6d7f986b3', 'description': 'md5:6edad39189abf8431795d3d6d7f986b3',
}, },
'playlist_count': 242, 'playlist_mincount': 1,
'skip': 'Video count changes daily, needs support for playlist_maxcount', 'playlist_maxcount': 365,
}] }]
_PAGE_SIZE = 24 _PAGE_SIZE = 24