From 855d7b238de7898c7e80c13115915ea7756c2c21 Mon Sep 17 00:00:00 2001 From: delta Date: Tue, 17 Jun 2025 18:49:45 +0200 Subject: [PATCH 01/16] [filmarchiv] add extractor --- yt_dlp/extractor/_extractors.py | 1 + yt_dlp/extractor/filmarchiv.py | 46 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 yt_dlp/extractor/filmarchiv.py diff --git a/yt_dlp/extractor/_extractors.py b/yt_dlp/extractor/_extractors.py index 34c98b537..1a07ff7ef 100644 --- a/yt_dlp/extractor/_extractors.py +++ b/yt_dlp/extractor/_extractors.py @@ -647,6 +647,7 @@ ) from .fczenit import FczenitIE from .fifa import FifaIE +from .filmarchiv import FilmArchivIE from .filmon import ( FilmOnChannelIE, FilmOnIE, diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py new file mode 100644 index 000000000..ceaf4d734 --- /dev/null +++ b/yt_dlp/extractor/filmarchiv.py @@ -0,0 +1,46 @@ +from .common import InfoExtractor +from ..utils import determine_ext + + +class FilmArchivIE(InfoExtractor): + IE_NAME = 'FILMARCHIV ON' + _VALID_URL = r'https?://(?:www\.)?filmarchiv\.at/(?:de|en)/filmarchiv-on/video/(?P[0-9a-zA-Z_]+)' + _TESTS = [{ + 'url': 'https://www.filmarchiv.at/de/filmarchiv-on/video/f_0305p7xKrXUPBwoNE9x6mh', + 'md5': 'TODO: md5 sum of the first 10241 bytes of the video file (use --test)', + 'info_dict': { + 'id': 'f_0305p7xKrXUPBwoNE9x6mh', + 'ext': 'mkv', + 'title': 'Der Wurstelprater zur Kaiserzeit', + 'description': 'md5:9843f92df5cc9a4975cee7aabcf6e3b2', + 'thumbnail': 'https://img.filmarchiv.at/unsafe/1024x1024/videostatic/f_0305/p7xKrXUPBwoNE9x6mh_v1/poster.jpg', + } + }] + + def _real_extract(self, url): + id = self._match_id(url) + webpage = self._download_webpage(url, id) + + title = self._html_search_regex( + r']+>\s*(.+?)\s*', + webpage, 'title') + + description = self._html_search_regex( + r'
\s*
\s*

\s*(.+?)\s*

', + webpage, 'description') + + bucket, video_id, version = self._html_search_regex( + r'', + webpage, 'bucket, video_id, version', group=('bucket', 'video_id', 'version')) + + playlist_url = f'https://cdn.filmarchiv.at/{bucket}/{video_id}_{version}_sv1/playlist.m3u8' + formats, subtitles = self._extract_m3u8_formats_and_subtitles(playlist_url, id, fatal=False) + + return { + 'id': id, + 'title': title, + 'description': description, + 'thumbnail': f'https://img.filmarchiv.at/unsafe/1024x1024/videostatic/{bucket}/{video_id}/poster.jpg', + 'formats': formats, + 'subtitles': subtitles, + } From 138ef94d482cd7b8c472478751343ea569594ede Mon Sep 17 00:00:00 2001 From: delta Date: Tue, 17 Jun 2025 18:57:59 +0200 Subject: [PATCH 02/16] fix code check issues --- yt_dlp/extractor/filmarchiv.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index ceaf4d734..c11684ff6 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -1,5 +1,4 @@ from .common import InfoExtractor -from ..utils import determine_ext class FilmArchivIE(InfoExtractor): @@ -14,12 +13,12 @@ class FilmArchivIE(InfoExtractor): 'title': 'Der Wurstelprater zur Kaiserzeit', 'description': 'md5:9843f92df5cc9a4975cee7aabcf6e3b2', 'thumbnail': 'https://img.filmarchiv.at/unsafe/1024x1024/videostatic/f_0305/p7xKrXUPBwoNE9x6mh_v1/poster.jpg', - } + }, }] def _real_extract(self, url): - id = self._match_id(url) - webpage = self._download_webpage(url, id) + media_id = self._match_id(url) + webpage = self._download_webpage(url, media_id) title = self._html_search_regex( r']+>\s*(.+?)\s*', @@ -34,10 +33,10 @@ def _real_extract(self, url): webpage, 'bucket, video_id, version', group=('bucket', 'video_id', 'version')) playlist_url = f'https://cdn.filmarchiv.at/{bucket}/{video_id}_{version}_sv1/playlist.m3u8' - formats, subtitles = self._extract_m3u8_formats_and_subtitles(playlist_url, id, fatal=False) + formats, subtitles = self._extract_m3u8_formats_and_subtitles(playlist_url, media_id, fatal=False) return { - 'id': id, + 'id': media_id, 'title': title, 'description': description, 'thumbnail': f'https://img.filmarchiv.at/unsafe/1024x1024/videostatic/{bucket}/{video_id}/poster.jpg', From 9b6886e8fee2ac559cfdf5f63a0de1a9723e48a4 Mon Sep 17 00:00:00 2001 From: delta <4elta@users.noreply.github.com> Date: Wed, 18 Jun 2025 10:51:12 +0200 Subject: [PATCH 03/16] Update yt_dlp/extractor/filmarchiv.py Co-authored-by: N/Ame <173015200+grqz@users.noreply.github.com> --- yt_dlp/extractor/filmarchiv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index c11684ff6..1aa379597 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -21,7 +21,7 @@ def _real_extract(self, url): webpage = self._download_webpage(url, media_id) title = self._html_search_regex( - r']+>\s*(.+?)\s*', + r']*>\s*(.+?)\s*', webpage, 'title') description = self._html_search_regex( From 436d9c4ebc10339505f79d8f5e0cf1c89ac4a9f7 Mon Sep 17 00:00:00 2001 From: delta <4elta@users.noreply.github.com> Date: Wed, 18 Jun 2025 10:51:37 +0200 Subject: [PATCH 04/16] Update yt_dlp/extractor/filmarchiv.py Co-authored-by: N/Ame <173015200+grqz@users.noreply.github.com> --- yt_dlp/extractor/filmarchiv.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index 1aa379597..0fb9af12d 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -6,13 +6,13 @@ class FilmArchivIE(InfoExtractor): _VALID_URL = r'https?://(?:www\.)?filmarchiv\.at/(?:de|en)/filmarchiv-on/video/(?P[0-9a-zA-Z_]+)' _TESTS = [{ 'url': 'https://www.filmarchiv.at/de/filmarchiv-on/video/f_0305p7xKrXUPBwoNE9x6mh', - 'md5': 'TODO: md5 sum of the first 10241 bytes of the video file (use --test)', + 'md5': '54a6596f6a84624531866008a77fa27a', 'info_dict': { 'id': 'f_0305p7xKrXUPBwoNE9x6mh', - 'ext': 'mkv', + 'ext': 'mp4', 'title': 'Der Wurstelprater zur Kaiserzeit', 'description': 'md5:9843f92df5cc9a4975cee7aabcf6e3b2', - 'thumbnail': 'https://img.filmarchiv.at/unsafe/1024x1024/videostatic/f_0305/p7xKrXUPBwoNE9x6mh_v1/poster.jpg', + 'thumbnail': r're:https://cdn.filmarchiv.at/f_0305/p7xKrXUPBwoNE9x6mh[^/]*/poster.jpg$', }, }] From b18f2f0b7792d2b287dbcbe112f977c42e75ad50 Mon Sep 17 00:00:00 2001 From: delta <4elta@users.noreply.github.com> Date: Wed, 18 Jun 2025 11:00:17 +0200 Subject: [PATCH 05/16] Update yt_dlp/extractor/filmarchiv.py Co-authored-by: N/Ame <173015200+grqz@users.noreply.github.com> --- yt_dlp/extractor/filmarchiv.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index 0fb9af12d..d8b6d6041 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -28,9 +28,9 @@ def _real_extract(self, url): r'
\s*
\s*

\s*(.+?)\s*

', webpage, 'description') - bucket, video_id, version = self._html_search_regex( - r'', - webpage, 'bucket, video_id, version', group=('bucket', 'video_id', 'version')) + og_img = self._html_search_meta('og:image', webpage, 'image URL', fatal=True) + prefix = self._search_regex( + r'/videostatic/([^/]+/[^_]+_[^/]+)/poster.jpg', og_img, 'prefix') playlist_url = f'https://cdn.filmarchiv.at/{bucket}/{video_id}_{version}_sv1/playlist.m3u8' formats, subtitles = self._extract_m3u8_formats_and_subtitles(playlist_url, media_id, fatal=False) From a21f542aa0e5fbf95e9460631500860bfb5d0e1a Mon Sep 17 00:00:00 2001 From: delta <4elta@users.noreply.github.com> Date: Wed, 18 Jun 2025 11:01:21 +0200 Subject: [PATCH 06/16] Update yt_dlp/extractor/filmarchiv.py Co-authored-by: N/Ame <173015200+grqz@users.noreply.github.com> --- yt_dlp/extractor/filmarchiv.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index d8b6d6041..a88bf40e7 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -32,8 +32,8 @@ def _real_extract(self, url): prefix = self._search_regex( r'/videostatic/([^/]+/[^_]+_[^/]+)/poster.jpg', og_img, 'prefix') - playlist_url = f'https://cdn.filmarchiv.at/{bucket}/{video_id}_{version}_sv1/playlist.m3u8' - formats, subtitles = self._extract_m3u8_formats_and_subtitles(playlist_url, media_id, fatal=False) + formats, subtitles = self._extract_m3u8_formats_and_subtitles( + f'https://cdn.filmarchiv.at/{prefix}_sv1/playlist.m3u8', media_id) return { 'id': media_id, From ec9f607f7f6a3fe4539528ffc8c701f78818cdb2 Mon Sep 17 00:00:00 2001 From: delta <4elta@users.noreply.github.com> Date: Wed, 18 Jun 2025 11:01:36 +0200 Subject: [PATCH 07/16] Update yt_dlp/extractor/filmarchiv.py Co-authored-by: N/Ame <173015200+grqz@users.noreply.github.com> --- yt_dlp/extractor/filmarchiv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index a88bf40e7..1e62c40ae 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -39,7 +39,7 @@ def _real_extract(self, url): 'id': media_id, 'title': title, 'description': description, - 'thumbnail': f'https://img.filmarchiv.at/unsafe/1024x1024/videostatic/{bucket}/{video_id}/poster.jpg', + 'thumbnail': f'https://cdn.filmarchiv.at/{prefix}/poster.jpg', 'formats': formats, 'subtitles': subtitles, } From 87ba39405ba82585b9ef2c437f699468b4127ac7 Mon Sep 17 00:00:00 2001 From: delta <4elta@users.noreply.github.com> Date: Wed, 18 Jun 2025 11:19:13 +0200 Subject: [PATCH 08/16] Apply suggestions from code review Co-authored-by: N/Ame <173015200+grqz@users.noreply.github.com> --- yt_dlp/extractor/filmarchiv.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index 1e62c40ae..9d2eb98f0 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -1,4 +1,6 @@ from .common import InfoExtractor +from ..utils import clean_html +from ..utils.traversal import find_elements, traverse_obj class FilmArchivIE(InfoExtractor): @@ -24,9 +26,17 @@ def _real_extract(self, url): r']*>\s*(.+?)\s*', webpage, 'title') - description = self._html_search_regex( - r'
\s*
\s*

\s*(.+?)\s*

', - webpage, 'description') + description = traverse_obj(webpage, ( + {find_elements( + tag='div', + attr='class', value=r'[^\'"]*(?<=[\'"\s])border-base-content(?=[\'"\s])[^\'"]*', + html=False, regex=True)}, ..., + {find_elements( + tag='div', + attr='class', value=r'[^\'"]*(?<=[\'"\s])prose(?=[\'"\s])[^\'"]*', + html=False, regex=True)}, ..., + {clean_html}, any, + )) og_img = self._html_search_meta('og:image', webpage, 'image URL', fatal=True) prefix = self._search_regex( From c45654eac8be895073d02d8b1d382cebf5d43975 Mon Sep 17 00:00:00 2001 From: delta Date: Wed, 18 Jun 2025 11:44:10 +0200 Subject: [PATCH 09/16] currently, the `filmarchiv-on` service is only available in german (ie `de`) --- yt_dlp/extractor/filmarchiv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index 9d2eb98f0..820954f5c 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -5,7 +5,7 @@ class FilmArchivIE(InfoExtractor): IE_NAME = 'FILMARCHIV ON' - _VALID_URL = r'https?://(?:www\.)?filmarchiv\.at/(?:de|en)/filmarchiv-on/video/(?P[0-9a-zA-Z_]+)' + _VALID_URL = r'https?://(?:www\.)?filmarchiv\.at/de/filmarchiv-on/video/(?P[0-9a-zA-Z_]+)' _TESTS = [{ 'url': 'https://www.filmarchiv.at/de/filmarchiv-on/video/f_0305p7xKrXUPBwoNE9x6mh', 'md5': '54a6596f6a84624531866008a77fa27a', From e1f5295adc50f650d9819897da4a22a5bb66193d Mon Sep 17 00:00:00 2001 From: delta <4elta@users.noreply.github.com> Date: Wed, 18 Jun 2025 11:49:31 +0200 Subject: [PATCH 10/16] Update yt_dlp/extractor/filmarchiv.py Co-authored-by: N/Ame <173015200+grqz@users.noreply.github.com> --- yt_dlp/extractor/filmarchiv.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index 820954f5c..a69bbb0cc 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -23,8 +23,7 @@ def _real_extract(self, url): webpage = self._download_webpage(url, media_id) title = self._html_search_regex( - r']*>\s*(.+?)\s*', - webpage, 'title') + r']*>\s*(.+?)\s*', webpage, 'title') description = traverse_obj(webpage, ( {find_elements( From a2df88f1e45c3fc33c6932292c8fc652d945ad62 Mon Sep 17 00:00:00 2001 From: delta <4elta@users.noreply.github.com> Date: Fri, 20 Jun 2025 09:05:21 +0200 Subject: [PATCH 11/16] Update yt_dlp/extractor/filmarchiv.py Co-authored-by: doe1080 <98906116+doe1080@users.noreply.github.com> --- yt_dlp/extractor/filmarchiv.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index a69bbb0cc..3ea20d8b9 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -22,8 +22,7 @@ def _real_extract(self, url): media_id = self._match_id(url) webpage = self._download_webpage(url, media_id) - title = self._html_search_regex( - r']*>\s*(.+?)\s*', webpage, 'title') + title = traverse_obj(webpage, ({find_element(tag='title-div')}, {clean_html})) description = traverse_obj(webpage, ( {find_elements( From 814a798f775af6dbedefb638a4d1bd5a3e39aa10 Mon Sep 17 00:00:00 2001 From: delta Date: Fri, 20 Jun 2025 09:12:38 +0200 Subject: [PATCH 12/16] proper title extraction --- yt_dlp/extractor/filmarchiv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index 3ea20d8b9..6f096a27f 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -22,7 +22,7 @@ def _real_extract(self, url): media_id = self._match_id(url) webpage = self._download_webpage(url, media_id) - title = traverse_obj(webpage, ({find_element(tag='title-div')}, {clean_html})) + title = traverse_obj(webpage, ({find_elements(tag='title-div')}, {clean_html})) description = traverse_obj(webpage, ( {find_elements( From 4ecdf49afcf20f8b6b00de94d44d133238bcca5c Mon Sep 17 00:00:00 2001 From: delta <4elta@users.noreply.github.com> Date: Fri, 20 Jun 2025 11:52:21 +0200 Subject: [PATCH 13/16] Apply suggestions from code review Co-authored-by: doe1080 <98906116+doe1080@users.noreply.github.com> --- yt_dlp/extractor/filmarchiv.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index 6f096a27f..d2e97606b 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -1,6 +1,10 @@ from .common import InfoExtractor from ..utils import clean_html -from ..utils.traversal import find_elements, traverse_obj +from ..utils.traversal import ( + find_element, + find_elements, + traverse_obj, +) class FilmArchivIE(InfoExtractor): @@ -22,8 +26,6 @@ def _real_extract(self, url): media_id = self._match_id(url) webpage = self._download_webpage(url, media_id) - title = traverse_obj(webpage, ({find_elements(tag='title-div')}, {clean_html})) - description = traverse_obj(webpage, ( {find_elements( tag='div', @@ -45,7 +47,7 @@ def _real_extract(self, url): return { 'id': media_id, - 'title': title, + 'title': traverse_obj(webpage, ({find_element(tag='title-div')}, {clean_html})), 'description': description, 'thumbnail': f'https://cdn.filmarchiv.at/{prefix}/poster.jpg', 'formats': formats, From bd8f3a6d7c2ef8c2f1ede38f8ca1b6fa05a65a3d Mon Sep 17 00:00:00 2001 From: delta Date: Fri, 20 Jun 2025 12:42:31 +0200 Subject: [PATCH 14/16] add additional test --- yt_dlp/extractor/filmarchiv.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index d2e97606b..47c363748 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -10,7 +10,8 @@ class FilmArchivIE(InfoExtractor): IE_NAME = 'FILMARCHIV ON' _VALID_URL = r'https?://(?:www\.)?filmarchiv\.at/de/filmarchiv-on/video/(?P[0-9a-zA-Z_]+)' - _TESTS = [{ + _TESTS = [ + { 'url': 'https://www.filmarchiv.at/de/filmarchiv-on/video/f_0305p7xKrXUPBwoNE9x6mh', 'md5': '54a6596f6a84624531866008a77fa27a', 'info_dict': { @@ -20,7 +21,19 @@ class FilmArchivIE(InfoExtractor): 'description': 'md5:9843f92df5cc9a4975cee7aabcf6e3b2', 'thumbnail': r're:https://cdn.filmarchiv.at/f_0305/p7xKrXUPBwoNE9x6mh[^/]*/poster.jpg$', }, - }] + }, + { + 'url': 'https://www.filmarchiv.at/de/filmarchiv-on/video/f_0306vI3wO0tJIsfrqYFQXF', + 'md5': '595385d7f54cb6529140ee8de7d1c3c7', + 'info_dict': { + 'id': 'f_0306vI3wO0tJIsfrqYFQXF', + 'ext': 'mp4', + 'title': 'Vor 70 Jahren: Wettgehen der Briefträger in Wien', + 'description': 'md5:b2a2e4230923cd1969d471c552e62811', + 'thumbnail': r're:https://cdn.filmarchiv.at/f_0306/vI3wO0tJIsfrqYFQXF[^/]*/poster.jpg$', + }, + } + ] def _real_extract(self, url): media_id = self._match_id(url) From 876608098a2da28aa8ec34fc81a2579a7093f6e5 Mon Sep 17 00:00:00 2001 From: delta Date: Fri, 20 Jun 2025 12:44:19 +0200 Subject: [PATCH 15/16] add trailing comma --- yt_dlp/extractor/filmarchiv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index 47c363748..62820f037 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -32,7 +32,7 @@ class FilmArchivIE(InfoExtractor): 'description': 'md5:b2a2e4230923cd1969d471c552e62811', 'thumbnail': r're:https://cdn.filmarchiv.at/f_0306/vI3wO0tJIsfrqYFQXF[^/]*/poster.jpg$', }, - } + }, ] def _real_extract(self, url): From 6d2a097a74d4d0961ec20c024502b4b1c37b8254 Mon Sep 17 00:00:00 2001 From: delta <4elta@users.noreply.github.com> Date: Sun, 22 Jun 2025 13:58:47 +0200 Subject: [PATCH 16/16] Apply suggestions from code review awesome Co-authored-by: bashonly <88596187+bashonly@users.noreply.github.com> --- yt_dlp/extractor/filmarchiv.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/yt_dlp/extractor/filmarchiv.py b/yt_dlp/extractor/filmarchiv.py index 62820f037..15e8a62b0 100644 --- a/yt_dlp/extractor/filmarchiv.py +++ b/yt_dlp/extractor/filmarchiv.py @@ -10,8 +10,7 @@ class FilmArchivIE(InfoExtractor): IE_NAME = 'FILMARCHIV ON' _VALID_URL = r'https?://(?:www\.)?filmarchiv\.at/de/filmarchiv-on/video/(?P[0-9a-zA-Z_]+)' - _TESTS = [ - { + _TESTS = [{ 'url': 'https://www.filmarchiv.at/de/filmarchiv-on/video/f_0305p7xKrXUPBwoNE9x6mh', 'md5': '54a6596f6a84624531866008a77fa27a', 'info_dict': { @@ -21,8 +20,7 @@ class FilmArchivIE(InfoExtractor): 'description': 'md5:9843f92df5cc9a4975cee7aabcf6e3b2', 'thumbnail': r're:https://cdn.filmarchiv.at/f_0305/p7xKrXUPBwoNE9x6mh[^/]*/poster.jpg$', }, - }, - { + }, { 'url': 'https://www.filmarchiv.at/de/filmarchiv-on/video/f_0306vI3wO0tJIsfrqYFQXF', 'md5': '595385d7f54cb6529140ee8de7d1c3c7', 'info_dict': { @@ -32,8 +30,7 @@ class FilmArchivIE(InfoExtractor): 'description': 'md5:b2a2e4230923cd1969d471c552e62811', 'thumbnail': r're:https://cdn.filmarchiv.at/f_0306/vI3wO0tJIsfrqYFQXF[^/]*/poster.jpg$', }, - }, - ] + }] def _real_extract(self, url): media_id = self._match_id(url)