From 5f23844a11712b463d7d7218b5c599448807dc21 Mon Sep 17 00:00:00 2001 From: Stefan Lobbenmeier Date: Fri, 29 Mar 2024 19:31:13 -0300 Subject: [PATCH 1/4] attempt to call API for version-3 player to get more fields --- yt_dlp/extractor/zdf.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/yt_dlp/extractor/zdf.py b/yt_dlp/extractor/zdf.py index c04d51b7e..2e005c784 100644 --- a/yt_dlp/extractor/zdf.py +++ b/yt_dlp/extractor/zdf.py @@ -14,6 +14,7 @@ from ..utils import ( parse_codecs, qualities, traverse_obj, + try_call, try_get, unified_timestamp, update_url_query, @@ -312,13 +313,20 @@ class ZDFIE(ZDFBaseIE): 'duration': int_or_none(t.get('duration')), 'timestamp': unified_timestamp(content.get('editorialDate')), 'thumbnails': thumbnails, - 'chapters': chapters or None + 'chapters': chapters or None, + 'season': 'test' }) def _extract_regular(self, url, player, video_id): - content = self._call_api( - player['content'], video_id, 'content', player['apiToken'], url) - return self._extract_entry(player['content'], player, content, video_id) + player_content_v2 = player['content'] + player_content_v3 = update_url_query(player_content_v2, {'profile': 'player-3'}) + + content = try_call( + lambda: self._call_api(player_content_v3, video_id, 'content', player['apiToken'], url), + lambda: self._call_api(player_content_v2, video_id, 'content', player['apiToken'], url), + ) + + return self._extract_entry(player_content_v2, player, content, video_id) def _extract_mobile(self, video_id): video = self._download_json( From 366b09c84c8f2205f69fe90dd5121dd1eb89e089 Mon Sep 17 00:00:00 2001 From: Stefan Lobbenmeier Date: Fri, 29 Mar 2024 19:46:01 -0300 Subject: [PATCH 2/4] extract series, season and episode info from the target_info --- yt_dlp/extractor/zdf.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/yt_dlp/extractor/zdf.py b/yt_dlp/extractor/zdf.py index 2e005c784..62566a252 100644 --- a/yt_dlp/extractor/zdf.py +++ b/yt_dlp/extractor/zdf.py @@ -307,6 +307,7 @@ 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'), @@ -314,7 +315,14 @@ class ZDFIE(ZDFBaseIE): 'timestamp': unified_timestamp(content.get('editorialDate')), 'thumbnails': thumbnails, 'chapters': chapters or None, - 'season': 'test' + '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'), }) def _extract_regular(self, url, player, video_id): From efe406d7489d1e9c32e20271c74a32cf598872d3 Mon Sep 17 00:00:00 2001 From: Stefan Lobbenmeier Date: Sat, 30 Mar 2024 12:14:14 -0300 Subject: [PATCH 3/4] add test for example url from ticket --- yt_dlp/extractor/zdf.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/yt_dlp/extractor/zdf.py b/yt_dlp/extractor/zdf.py index 62566a252..f7084273f 100644 --- a/yt_dlp/extractor/zdf.py +++ b/yt_dlp/extractor/zdf.py @@ -263,6 +263,21 @@ class ZDFIE(ZDFBaseIE): 'format_note': 'uhd, main', 'thumbnail': 'https://www.zdf.de/assets/saguaro-kakteen-102~3840x2160?cb=1655910690796', }, + }, { + 'url': 'https://www.zdf.de/serien/northern-lights/begegnung-auf-der-bruecke-100.html', + 'info_dict': { + 'id': '240319_2310_sendung_not', + '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.', + 'seriesId': '1d7a1879-01ee-4468-8237-c6b4ecd633c7', + 'series': 'Northern Lights', + 'season': 'Staffel 1', + 'season_number': 1, + 'season_id': '22ac26a2-4ea2-4055-ac0b-98b755cdf718', + 'episode': 'Begegnung auf der Brücke', + 'episode_number': 1, + 'episode_id': 'POS_71049438-024b-471f-b472-4fe2e490d1fb' + }, }] def _extract_entry(self, url, player, content, video_id): From 1f92b9ec7a38d81c141248e47716f26871bc1984 Mon Sep 17 00:00:00 2001 From: Stefan Lobbenmeier Date: Sat, 30 Mar 2024 12:41:52 -0300 Subject: [PATCH 4/4] Fix ZDFIE_all --- yt_dlp/extractor/zdf.py | 51 ++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/yt_dlp/extractor/zdf.py b/yt_dlp/extractor/zdf.py index f7084273f..b156ef0ca 100644 --- a/yt_dlp/extractor/zdf.py +++ b/yt_dlp/extractor/zdf.py @@ -185,12 +185,20 @@ class ZDFIE(ZDFBaseIE): 'info_dict': { 'id': '151025_magie_farben2_tex', 'ext': 'mp4', + 'duration': 2615.0, 'title': 'Die Magie der Farben (2/2)', 'description': 'md5:a89da10c928c6235401066b60a6d5c1a', - 'duration': 2615, 'timestamp': 1465021200, - 'upload_date': '20160604', 'thumbnail': 'https://www.zdf.de/assets/mauve-im-labor-100~768x432?cb=1464909117806', + 'upload_date': '20160604', + 'episode': 'Die Magie der Farben (2/2)', + 'episode_id': 'POS_954f4170-36a5-4a41-a6cf-78f1f3b1f127', + 'season': 'Staffel 1', + 'series': 'Die Magie der Farben', + 'season_number': 1, + 'seriesId': 'a39900dd-cdbd-4a6a-a413-44e8c6ae18bc', + 'season_id': '5a92e619-8a0f-4410-a3d5-19c76fbebb37', + 'episode_number': 2, }, }, { 'url': 'https://www.zdf.de/funk/druck-11790/funk-alles-ist-verzaubert-102.html', @@ -198,12 +206,13 @@ class ZDFIE(ZDFBaseIE): 'info_dict': { 'ext': 'mp4', 'id': 'video_funk_1770473', - 'duration': 1278, - 'description': 'Die Neue an der Schule verdreht Ismail den Kopf.', + 'duration': 1278.0, 'title': 'Alles ist verzaubert', + 'description': 'Die Neue an der Schule verdreht Ismail den Kopf.', 'timestamp': 1635520560, - 'upload_date': '20211029', 'thumbnail': 'https://www.zdf.de/assets/teaser-funk-alles-ist-verzaubert-102~1920x1080?cb=1663848412907', + 'upload_date': '20211029', + 'episode': 'Alles ist verzaubert', }, }, { # Same as https://www.phoenix.de/sendungen/dokumentationen/gesten-der-maechtigen-i-a-89468.html?ref=suche @@ -249,26 +258,40 @@ class ZDFIE(ZDFBaseIE): 'timestamp': 1675160100, 'upload_date': '20230131', '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', + 'season': 'Staffel 11', + 'season_number': 11, + 'season_id': 'ae1b4990-6d87-4970-a571-caccf1ba2879', + 'episode': 'Das Geld anderer Leute', + 'episode_number': 10, + 'episode_id': 'POS_7f367934-f2f0-45cb-9081-736781ff2d23', }, }, { 'url': 'https://www.zdf.de/dokumentation/terra-x/unser-gruener-planet-wuesten-doku-100.html', 'info_dict': { - 'id': '220605_dk_gruener_planet_wuesten_tex', + 'id': '220525_green_planet_makingof_1_tropen_tex', 'ext': 'mp4', - 'title': 'Unser grüner Planet - Wüsten', - 'description': 'md5:4fc647b6f9c3796eea66f4a0baea2862', - 'duration': 2613.0, - 'timestamp': 1654450200, - 'upload_date': '20220605', - 'format_note': 'uhd, main', - 'thumbnail': 'https://www.zdf.de/assets/saguaro-kakteen-102~3840x2160?cb=1655910690796', + 'title': 'Making-of Unser grüner Planet - Tropen', + 'description': 'md5:d7c6949dc7c75c73c4ad51c785fb0b79', + 'duration': 435.0, + 'timestamp': 1653811200, + 'upload_date': '20220529', + 'format_note': 'hd, main', + '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', }, }, { '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.', + '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': 'Northern Lights', 'season': 'Staffel 1', @@ -276,7 +299,7 @@ class ZDFIE(ZDFBaseIE): 'season_id': '22ac26a2-4ea2-4055-ac0b-98b755cdf718', 'episode': 'Begegnung auf der Brücke', 'episode_number': 1, - 'episode_id': 'POS_71049438-024b-471f-b472-4fe2e490d1fb' + 'episode_id': 'POS_71049438-024b-471f-b472-4fe2e490d1fb', }, }]