diff --git a/yt_dlp/extractor/lci.py b/yt_dlp/extractor/lci.py index 708cb548d8..3339f7ced7 100644 --- a/yt_dlp/extractor/lci.py +++ b/yt_dlp/extractor/lci.py @@ -1,6 +1,6 @@ from .common import InfoExtractor from .wat import WatIE -from ..utils import ExtractorError, int_or_none +from ..utils import ExtractorError, str_or_none from ..utils.traversal import traverse_obj @@ -35,6 +35,9 @@ class LCIIE(InfoExtractor): }, { 'url': 'https://www.lci.fr/politique/election-presidentielle-2022-second-tour-j-2-marine-le-pen-et-emmanuel-macron-en-interview-de-lci-vendredi-soir-2217486.html', 'only_matching': True, + }, { + 'url': 'https://www.tf1info.fr/replay-lci/videos/video-24h-pujadas-du-mercredi-2-juillet-2025-73777-2380589.html', + 'only_matching': True, }] def _real_extract(self, url): @@ -42,7 +45,7 @@ def _real_extract(self, url): webpage = self._download_webpage(url, video_id) next_data = self._search_nextjs_data(webpage, video_id) wat_id = traverse_obj(next_data, ( - 'props', 'pageProps', 'page', 'tms', 'videos', {dict.keys}, ..., {int_or_none}, any)) + 'props', 'pageProps', 'page', 'tms', 'videos', {dict.keys}, ..., {str_or_none}, any)) if wat_id is None: raise ExtractorError('Could not find wat_id') diff --git a/yt_dlp/extractor/wat.py b/yt_dlp/extractor/wat.py index c1c3af800b..153e64d454 100644 --- a/yt_dlp/extractor/wat.py +++ b/yt_dlp/extractor/wat.py @@ -8,9 +8,12 @@ ) from ..utils.traversal import traverse_obj +import re + class WatIE(InfoExtractor): - _VALID_URL = r'(?:wat:|https?://(?:www\.)?wat\.tv/video/.*-)(?P[0-9a-z]+)' + _WAT_ID_RE = r'[\da-f]{8}-(?:[\da-f]{4}-){3}[\da-f]{12}' + _VALID_URL = rf'(?:wat:|https?://(?:www\.)?wat\.tv/video/.*-)(?P({_WAT_ID_RE}|[0-9a-z]+))' IE_NAME = 'wat.tv' _TESTS = [ { @@ -54,12 +57,16 @@ class WatIE(InfoExtractor): }, 'params': {'skip_download': 'm3u8'}, }, + { + 'url': 'wat:f0550853-c949-4e0e-8ba4-8237cbb512af', + 'only_matching': True, + }, ] _GEO_BYPASS = False def _real_extract(self, url): video_id = self._match_id(url) - video_id = video_id if video_id.isdigit() and len(video_id) > 6 else str(int(video_id, 36)) + video_id = video_id if re.match(self._WAT_ID_RE, video_id) or re.match(r'\d{7,}', video_id) else str(int(video_id, 36)) # 'contentv4' is used in the website, but it also returns the related # videos, we don't need them