We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
bfmtv.com is supported, rmc.bfmtv.com and rmcbfmplay.com are not. 
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I remove or skip any mandatory\* field

### Checklist

- [X] I'm reporting a new site support request
- [X] I've verified that I'm running yt-dlp version **2023.01.06** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that none of provided URLs [violate any copyrights](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#is-the-website-primarily-used-for-piracy) or contain any [DRM](https://en.wikipedia.org/wiki/Digital_rights_management) to the best of my knowledge
- [X] I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
- [X] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and am willing to share it if required

### Region

France

### Example URLs

https://rmc.bfmtv.com/replay-emissions/les-grandes-gueules/retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225.html


### Provide a description that is worded well enough to be understood

The site bfmtv.com is part of the supported sites. 

e.g.: https://www.bfmtv.com/replay-emissions/l-interview/attal-la-reforme-des-retraites-est-pour-les-francais-de-classe-moyenne_VN-202301120207.html

There is now the subdomain or "cousin domain" https://rmc.bfmtv.com which is not supported

e.g.: https://rmc.bfmtv.com/replay-emissions/les-grandes-gueules/retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225.html

Maybe there is something to do also with this one https://www.rmcbfmplay.com

e.g.: https://www.rmcbfmplay.com/video/rmc-story/les-grandes-gueules/retraites-une-reforme-trop-light?contentId=Product::NEUF_NUM23_N23852986105527C&universe=PROVIDER

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
[debug] Command-line config: ['-vU', 'https://rmc.bfmtv.com/replay-emissions/les-grandes-gueules/retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225.html']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2023.01.06 [6becd25] (win_exe)
[debug] Python 3.8.10 (CPython AMD64 64bit) - Windows-10-10.0.17763-SP0 (OpenSSL 1.1.1k  25 Mar 2021)
[debug] exe versions: ffmpeg N-93151-gff03418348, ffprobe N-93151-gff03418348
[debug] Optional libraries: Cryptodome-3.16.0, brotli-1.0.9, certifi-2022.12.07, mutagen-1.46.0, sqlite3-2.6.0, websockets-10.4
[debug] Proxy map: {}
[debug] Loaded 1760 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: 2023.01.06, Current version: 2023.01.06
yt-dlp is up to date (2023.01.06)
[generic] Extracting URL: https://rmc.bfmtv.com/replay-emissions/les-grandes-gueules/retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225.html
[generic] retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225: Downloading webpage
WARNING: [generic] Falling back on generic information extractor
[generic] retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225: Extracting information
[debug] Looking for embeds
ERROR: Unsupported URL: https://rmc.bfmtv.com/replay-emissions/les-grandes-gueules/retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225.html
Traceback (most recent call last):
  File "yt_dlp\YoutubeDL.py", line 1502, in wrapper
  File "yt_dlp\YoutubeDL.py", line 1578, in __extract_info
  File "yt_dlp\extractor\common.py", line 680, in extract
  File "yt_dlp\extractor\generic.py", line 2523, in _real_extract
yt_dlp.utils.UnsupportedError: Unsupported URL: https://rmc.bfmtv.com/replay-emissions/les-grandes-gueules/retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225.html
```


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `yt_dlp/extractor/bfmtv.py`
Content:
```
1 import re
2 
3 from .common import InfoExtractor
4 from ..utils import extract_attributes
5 
6 
7 class BFMTVBaseIE(InfoExtractor):
8     _VALID_URL_BASE = r'https?://(?:www\.)?bfmtv\.com/'
9     _VALID_URL_TMPL = _VALID_URL_BASE + r'(?:[^/]+/)*[^/?&#]+_%s[A-Z]-(?P<id>\d{12})\.html'
10     _VIDEO_BLOCK_REGEX = r'(<div[^>]+class="video_block"[^>]*>)'
11     BRIGHTCOVE_URL_TEMPLATE = 'http://players.brightcove.net/%s/%s_default/index.html?videoId=%s'
12 
13     def _brightcove_url_result(self, video_id, video_block):
14         account_id = video_block.get('accountid') or '876450612001'
15         player_id = video_block.get('playerid') or 'I2qBTln4u'
16         return self.url_result(
17             self.BRIGHTCOVE_URL_TEMPLATE % (account_id, player_id, video_id),
18             'BrightcoveNew', video_id)
19 
20 
21 class BFMTVIE(BFMTVBaseIE):
22     IE_NAME = 'bfmtv'
23     _VALID_URL = BFMTVBaseIE._VALID_URL_TMPL % 'V'
24     _TESTS = [{
25         'url': 'https://www.bfmtv.com/politique/emmanuel-macron-l-islam-est-une-religion-qui-vit-une-crise-aujourd-hui-partout-dans-le-monde_VN-202010020146.html',
26         'info_dict': {
27             'id': '6196747868001',
28             'ext': 'mp4',
29             'title': 'Emmanuel Macron: "L\'Islam est une religion qui vit une crise aujourd’hui, partout dans le monde"',
30             'description': 'Le Président s\'exprime sur la question du séparatisme depuis les Mureaux, dans les Yvelines.',
31             'uploader_id': '876450610001',
32             'upload_date': '20201002',
33             'timestamp': 1601629620,
34         },
35     }]
36 
37     def _real_extract(self, url):
38         bfmtv_id = self._match_id(url)
39         webpage = self._download_webpage(url, bfmtv_id)
40         video_block = extract_attributes(self._search_regex(
41             self._VIDEO_BLOCK_REGEX, webpage, 'video block'))
42         return self._brightcove_url_result(video_block['videoid'], video_block)
43 
44 
45 class BFMTVLiveIE(BFMTVIE):  # XXX: Do not subclass from concrete IE
46     IE_NAME = 'bfmtv:live'
47     _VALID_URL = BFMTVBaseIE._VALID_URL_BASE + '(?P<id>(?:[^/]+/)?en-direct)'
48     _TESTS = [{
49         'url': 'https://www.bfmtv.com/en-direct/',
50         'info_dict': {
51             'id': '5615950982001',
52             'ext': 'mp4',
53             'title': r're:^le direct BFMTV WEB \d{4}-\d{2}-\d{2} \d{2}:\d{2}$',
54             'uploader_id': '876450610001',
55             'upload_date': '20171018',
56             'timestamp': 1508329950,
57         },
58         'params': {
59             'skip_download': True,
60         },
61     }, {
62         'url': 'https://www.bfmtv.com/economie/en-direct/',
63         'only_matching': True,
64     }]
65 
66 
67 class BFMTVArticleIE(BFMTVBaseIE):
68     IE_NAME = 'bfmtv:article'
69     _VALID_URL = BFMTVBaseIE._VALID_URL_TMPL % 'A'
70     _TESTS = [{
71         'url': 'https://www.bfmtv.com/sante/covid-19-un-responsable-de-l-institut-pasteur-se-demande-quand-la-france-va-se-reconfiner_AV-202101060198.html',
72         'info_dict': {
73             'id': '202101060198',
74             'title': 'Covid-19: un responsable de l\'Institut Pasteur se demande "quand la France va se reconfiner"',
75             'description': 'md5:947974089c303d3ac6196670ae262843',
76         },
77         'playlist_count': 2,
78     }, {
79         'url': 'https://www.bfmtv.com/international/pour-bolsonaro-le-bresil-est-en-faillite-mais-il-ne-peut-rien-faire_AD-202101060232.html',
80         'only_matching': True,
81     }, {
82         'url': 'https://www.bfmtv.com/sante/covid-19-oui-le-vaccin-de-pfizer-distribue-en-france-a-bien-ete-teste-sur-des-personnes-agees_AN-202101060275.html',
83         'only_matching': True,
84     }]
85 
86     def _real_extract(self, url):
87         bfmtv_id = self._match_id(url)
88         webpage = self._download_webpage(url, bfmtv_id)
89 
90         entries = []
91         for video_block_el in re.findall(self._VIDEO_BLOCK_REGEX, webpage):
92             video_block = extract_attributes(video_block_el)
93             video_id = video_block.get('videoid')
94             if not video_id:
95                 continue
96             entries.append(self._brightcove_url_result(video_id, video_block))
97 
98         return self.playlist_result(
99             entries, bfmtv_id, self._og_search_title(webpage, fatal=False),
100             self._html_search_meta(['og:description', 'description'], webpage))
101
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/yt_dlp/extractor/bfmtv.py b/yt_dlp/extractor/bfmtv.py
--- a/yt_dlp/extractor/bfmtv.py
+++ b/yt_dlp/extractor/bfmtv.py
@@ -5,7 +5,7 @@
 
 
 class BFMTVBaseIE(InfoExtractor):
-    _VALID_URL_BASE = r'https?://(?:www\.)?bfmtv\.com/'
+    _VALID_URL_BASE = r'https?://(?:www\.|rmc\.)?bfmtv\.com/'
     _VALID_URL_TMPL = _VALID_URL_BASE + r'(?:[^/]+/)*[^/?&#]+_%s[A-Z]-(?P<id>\d{12})\.html'
     _VIDEO_BLOCK_REGEX = r'(<div[^>]+class="video_block"[^>]*>)'
     BRIGHTCOVE_URL_TEMPLATE = 'http://players.brightcove.net/%s/%s_default/index.html?videoId=%s'
@@ -31,6 +31,9 @@
             'uploader_id': '876450610001',
             'upload_date': '20201002',
             'timestamp': 1601629620,
+            'duration': 44.757,
+            'tags': ['bfmactu', 'politique'],
+            'thumbnail': 'https://cf-images.eu-west-1.prod.boltdns.net/v1/static/876450610001/5041f4c1-bc48-4af8-a256-1b8300ad8ef0/cf2f9114-e8e2-4494-82b4-ab794ea4bc7d/1920x1080/match/image.jpg',
         },
     }]
 
@@ -81,6 +84,20 @@
     }, {
         'url': 'https://www.bfmtv.com/sante/covid-19-oui-le-vaccin-de-pfizer-distribue-en-france-a-bien-ete-teste-sur-des-personnes-agees_AN-202101060275.html',
         'only_matching': True,
+    }, {
+        'url': 'https://rmc.bfmtv.com/actualites/societe/transports/ce-n-est-plus-tout-rentable-le-bioethanol-e85-depasse-1eu-le-litre-des-automobilistes-regrettent_AV-202301100268.html',
+        'info_dict': {
+            'id': '6318445464112',
+            'ext': 'mp4',
+            'title': 'Le plein de bioéthanol fait de plus en plus mal à la pompe',
+            'description': None,
+            'uploader_id': '876630703001',
+            'upload_date': '20230110',
+            'timestamp': 1673341692,
+            'duration': 109.269,
+            'tags': ['rmc', 'show', 'apolline de malherbe', 'info', 'talk', 'matinale', 'radio'],
+            'thumbnail': 'https://cf-images.eu-west-1.prod.boltdns.net/v1/static/876630703001/5bef74b8-9d5e-4480-a21f-60c2e2480c46/96c88b74-f9db-45e1-8040-e199c5da216c/1920x1080/match/image.jpg'
+        }
     }]
 
     def _real_extract(self, url):

{"golden_diff": "diff --git a/yt_dlp/extractor/bfmtv.py b/yt_dlp/extractor/bfmtv.py\n--- a/yt_dlp/extractor/bfmtv.py\n+++ b/yt_dlp/extractor/bfmtv.py\n@@ -5,7 +5,7 @@\n \n \n class BFMTVBaseIE(InfoExtractor):\n-    _VALID_URL_BASE = r'https?://(?:www\\.)?bfmtv\\.com/'\n+    _VALID_URL_BASE = r'https?://(?:www\\.|rmc\\.)?bfmtv\\.com/'\n     _VALID_URL_TMPL = _VALID_URL_BASE + r'(?:[^/]+/)*[^/?&#]+_%s[A-Z]-(?P<id>\\d{12})\\.html'\n     _VIDEO_BLOCK_REGEX = r'(<div[^>]+class=\"video_block\"[^>]*>)'\n     BRIGHTCOVE_URL_TEMPLATE = 'http://players.brightcove.net/%s/%s_default/index.html?videoId=%s'\n@@ -31,6 +31,9 @@\n             'uploader_id': '876450610001',\n             'upload_date': '20201002',\n             'timestamp': 1601629620,\n+            'duration': 44.757,\n+            'tags': ['bfmactu', 'politique'],\n+            'thumbnail': 'https://cf-images.eu-west-1.prod.boltdns.net/v1/static/876450610001/5041f4c1-bc48-4af8-a256-1b8300ad8ef0/cf2f9114-e8e2-4494-82b4-ab794ea4bc7d/1920x1080/match/image.jpg',\n         },\n     }]\n \n@@ -81,6 +84,20 @@\n     }, {\n         'url': 'https://www.bfmtv.com/sante/covid-19-oui-le-vaccin-de-pfizer-distribue-en-france-a-bien-ete-teste-sur-des-personnes-agees_AN-202101060275.html',\n         'only_matching': True,\n+    }, {\n+        'url': 'https://rmc.bfmtv.com/actualites/societe/transports/ce-n-est-plus-tout-rentable-le-bioethanol-e85-depasse-1eu-le-litre-des-automobilistes-regrettent_AV-202301100268.html',\n+        'info_dict': {\n+            'id': '6318445464112',\n+            'ext': 'mp4',\n+            'title': 'Le plein de bio\u00e9thanol fait de plus en plus mal \u00e0 la pompe',\n+            'description': None,\n+            'uploader_id': '876630703001',\n+            'upload_date': '20230110',\n+            'timestamp': 1673341692,\n+            'duration': 109.269,\n+            'tags': ['rmc', 'show', 'apolline de malherbe', 'info', 'talk', 'matinale', 'radio'],\n+            'thumbnail': 'https://cf-images.eu-west-1.prod.boltdns.net/v1/static/876630703001/5bef74b8-9d5e-4480-a21f-60c2e2480c46/96c88b74-f9db-45e1-8040-e199c5da216c/1920x1080/match/image.jpg'\n+        }\n     }]\n \n     def _real_extract(self, url):\n", "issue": "bfmtv.com is supported, rmc.bfmtv.com and rmcbfmplay.com are not. \n### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE\n\n- [X] I understand that I will be **blocked** if I remove or skip any mandatory\\* field\n\n### Checklist\n\n- [X] I'm reporting a new site support request\n- [X] I've verified that I'm running yt-dlp version **2023.01.06** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)\n- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details\n- [X] I've checked that none of provided URLs [violate any copyrights](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#is-the-website-primarily-used-for-piracy) or contain any [DRM](https://en.wikipedia.org/wiki/Digital_rights_management) to the best of my knowledge\n- [X] I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates\n- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)\n- [X] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and am willing to share it if required\n\n### Region\n\nFrance\n\n### Example URLs\n\nhttps://rmc.bfmtv.com/replay-emissions/les-grandes-gueules/retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225.html\r\n\n\n### Provide a description that is worded well enough to be understood\n\nThe site bfmtv.com is part of the supported sites. \r\n\r\ne.g.: https://www.bfmtv.com/replay-emissions/l-interview/attal-la-reforme-des-retraites-est-pour-les-francais-de-classe-moyenne_VN-202301120207.html\r\n\r\nThere is now the subdomain or \"cousin domain\" https://rmc.bfmtv.com which is not supported\r\n\r\ne.g.: https://rmc.bfmtv.com/replay-emissions/les-grandes-gueules/retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225.html\r\n\r\nMaybe there is something to do also with this one https://www.rmcbfmplay.com\r\n\r\ne.g.: https://www.rmcbfmplay.com/video/rmc-story/les-grandes-gueules/retraites-une-reforme-trop-light?contentId=Product::NEUF_NUM23_N23852986105527C&universe=PROVIDER\n\n### Provide verbose output that clearly demonstrates the problem\n\n- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)\n- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below\n\n### Complete Verbose Output\n\n```shell\n[debug] Command-line config: ['-vU', 'https://rmc.bfmtv.com/replay-emissions/les-grandes-gueules/retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225.html']\r\n[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8\r\n[debug] yt-dlp version 2023.01.06 [6becd25] (win_exe)\r\n[debug] Python 3.8.10 (CPython AMD64 64bit) - Windows-10-10.0.17763-SP0 (OpenSSL 1.1.1k  25 Mar 2021)\r\n[debug] exe versions: ffmpeg N-93151-gff03418348, ffprobe N-93151-gff03418348\r\n[debug] Optional libraries: Cryptodome-3.16.0, brotli-1.0.9, certifi-2022.12.07, mutagen-1.46.0, sqlite3-2.6.0, websockets-10.4\r\n[debug] Proxy map: {}\r\n[debug] Loaded 1760 extractors\r\n[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest\r\nLatest version: 2023.01.06, Current version: 2023.01.06\r\nyt-dlp is up to date (2023.01.06)\r\n[generic] Extracting URL: https://rmc.bfmtv.com/replay-emissions/les-grandes-gueules/retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225.html\r\n[generic] retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225: Downloading webpage\r\nWARNING: [generic] Falling back on generic information extractor\r\n[generic] retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225: Extracting information\r\n[debug] Looking for embeds\r\nERROR: Unsupported URL: https://rmc.bfmtv.com/replay-emissions/les-grandes-gueules/retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225.html\r\nTraceback (most recent call last):\r\n  File \"yt_dlp\\YoutubeDL.py\", line 1502, in wrapper\r\n  File \"yt_dlp\\YoutubeDL.py\", line 1578, in __extract_info\r\n  File \"yt_dlp\\extractor\\common.py\", line 680, in extract\r\n  File \"yt_dlp\\extractor\\generic.py\", line 2523, in _real_extract\r\nyt_dlp.utils.UnsupportedError: Unsupported URL: https://rmc.bfmtv.com/replay-emissions/les-grandes-gueules/retraites-la-facon-dont-cette-loi-est-faite-ce-n-est-pas-bon-tacle-mehdi-ghezzar_VN-202301110225.html\n```\n\n", "before_files": [{"content": "import re\n\nfrom .common import InfoExtractor\nfrom ..utils import extract_attributes\n\n\nclass BFMTVBaseIE(InfoExtractor):\n    _VALID_URL_BASE = r'https?://(?:www\\.)?bfmtv\\.com/'\n    _VALID_URL_TMPL = _VALID_URL_BASE + r'(?:[^/]+/)*[^/?&#]+_%s[A-Z]-(?P<id>\\d{12})\\.html'\n    _VIDEO_BLOCK_REGEX = r'(<div[^>]+class=\"video_block\"[^>]*>)'\n    BRIGHTCOVE_URL_TEMPLATE = 'http://players.brightcove.net/%s/%s_default/index.html?videoId=%s'\n\n    def _brightcove_url_result(self, video_id, video_block):\n        account_id = video_block.get('accountid') or '876450612001'\n        player_id = video_block.get('playerid') or 'I2qBTln4u'\n        return self.url_result(\n            self.BRIGHTCOVE_URL_TEMPLATE % (account_id, player_id, video_id),\n            'BrightcoveNew', video_id)\n\n\nclass BFMTVIE(BFMTVBaseIE):\n    IE_NAME = 'bfmtv'\n    _VALID_URL = BFMTVBaseIE._VALID_URL_TMPL % 'V'\n    _TESTS = [{\n        'url': 'https://www.bfmtv.com/politique/emmanuel-macron-l-islam-est-une-religion-qui-vit-une-crise-aujourd-hui-partout-dans-le-monde_VN-202010020146.html',\n        'info_dict': {\n            'id': '6196747868001',\n            'ext': 'mp4',\n            'title': 'Emmanuel Macron: \"L\\'Islam est une religion qui vit une crise aujourd\u2019hui, partout dans le monde\"',\n            'description': 'Le Pr\u00e9sident s\\'exprime sur la question du s\u00e9paratisme depuis les Mureaux, dans les Yvelines.',\n            'uploader_id': '876450610001',\n            'upload_date': '20201002',\n            'timestamp': 1601629620,\n        },\n    }]\n\n    def _real_extract(self, url):\n        bfmtv_id = self._match_id(url)\n        webpage = self._download_webpage(url, bfmtv_id)\n        video_block = extract_attributes(self._search_regex(\n            self._VIDEO_BLOCK_REGEX, webpage, 'video block'))\n        return self._brightcove_url_result(video_block['videoid'], video_block)\n\n\nclass BFMTVLiveIE(BFMTVIE):  # XXX: Do not subclass from concrete IE\n    IE_NAME = 'bfmtv:live'\n    _VALID_URL = BFMTVBaseIE._VALID_URL_BASE + '(?P<id>(?:[^/]+/)?en-direct)'\n    _TESTS = [{\n        'url': 'https://www.bfmtv.com/en-direct/',\n        'info_dict': {\n            'id': '5615950982001',\n            'ext': 'mp4',\n            'title': r're:^le direct BFMTV WEB \\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}$',\n            'uploader_id': '876450610001',\n            'upload_date': '20171018',\n            'timestamp': 1508329950,\n        },\n        'params': {\n            'skip_download': True,\n        },\n    }, {\n        'url': 'https://www.bfmtv.com/economie/en-direct/',\n        'only_matching': True,\n    }]\n\n\nclass BFMTVArticleIE(BFMTVBaseIE):\n    IE_NAME = 'bfmtv:article'\n    _VALID_URL = BFMTVBaseIE._VALID_URL_TMPL % 'A'\n    _TESTS = [{\n        'url': 'https://www.bfmtv.com/sante/covid-19-un-responsable-de-l-institut-pasteur-se-demande-quand-la-france-va-se-reconfiner_AV-202101060198.html',\n        'info_dict': {\n            'id': '202101060198',\n            'title': 'Covid-19: un responsable de l\\'Institut Pasteur se demande \"quand la France va se reconfiner\"',\n            'description': 'md5:947974089c303d3ac6196670ae262843',\n        },\n        'playlist_count': 2,\n    }, {\n        'url': 'https://www.bfmtv.com/international/pour-bolsonaro-le-bresil-est-en-faillite-mais-il-ne-peut-rien-faire_AD-202101060232.html',\n        'only_matching': True,\n    }, {\n        'url': 'https://www.bfmtv.com/sante/covid-19-oui-le-vaccin-de-pfizer-distribue-en-france-a-bien-ete-teste-sur-des-personnes-agees_AN-202101060275.html',\n        'only_matching': True,\n    }]\n\n    def _real_extract(self, url):\n        bfmtv_id = self._match_id(url)\n        webpage = self._download_webpage(url, bfmtv_id)\n\n        entries = []\n        for video_block_el in re.findall(self._VIDEO_BLOCK_REGEX, webpage):\n            video_block = extract_attributes(video_block_el)\n            video_id = video_block.get('videoid')\n            if not video_id:\n                continue\n            entries.append(self._brightcove_url_result(video_id, video_block))\n\n        return self.playlist_result(\n            entries, bfmtv_id, self._og_search_title(webpage, fatal=False),\n            self._html_search_meta(['og:description', 'description'], webpage))\n", "path": "yt_dlp/extractor/bfmtv.py"}], "after_files": [{"content": "import re\n\nfrom .common import InfoExtractor\nfrom ..utils import extract_attributes\n\n\nclass BFMTVBaseIE(InfoExtractor):\n    _VALID_URL_BASE = r'https?://(?:www\\.|rmc\\.)?bfmtv\\.com/'\n    _VALID_URL_TMPL = _VALID_URL_BASE + r'(?:[^/]+/)*[^/?&#]+_%s[A-Z]-(?P<id>\\d{12})\\.html'\n    _VIDEO_BLOCK_REGEX = r'(<div[^>]+class=\"video_block\"[^>]*>)'\n    BRIGHTCOVE_URL_TEMPLATE = 'http://players.brightcove.net/%s/%s_default/index.html?videoId=%s'\n\n    def _brightcove_url_result(self, video_id, video_block):\n        account_id = video_block.get('accountid') or '876450612001'\n        player_id = video_block.get('playerid') or 'I2qBTln4u'\n        return self.url_result(\n            self.BRIGHTCOVE_URL_TEMPLATE % (account_id, player_id, video_id),\n            'BrightcoveNew', video_id)\n\n\nclass BFMTVIE(BFMTVBaseIE):\n    IE_NAME = 'bfmtv'\n    _VALID_URL = BFMTVBaseIE._VALID_URL_TMPL % 'V'\n    _TESTS = [{\n        'url': 'https://www.bfmtv.com/politique/emmanuel-macron-l-islam-est-une-religion-qui-vit-une-crise-aujourd-hui-partout-dans-le-monde_VN-202010020146.html',\n        'info_dict': {\n            'id': '6196747868001',\n            'ext': 'mp4',\n            'title': 'Emmanuel Macron: \"L\\'Islam est une religion qui vit une crise aujourd\u2019hui, partout dans le monde\"',\n            'description': 'Le Pr\u00e9sident s\\'exprime sur la question du s\u00e9paratisme depuis les Mureaux, dans les Yvelines.',\n            'uploader_id': '876450610001',\n            'upload_date': '20201002',\n            'timestamp': 1601629620,\n            'duration': 44.757,\n            'tags': ['bfmactu', 'politique'],\n            'thumbnail': 'https://cf-images.eu-west-1.prod.boltdns.net/v1/static/876450610001/5041f4c1-bc48-4af8-a256-1b8300ad8ef0/cf2f9114-e8e2-4494-82b4-ab794ea4bc7d/1920x1080/match/image.jpg',\n        },\n    }]\n\n    def _real_extract(self, url):\n        bfmtv_id = self._match_id(url)\n        webpage = self._download_webpage(url, bfmtv_id)\n        video_block = extract_attributes(self._search_regex(\n            self._VIDEO_BLOCK_REGEX, webpage, 'video block'))\n        return self._brightcove_url_result(video_block['videoid'], video_block)\n\n\nclass BFMTVLiveIE(BFMTVIE):  # XXX: Do not subclass from concrete IE\n    IE_NAME = 'bfmtv:live'\n    _VALID_URL = BFMTVBaseIE._VALID_URL_BASE + '(?P<id>(?:[^/]+/)?en-direct)'\n    _TESTS = [{\n        'url': 'https://www.bfmtv.com/en-direct/',\n        'info_dict': {\n            'id': '5615950982001',\n            'ext': 'mp4',\n            'title': r're:^le direct BFMTV WEB \\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}$',\n            'uploader_id': '876450610001',\n            'upload_date': '20171018',\n            'timestamp': 1508329950,\n        },\n        'params': {\n            'skip_download': True,\n        },\n    }, {\n        'url': 'https://www.bfmtv.com/economie/en-direct/',\n        'only_matching': True,\n    }]\n\n\nclass BFMTVArticleIE(BFMTVBaseIE):\n    IE_NAME = 'bfmtv:article'\n    _VALID_URL = BFMTVBaseIE._VALID_URL_TMPL % 'A'\n    _TESTS = [{\n        'url': 'https://www.bfmtv.com/sante/covid-19-un-responsable-de-l-institut-pasteur-se-demande-quand-la-france-va-se-reconfiner_AV-202101060198.html',\n        'info_dict': {\n            'id': '202101060198',\n            'title': 'Covid-19: un responsable de l\\'Institut Pasteur se demande \"quand la France va se reconfiner\"',\n            'description': 'md5:947974089c303d3ac6196670ae262843',\n        },\n        'playlist_count': 2,\n    }, {\n        'url': 'https://www.bfmtv.com/international/pour-bolsonaro-le-bresil-est-en-faillite-mais-il-ne-peut-rien-faire_AD-202101060232.html',\n        'only_matching': True,\n    }, {\n        'url': 'https://www.bfmtv.com/sante/covid-19-oui-le-vaccin-de-pfizer-distribue-en-france-a-bien-ete-teste-sur-des-personnes-agees_AN-202101060275.html',\n        'only_matching': True,\n    }, {\n        'url': 'https://rmc.bfmtv.com/actualites/societe/transports/ce-n-est-plus-tout-rentable-le-bioethanol-e85-depasse-1eu-le-litre-des-automobilistes-regrettent_AV-202301100268.html',\n        'info_dict': {\n            'id': '6318445464112',\n            'ext': 'mp4',\n            'title': 'Le plein de bio\u00e9thanol fait de plus en plus mal \u00e0 la pompe',\n            'description': None,\n            'uploader_id': '876630703001',\n            'upload_date': '20230110',\n            'timestamp': 1673341692,\n            'duration': 109.269,\n            'tags': ['rmc', 'show', 'apolline de malherbe', 'info', 'talk', 'matinale', 'radio'],\n            'thumbnail': 'https://cf-images.eu-west-1.prod.boltdns.net/v1/static/876630703001/5bef74b8-9d5e-4480-a21f-60c2e2480c46/96c88b74-f9db-45e1-8040-e199c5da216c/1920x1080/match/image.jpg'\n        }\n    }]\n\n    def _real_extract(self, url):\n        bfmtv_id = self._match_id(url)\n        webpage = self._download_webpage(url, bfmtv_id)\n\n        entries = []\n        for video_block_el in re.findall(self._VIDEO_BLOCK_REGEX, webpage):\n            video_block = extract_attributes(video_block_el)\n            video_id = video_block.get('videoid')\n            if not video_id:\n                continue\n            entries.append(self._brightcove_url_result(video_id, video_block))\n\n        return self.playlist_result(\n            entries, bfmtv_id, self._og_search_title(webpage, fatal=False),\n            self._html_search_meta(['og:description', 'description'], webpage))\n", "path": "yt_dlp/extractor/bfmtv.py"}]}