From 2d37a832091fba82618d3e6af7d682c64e165743 Mon Sep 17 00:00:00 2001 From: Benoit Pierre Date: Sat, 15 Feb 2025 13:57:09 +0100 Subject: [PATCH 1/3] [ie/france24] Add extractor --- yt_dlp/extractor/_extractors.py | 1 + yt_dlp/extractor/france24.py | 63 +++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 yt_dlp/extractor/france24.py diff --git a/yt_dlp/extractor/_extractors.py b/yt_dlp/extractor/_extractors.py index c937dfe13..ad415779a 100644 --- a/yt_dlp/extractor/_extractors.py +++ b/yt_dlp/extractor/_extractors.py @@ -685,6 +685,7 @@ ) from .foxsports import FoxSportsIE from .fptplay import FptplayIE +from .france24 import France24IE from .franceinter import FranceInterIE from .francetv import ( FranceTVIE, diff --git a/yt_dlp/extractor/france24.py b/yt_dlp/extractor/france24.py new file mode 100644 index 000000000..264a73ff3 --- /dev/null +++ b/yt_dlp/extractor/france24.py @@ -0,0 +1,63 @@ +import json +import re + +from .common import InfoExtractor + + +class France24IE(InfoExtractor): + IE_NAME = 'france24' + _VALID_URL = r'https?://www\.france24\.com/' + _TESTS = [{ + 'url': 'https://www.france24.com/fr/émissions/invité-du-jour/20230608-eva-jospin-plasticienne-le-propre-de-la-sculpture-c-est-le-rapport-à-l-espace', + 'info_dict': { + 'age_limit': 0, + 'availability': 'public', + 'categories': ['News & Politics'], + 'channel': 'FRANCE 24', + 'channel_follower_count': int, + 'channel_id': 'UCCCPCZNChQdGa9EkATeye4g', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCCCPCZNChQdGa9EkATeye4g', + 'chapters': [ + {'start_time': 0.0, 'title': 'Introduction', 'end_time': 30.0}, + {'start_time': 30.0, 'title': 'Palais des Papes', 'end_time': 80.0}, + {'start_time': 80.0, 'title': 'Forêt', 'end_time': 140.0}, + {'start_time': 140.0, 'title': 'Carton', 'end_time': 260.0}, + {'start_time': 260.0, 'title': 'Le repentir', 'end_time': 395.0}, + {'start_time': 395.0, 'title': 'Les architectures de fête', 'end_time': 480.0}, + {'start_time': 480.0, 'title': "L'art contemporain", 'end_time': 535.0}, + {'start_time': 535.0, 'title': "L'habitat troglodyte", 'end_time': 605.0}, + {'start_time': 605.0, 'title': "L'urgence climatique", 'end_time': 701}, + ], + 'comment_count': int, + 'description': 'md5:7a7cc352189bbc16132b5f4819f2ed8a', + 'duration': 701, + 'ext': 'mp4', + 'id': '4fFMuXLWfAo', + 'like_count': int, + 'live_status': 'not_live', + 'playable_in_embed': True, + 'tags': ['Art', 'Culture', "Festival d'Avignon", 'L_INVITE DU JOUR', 'Sculpture', 'france24', 'news'], + 'thumbnail': 'https://i.ytimg.com/vi/4fFMuXLWfAo/sddefault.jpg', + 'timestamp': 1686218017, + 'title': '''Eva Jospin, plasticienne : "Le propre de la sculpture, c'est le rapport à l'espace" • FRANCE 24''', + 'upload_date': '20230608', + 'uploader': 'FRANCE 24', + 'uploader_id': '@FRANCE24', + 'uploader_url': 'https://www.youtube.com/@FRANCE24', + 'view_count': int, + }, + }, { + 'url': 'https://www.france24.com/en/europe/20250214-drone-warfare-stalls-progress-on-ukraine-s-front-line', + 'only_matching': True, + }, { + 'url': 'https://www.france24.com/fr/éco-tech/20250215-cinq-questions-clés-sur-le-doge-la-commission-d-elon-musk-qui-opère-une-purge-administrative', + 'only_matching': True, + }] + + def _real_extract(self, url): + webpage = self._download_webpage(url, None, 'Downloading video page', headers={'User-Agent': 'curl/8.12.1'}) + name, info = self._search_regex(r'', webpage, 'video info', flags=re.MULTILINE, group=(1, 2)) + for source in json.loads(info)['sources']: + if source['name'] == name: + return self.url_result(source['url']) From 8573a4d2a769215be0596cd57428689a37098de3 Mon Sep 17 00:00:00 2001 From: Benoit Pierre Date: Sat, 15 Feb 2025 23:39:17 +0100 Subject: [PATCH 2/3] fixup! [ie/france24] Add extractor --- yt_dlp/extractor/france24.py | 91 +++++++++++++++++++++++++++++++++--- 1 file changed, 84 insertions(+), 7 deletions(-) diff --git a/yt_dlp/extractor/france24.py b/yt_dlp/extractor/france24.py index 264a73ff3..4c8c3be4d 100644 --- a/yt_dlp/extractor/france24.py +++ b/yt_dlp/extractor/france24.py @@ -1,12 +1,19 @@ -import json import re from .common import InfoExtractor +from .youtube import YoutubeIE +from ..utils import extract_attributes class France24IE(InfoExtractor): + IE_NAME = 'france24' - _VALID_URL = r'https?://www\.france24\.com/' + _VALID_URL = ( + # Front-page livestream. + r'https?://www\.france24\.com(?P/?|/en/?$|/fr/?)$', + # Articles and shows. + r'https?://www\.france24\.com/(?:en|fr)/(?:[^/#]+/)+(?P\d{8}-[\w-]+)$', + ) _TESTS = [{ 'url': 'https://www.france24.com/fr/émissions/invité-du-jour/20230608-eva-jospin-plasticienne-le-propre-de-la-sculpture-c-est-le-rapport-à-l-espace', 'info_dict': { @@ -47,17 +54,87 @@ class France24IE(InfoExtractor): 'uploader_url': 'https://www.youtube.com/@FRANCE24', 'view_count': int, }, + }, { + 'url': 'https://www.france24.com/en/europe/20250213-ukraine-europe-must-be-involved-peace-talks-say-nato-european-members-russia-trump-rutte', + 'info_dict': { + 'id': '20250213-ukraine-europe-must-be-involved-peace-talks-say-nato-european-members-russia-trump-rutte', + }, + 'playlist': [{ + 'info_dict': { + 'age_limit': 0, + 'availability': 'public', + 'categories': ['News & Politics'], + 'channel': 'FRANCE 24 English', + 'channel_follower_count': int, + 'channel_id': 'UCQfwfsi5VrQ8yKZ-UWmAEFg', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCQfwfsi5VrQ8yKZ-UWmAEFg', + 'comment_count': int, + 'description': 'md5:0c13773aaf75c3c4985735dd1242e360', + 'duration': 356, + 'ext': 'mp4', + 'id': 'NxjkC-5a0lo', + 'like_count': int, + 'live_status': 'not_live', + 'playable_in_embed': True, + 'tags': ['Europe', 'NATO', 'USA', 'Ukraine', 'europe', 'nato', 'trump'], + 'thumbnail': 'https://i.ytimg.com/vi/NxjkC-5a0lo/maxresdefault.jpg', + 'timestamp': 1739433984, + 'title': 'Europeans in ‘difficult position’ after US defence chief suggests Ukraine abandon NATO hopes', + 'upload_date': '20250213', + 'uploader': 'FRANCE 24 English', + 'uploader_id': '@France24_en', + 'uploader_url': 'https://www.youtube.com/@France24_en', + 'view_count': int, + }, + }, { + 'info_dict': { + 'age_limit': 0, + 'availability': 'unlisted', + 'categories': ['News & Politics'], + 'channel': 'FRANCE 24 English', + 'channel_follower_count': int, + 'channel_id': 'UCQfwfsi5VrQ8yKZ-UWmAEFg', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCQfwfsi5VrQ8yKZ-UWmAEFg', + 'description': 'md5:64ba0c95def2144bcd145956a9dfc0d3', + 'duration': 427, + 'ext': 'mp4', + 'id': 'kanu61l-OUg', + 'like_count': int, + 'live_status': 'not_live', + 'playable_in_embed': True, + 'tags': 'count:12', + 'thumbnail': 'https://i.ytimg.com/vi/kanu61l-OUg/sddefault.jpg', + 'timestamp': 1739429955, + 'title': 'Scholz rejects ‘dictated peace’ for Ukraine as Europe reels after Trump-Putin call • FRANCE 24', + 'upload_date': '20250213', + 'uploader': 'FRANCE 24 English', + 'uploader_id': '@France24_en', + 'uploader_url': 'https://www.youtube.com/@France24_en', + 'view_count': int, + }, + }], }, { 'url': 'https://www.france24.com/en/europe/20250214-drone-warfare-stalls-progress-on-ukraine-s-front-line', 'only_matching': True, }, { - 'url': 'https://www.france24.com/fr/éco-tech/20250215-cinq-questions-clés-sur-le-doge-la-commission-d-elon-musk-qui-opère-une-purge-administrative', + 'url': 'https://www.france24.com/fr/vidéo/20250215-gaza-l-accord-très-fragile-entre-gaza-et-israël-permet-la-libération-de-trois-otages', + 'only_matching': True, + }, { + 'url': 'https://www.france24.com/en/', + 'only_matching': True, + }, { + 'url': 'https://www.france24.com', 'only_matching': True, }] def _real_extract(self, url): + display_id = self._match_id(url).strip('/') webpage = self._download_webpage(url, None, 'Downloading video page', headers={'User-Agent': 'curl/8.12.1'}) - name, info = self._search_regex(r'', webpage, 'video info', flags=re.MULTILINE, group=(1, 2)) - for source in json.loads(info)['sources']: - if source['name'] == name: - return self.url_result(source['url']) + entries = [] + for player in re.findall(r'<(?:youtube|video)-player\b[^>]*>', webpage): + attrs = extract_attributes(player) + if not attrs.get('playlist') and attrs.get('video-type') == 'youtube': + entries.append(self.url_result(attrs.get('source'), video_id=attrs.get('video-id'), ie=YoutubeIE)) + return self.playlist_result(entries, playlist_id=display_id) From 235fa35996dfd02d2e1f498a630f1c6fe89b5c08 Mon Sep 17 00:00:00 2001 From: Benoit Pierre Date: Fri, 21 Feb 2025 19:28:28 +0100 Subject: [PATCH 3/3] fixup! [ie/france24] Add extractor --- yt_dlp/extractor/france24.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/yt_dlp/extractor/france24.py b/yt_dlp/extractor/france24.py index 4c8c3be4d..ce518ad42 100644 --- a/yt_dlp/extractor/france24.py +++ b/yt_dlp/extractor/france24.py @@ -128,10 +128,11 @@ class France24IE(InfoExtractor): 'url': 'https://www.france24.com', 'only_matching': True, }] + _USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; rv:135.0) Gecko/20100101 Firefox/135.0' def _real_extract(self, url): display_id = self._match_id(url).strip('/') - webpage = self._download_webpage(url, None, 'Downloading video page', headers={'User-Agent': 'curl/8.12.1'}) + webpage = self._download_webpage(url, None, 'Downloading video page', headers={'User-Agent': self._USER_AGENT}) entries = [] for player in re.findall(r'<(?:youtube|video)-player\b[^>]*>', webpage): attrs = extract_attributes(player)