From 307697b72f39981b51efb5bb307e3cd9c71874dc Mon Sep 17 00:00:00 2001 From: lukassup Date: Tue, 9 Jul 2024 18:10:47 +0300 Subject: [PATCH 1/6] [ie/tvplay]: fix broken extractor --- yt_dlp/extractor/tvplay.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/yt_dlp/extractor/tvplay.py b/yt_dlp/extractor/tvplay.py index b4a927a1d3..8e8bcc1b2a 100644 --- a/yt_dlp/extractor/tvplay.py +++ b/yt_dlp/extractor/tvplay.py @@ -216,8 +216,8 @@ class TVPlayHomeIE(InfoExtractor): https?:// (?:tv3?)? play\.(?:tv3|skaties)\.(?Plv|lt|ee)/ - (?Plives/)? - [^?#&]+(?:episode|programme|clip)-(?P\d+) + (lives/)? + [^?#&]+(?Pepisode|programme|clip|live)-(?P\d+) ''' _TESTS = [{ 'url': 'https://play.tv3.lt/series/gauju-karai-karveliai,serial-2343791/serija-8,episode-2343828', @@ -263,18 +263,30 @@ class TVPlayHomeIE(InfoExtractor): }, { 'url': 'https://tv3play.skaties.lv/clips/tv3-zinas-valsti-lidz-15novembrim-bus-majsede,clip-3464509', 'only_matching': True, + }, { + 'url': 'https://play.tv3.lt/lives/power-hit-radio,live-4856680', + 'only_matching': True, + }, { + 'url': 'https://play.tv3.lt/show/tv3-plus,live-4929289', + 'only_matching': True, }] def _real_extract(self, url): - country, is_live, video_id = self._match_valid_url(url).groups() + country, category, video_id = self._match_valid_url(url).groups() - api_path = 'lives/programmes' if is_live else 'vods' + api_path = { + 'live': 'lives', + 'programme': 'lives/programmes', + }.get(category) or 'vods' data = self._download_json( urljoin(url, f'/api/products/{api_path}/{video_id}?platform=BROWSER&lang={country.upper()}'), video_id) - video_type = 'CATCHUP' if is_live else 'MOVIE' - stream_id = data['programRecordingId'] if is_live else video_id + video_type = { + 'live': 'LIVE', + 'programme': 'CATCHUP', + }.get(category) or 'MOVIE' + stream_id = data.get('programRecordingId') or video_id stream = self._download_json( urljoin(url, f'/api/products/{stream_id}/videos/playlist?videoType={video_type}&platform=BROWSER'), video_id) formats, subtitles = self._extract_m3u8_formats_and_subtitles( From cb648ccd6d9031fa71056d8749f521ef82edfbef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20=C5=A0upienis?= Date: Tue, 9 Jul 2024 19:35:30 +0300 Subject: [PATCH 2/6] Update yt_dlp/extractor/tvplay.py Co-authored-by: bashonly <88596187+bashonly@users.noreply.github.com> --- yt_dlp/extractor/tvplay.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/yt_dlp/extractor/tvplay.py b/yt_dlp/extractor/tvplay.py index 8e8bcc1b2a..e22a3bdbbd 100644 --- a/yt_dlp/extractor/tvplay.py +++ b/yt_dlp/extractor/tvplay.py @@ -216,8 +216,7 @@ class TVPlayHomeIE(InfoExtractor): https?:// (?:tv3?)? play\.(?:tv3|skaties)\.(?Plv|lt|ee)/ - (lives/)? - [^?#&]+(?Pepisode|programme|clip|live)-(?P\d+) + [^?#&]+,(?Pepisode|programme|clip|live)-(?P\d+) ''' _TESTS = [{ 'url': 'https://play.tv3.lt/series/gauju-karai-karveliai,serial-2343791/serija-8,episode-2343828', From 7bad952c714fabe2a69b0b615940b711d9040c80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20=C5=A0upienis?= Date: Tue, 9 Jul 2024 19:35:37 +0300 Subject: [PATCH 3/6] Update yt_dlp/extractor/tvplay.py Co-authored-by: bashonly <88596187+bashonly@users.noreply.github.com> --- yt_dlp/extractor/tvplay.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yt_dlp/extractor/tvplay.py b/yt_dlp/extractor/tvplay.py index e22a3bdbbd..eb3f49ce10 100644 --- a/yt_dlp/extractor/tvplay.py +++ b/yt_dlp/extractor/tvplay.py @@ -271,7 +271,7 @@ class TVPlayHomeIE(InfoExtractor): }] def _real_extract(self, url): - country, category, video_id = self._match_valid_url(url).groups() + country, category, video_id = self._match_valid_url(url).group('country', 'category', 'id') api_path = { 'live': 'lives', From 225ada61fd8dbb583b18de21786b6b20463f98d2 Mon Sep 17 00:00:00 2001 From: lukassup Date: Tue, 9 Jul 2024 20:55:14 +0300 Subject: [PATCH 4/6] [ie/tvplay]: fix thumbnail urls --- yt_dlp/extractor/tvplay.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yt_dlp/extractor/tvplay.py b/yt_dlp/extractor/tvplay.py index eb3f49ce10..72a5af2b31 100644 --- a/yt_dlp/extractor/tvplay.py +++ b/yt_dlp/extractor/tvplay.py @@ -292,7 +292,7 @@ def _real_extract(self, url): stream['sources']['HLS'][0]['src'], video_id, 'mp4', 'm3u8_native', m3u8_id='hls') thumbnails = set(traverse_obj( - data, (('galary', 'images', 'artworks'), ..., ..., ('miniUrl', 'mainUrl')), expected_type=url_or_none)) + data, (('images', 'artworks'), ..., ..., ('miniUrl', 'mainUrl')), expected_type=url_or_none)) return { 'id': video_id, @@ -304,7 +304,7 @@ def _real_extract(self, url): 'episode': data.get('title'), 'episode_number': int_or_none(data.get('episode')), 'release_year': int_or_none(traverse_obj(data, ('season', 'serial', 'year'))), - 'thumbnails': [{'url': url, 'ext': 'jpg'} for url in thumbnails], + 'thumbnails': [{'url': f'https:{url}', 'ext': 'jpg'} for url in thumbnails], 'formats': formats, 'subtitles': subtitles, } From b564e2894903c51a11f59a38a9de2ff443418c62 Mon Sep 17 00:00:00 2001 From: lukassup Date: Wed, 10 Jul 2024 23:25:23 +0300 Subject: [PATCH 5/6] [ie/tvplay] fix: support more video types --- yt_dlp/extractor/tvplay.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/yt_dlp/extractor/tvplay.py b/yt_dlp/extractor/tvplay.py index 72a5af2b31..4ecc1c613b 100644 --- a/yt_dlp/extractor/tvplay.py +++ b/yt_dlp/extractor/tvplay.py @@ -280,12 +280,10 @@ def _real_extract(self, url): data = self._download_json( urljoin(url, f'/api/products/{api_path}/{video_id}?platform=BROWSER&lang={country.upper()}'), video_id) - - video_type = { - 'live': 'LIVE', - 'programme': 'CATCHUP', - }.get(category) or 'MOVIE' - stream_id = data.get('programRecordingId') or video_id + video_type = 'MOVIE' + if category not in ('episode', 'clip'): + video_type = traverse_obj(data, ('mainCategory', 'categoryType')) or 'MOVIE' + stream_id = traverse_obj(data, ('live', 'id')) or data.get('programRecordingId') or video_id stream = self._download_json( urljoin(url, f'/api/products/{stream_id}/videos/playlist?videoType={video_type}&platform=BROWSER'), video_id) formats, subtitles = self._extract_m3u8_formats_and_subtitles( From d8dee5846fc8c4e5cf8f9cca2be8c8840a401f78 Mon Sep 17 00:00:00 2001 From: lukassup Date: Thu, 11 Jul 2024 00:13:07 +0300 Subject: [PATCH 6/6] [ie/tvplay] add some working tests --- yt_dlp/extractor/tvplay.py | 91 +++++++++++++++++++++++--------------- 1 file changed, 56 insertions(+), 35 deletions(-) diff --git a/yt_dlp/extractor/tvplay.py b/yt_dlp/extractor/tvplay.py index 4ecc1c613b..4834f32a43 100644 --- a/yt_dlp/extractor/tvplay.py +++ b/yt_dlp/extractor/tvplay.py @@ -219,55 +219,76 @@ class TVPlayHomeIE(InfoExtractor): [^?#&]+,(?Pepisode|programme|clip|live)-(?P\d+) ''' _TESTS = [{ - 'url': 'https://play.tv3.lt/series/gauju-karai-karveliai,serial-2343791/serija-8,episode-2343828', + 'url': 'https://play.tv3.lt/series/romeo-ir-dziuljeta,serial-7652008/serija-1,episode-7652164', 'info_dict': { - 'id': '2343828', + 'id': '7652164', 'ext': 'mp4', - 'title': 'Gaujų karai. Karveliai (2021) | S01E08: Serija 8', - 'description': 'md5:f6fcfbb236429f05531131640dfa7c81', - 'duration': 2710, - 'season': 'Gaujų karai. Karveliai', - 'season_number': 1, + 'season': 'Romeo ir Džiuljeta', 'release_year': 2021, - 'episode': 'Serija 8', - 'episode_number': 8, + 'thumbnail': 'https://static3.go3.tv/scale/go3/webuploads/rest/vod/screenshot/GM_89464288/preview_72.jpg?quality=65&srcmode=3&srcx=556&srcy=&srcw=810&srch=1080&type=&dstw=375&dsth=500', + 'season_number': 1, + 'duration': 1577, + 'episode_number': 1, + 'episode': 'Serija 1', + 'title': 'Romeo ir Džiuljeta (2021) | S01E01: Serija 1', }, 'params': { - 'skip_download': 'm3u8', + 'skip_download': 'm3u8', # drm stream }, }, { - 'url': 'https://play.tv3.lt/series/moterys-meluoja-geriau-n-7,serial-2574652/serija-25,episode-3284937', + 'url': 'https://play.tv3.lv/news/neka-personiga,serial-2502901/16junijs,episode-7598931', 'info_dict': { - 'id': '3284937', + 'id': '7598931', 'ext': 'mp4', - 'season': 'Moterys meluoja geriau [N-7]', - 'season_number': 14, - 'release_year': 2021, - 'episode': 'Serija 25', - 'episode_number': 25, - 'title': 'Moterys meluoja geriau [N-7] (2021) | S14|E25: Serija 25', - 'description': 'md5:c6926e9710f1a126f028fbe121eddb79', - 'duration': 2440, + 'thumbnail': 'https://static3.go3.tv/scale/go3/webuploads/rest/vod/screenshot/NP_16062024/preview_48.jpg?quality=65&srcmode=3&srcx=556&srcy=&srcw=810&srch=1080&type=&dstw=375&dsth=500', + 'title': 'Nekā Personīga (2023) | S2024E24: 16.Jūnijs', + 'description': 'md5:44f243be7a790195c99ceca9e57e3051', + 'episode': '16.Jūnijs', + 'release_year': 2023, + 'season': 'Nekā Personīga', + 'duration': 2336, + 'season_number': 2024, + 'episode_number': 24, + }, + 'params': { + 'skip_download': 'm3u8', # drm stream }, - 'skip': '404', }, { - 'url': 'https://play.tv3.lt/lives/tv6-lt,live-2838694/optibet-a-lygos-rungtynes-marijampoles-suduva--vilniaus-riteriai,programme-3422014', - 'only_matching': True, + 'url': 'https://play.tv3.lt/clip/dalios-grybauskaites-sveikinimas-salies-zmonems-liepos-6-osios-proga,clip-7696980', + 'info_dict': { + 'id': '7696980', + 'ext': 'mp4', + 'thumbnail': 'https://static3.go3.tv/scale/go3/webuploads/rest/upload/clip/7696980/images/22862309?srcx=1&srcy=1&srcw=1439&srch=959&dstw=1439&dsth=959&srcmode=0&quality=65&type=1', + 'episode': 'Dalios Grybauskaitės sveikinimas šalies žmonėms liepos 6-osios proga', + 'description': 'md5:ceca4e1a2ea1d20c8cd03a8aad837e3c', + 'duration': 36, + 'title': 'Dalios Grybauskaitės sveikinimas šalies žmonėms liepos 6-osios proga', + }, + 'params': { + 'skip_download': 'm3u8', # drm stream + }, }, { - 'url': 'https://tv3play.skaties.lv/series/women-lie-better-lv,serial-1024464/women-lie-better-lv,episode-1038762', - 'only_matching': True, - }, { - 'url': 'https://play.tv3.ee/series/_,serial-2654462/_,episode-2654474', - 'only_matching': True, - }, { - 'url': 'https://tv3play.skaties.lv/clips/tv3-zinas-valsti-lidz-15novembrim-bus-majsede,clip-3464509', - 'only_matching': True, + 'url': 'https://play.tv3.lt/lives/tiesiogiai,live-4117109/futbolo-pulsas-die-mannschaft-ar-la-roja-mbappe-ar-ronaldo,programme-7702292', + 'info_dict': { + 'id': '7702292', + 'ext': 'mp4', + 'title': 'Futbolo pulsas: „Die Mannschaft“ ar „La Roja“? Mbappe ar Ronaldo?', + 'episode': 'Futbolo pulsas: „Die Mannschaft“ ar „La Roja“? Mbappe ar Ronaldo?', + 'description': 'md5:921386e9dfd90a82f2fd226e2468b142', + 'thumbnail': 'https://static3.go3.tv/scale/go3/webuploads/rest/upload/programme/7702292/images/22869955?dsth=1080&dstw=1920&srcmode=0&quality=65&type=1&srcx=1&srcy=1&srcw=1/1&srch=1/1', + }, + 'params': { + 'skip_download': 'm3u8', # drm stream + }, }, { 'url': 'https://play.tv3.lt/lives/power-hit-radio,live-4856680', - 'only_matching': True, - }, { - 'url': 'https://play.tv3.lt/show/tv3-plus,live-4929289', - 'only_matching': True, + 'info_dict': { + 'id': '4856680', + 'ext': 'mp4', + 'title': 'Power Hit Radio', + 'thumbnail': 'https://static3.go3.tv/scale/go3/webuploads/rest/upload/live/4856680/images/19296497?srcx=1&srcy=1&srcw=511&srch=287&dstw=1920&dsth=1078&srcmode=0&quality=65&type=0', + 'episode': 'Power Hit Radio', + }, }] def _real_extract(self, url):