We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
bfmtv: Unable to extract video block
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

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

### Checklist

- [X] I'm reporting that yt-dlp is broken on a **supported** site
- [X] I've verified that I'm running yt-dlp version **2023.10.13** ([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 all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [X] I've searched [known issues](https://github.com/yt-dlp/yt-dlp/issues/3766) and 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 I'm willing to share it if required

### Region

France

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

yt-dlp is unable to extract replay video from bfmtv websites, from domain www.bfmtv.com. It was still working a few days ago.

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [ ] If using API, add `'verbose': True` to `YoutubeDL` params instead
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
yt-dlp -vU https://www.bfmtv.com/alsace/replay-emissions/bonsoir-l-alsace/diabete-le-groupe-lilly-investit-160-millions-d-euros-a-fegersheim_VN-202310230671.html
[debug] Command-line config: ['-vU', 'https://www.bfmtv.com/alsace/replay-emissions/bonsoir-l-alsace/diabete-le-groupe-lilly-investit-160-millions-d-euros-a-fegersheim_VN-202310230671.html']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version stable@2023.10.13 [b634ba742] (zip)
[debug] Python 3.11.2 (CPython x86_64 64bit) - Linux-6.1.0-13-amd64-x86_64-with-glibc2.36 (OpenSSL 3.0.11 19 Sep 2023, glibc 2.36)
[debug] exe versions: ffmpeg 5.1.3-1 (setts), ffprobe 5.1.3-1, phantomjs 2.1.1, rtmpdump 2.4
[debug] Optional libraries: Cryptodome-3.11.0, brotli-1.0.9, certifi-2022.09.24, mutagen-1.46.0, pyxattr-0.8.1, sqlite3-3.40.1, websockets-10.4
[debug] Proxy map: {}
[debug] Loaded 1890 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Available version: stable@2023.10.13, Current version: stable@2023.10.13
Current Build Hash: be5cfb6be8930e1a5f427533ec32f2a481276b3da7b249d0150ce2b740ccf1ce
yt-dlp is up to date (stable@2023.10.13)
[bfmtv] Extracting URL: https://www.bfmtv.com/alsace/replay-emissions/bonsoir-l-alsace/diabete-le-groupe-lilly-investit-160-millions-d-euros-a-fegersheim_VN-202310230671.html
[bfmtv] 202310230671: Downloading webpage
ERROR: [bfmtv] 202310230671: Unable to extract video block; please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
  File "/usr/local/bin/yt-dlp/yt_dlp/extractor/common.py", line 715, in extract
    ie_result = self._real_extract(url)
                ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/bin/yt-dlp/yt_dlp/extractor/bfmtv.py", line 43, in _real_extract
    video_block = extract_attributes(self._search_regex(
                                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/bin/yt-dlp/yt_dlp/extractor/common.py", line 1263, in _search_regex
    raise RegexNotFoundError('Unable to extract %s' % _name)
```


--- 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\.|rmc\.)?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             'duration': 44.757,
35             'tags': ['bfmactu', 'politique'],
36             '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',
37         },
38     }]
39 
40     def _real_extract(self, url):
41         bfmtv_id = self._match_id(url)
42         webpage = self._download_webpage(url, bfmtv_id)
43         video_block = extract_attributes(self._search_regex(
44             self._VIDEO_BLOCK_REGEX, webpage, 'video block'))
45         return self._brightcove_url_result(video_block['videoid'], video_block)
46 
47 
48 class BFMTVLiveIE(BFMTVIE):  # XXX: Do not subclass from concrete IE
49     IE_NAME = 'bfmtv:live'
50     _VALID_URL = BFMTVBaseIE._VALID_URL_BASE + '(?P<id>(?:[^/]+/)?en-direct)'
51     _TESTS = [{
52         'url': 'https://www.bfmtv.com/en-direct/',
53         'info_dict': {
54             'id': '5615950982001',
55             'ext': 'mp4',
56             'title': r're:^le direct BFMTV WEB \d{4}-\d{2}-\d{2} \d{2}:\d{2}$',
57             'uploader_id': '876450610001',
58             'upload_date': '20171018',
59             'timestamp': 1508329950,
60         },
61         'params': {
62             'skip_download': True,
63         },
64     }, {
65         'url': 'https://www.bfmtv.com/economie/en-direct/',
66         'only_matching': True,
67     }]
68 
69 
70 class BFMTVArticleIE(BFMTVBaseIE):
71     IE_NAME = 'bfmtv:article'
72     _VALID_URL = BFMTVBaseIE._VALID_URL_TMPL % 'A'
73     _TESTS = [{
74         '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',
75         'info_dict': {
76             'id': '202101060198',
77             'title': 'Covid-19: un responsable de l\'Institut Pasteur se demande "quand la France va se reconfiner"',
78             'description': 'md5:947974089c303d3ac6196670ae262843',
79         },
80         'playlist_count': 2,
81     }, {
82         'url': 'https://www.bfmtv.com/international/pour-bolsonaro-le-bresil-est-en-faillite-mais-il-ne-peut-rien-faire_AD-202101060232.html',
83         'only_matching': True,
84     }, {
85         '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',
86         'only_matching': True,
87     }, {
88         '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',
89         'info_dict': {
90             'id': '6318445464112',
91             'ext': 'mp4',
92             'title': 'Le plein de bioéthanol fait de plus en plus mal à la pompe',
93             'description': None,
94             'uploader_id': '876630703001',
95             'upload_date': '20230110',
96             'timestamp': 1673341692,
97             'duration': 109.269,
98             'tags': ['rmc', 'show', 'apolline de malherbe', 'info', 'talk', 'matinale', 'radio'],
99             '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'
100         }
101     }]
102 
103     def _real_extract(self, url):
104         bfmtv_id = self._match_id(url)
105         webpage = self._download_webpage(url, bfmtv_id)
106 
107         entries = []
108         for video_block_el in re.findall(self._VIDEO_BLOCK_REGEX, webpage):
109             video_block = extract_attributes(video_block_el)
110             video_id = video_block.get('videoid')
111             if not video_id:
112                 continue
113             entries.append(self._brightcove_url_result(video_id, video_block))
114 
115         return self.playlist_result(
116             entries, bfmtv_id, self._og_search_title(webpage, fatal=False),
117             self._html_search_meta(['og:description', 'description'], webpage))
118
```
--- 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
@@ -7,7 +7,7 @@
 class BFMTVBaseIE(InfoExtractor):
     _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"[^>]*>)'
+    _VIDEO_BLOCK_REGEX = r'(<div[^>]+class="video_block[^"]*"[^>]*>)'
     BRIGHTCOVE_URL_TEMPLATE = 'http://players.brightcove.net/%s/%s_default/index.html?videoId=%s'
 
     def _brightcove_url_result(self, video_id, video_block):
@@ -55,8 +55,11 @@
             'ext': 'mp4',
             'title': r're:^le direct BFMTV WEB \d{4}-\d{2}-\d{2} \d{2}:\d{2}$',
             'uploader_id': '876450610001',
-            'upload_date': '20171018',
-            'timestamp': 1508329950,
+            'upload_date': '20220926',
+            'timestamp': 1664207191,
+            'live_status': 'is_live',
+            'thumbnail': r're:https://.+/image\.jpg',
+            'tags': [],
         },
         'params': {
             'skip_download': True,

{"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@@ -7,7 +7,7 @@\n class 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+    _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@@ -55,8 +55,11 @@\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+            'upload_date': '20220926',\n+            'timestamp': 1664207191,\n+            'live_status': 'is_live',\n+            'thumbnail': r're:https://.+/image\\.jpg',\n+            'tags': [],\n         },\n         'params': {\n             'skip_download': True,\n", "issue": "bfmtv: Unable to extract video block\n### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE\n\n- [X] I understand that I will be **blocked** if I *intentionally* remove or skip any mandatory\\* field\n\n### Checklist\n\n- [X] I'm reporting that yt-dlp is broken on a **supported** site\n- [X] I've verified that I'm running yt-dlp version **2023.10.13** ([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 all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)\n- [X] I've searched [known issues](https://github.com/yt-dlp/yt-dlp/issues/3766) and 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 I'm willing to share it if required\n\n### Region\n\nFrance\n\n### Provide a description that is worded well enough to be understood\n\nyt-dlp is unable to extract replay video from bfmtv websites, from domain www.bfmtv.com. It was still working a few days ago.\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- [ ] If using API, add `'verbose': True` to `YoutubeDL` params instead\n- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below\n\n### Complete Verbose Output\n\n```shell\nyt-dlp -vU https://www.bfmtv.com/alsace/replay-emissions/bonsoir-l-alsace/diabete-le-groupe-lilly-investit-160-millions-d-euros-a-fegersheim_VN-202310230671.html\r\n[debug] Command-line config: ['-vU', 'https://www.bfmtv.com/alsace/replay-emissions/bonsoir-l-alsace/diabete-le-groupe-lilly-investit-160-millions-d-euros-a-fegersheim_VN-202310230671.html']\r\n[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8\r\n[debug] yt-dlp version stable@2023.10.13 [b634ba742] (zip)\r\n[debug] Python 3.11.2 (CPython x86_64 64bit) - Linux-6.1.0-13-amd64-x86_64-with-glibc2.36 (OpenSSL 3.0.11 19 Sep 2023, glibc 2.36)\r\n[debug] exe versions: ffmpeg 5.1.3-1 (setts), ffprobe 5.1.3-1, phantomjs 2.1.1, rtmpdump 2.4\r\n[debug] Optional libraries: Cryptodome-3.11.0, brotli-1.0.9, certifi-2022.09.24, mutagen-1.46.0, pyxattr-0.8.1, sqlite3-3.40.1, websockets-10.4\r\n[debug] Proxy map: {}\r\n[debug] Loaded 1890 extractors\r\n[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest\r\nAvailable version: stable@2023.10.13, Current version: stable@2023.10.13\r\nCurrent Build Hash: be5cfb6be8930e1a5f427533ec32f2a481276b3da7b249d0150ce2b740ccf1ce\r\nyt-dlp is up to date (stable@2023.10.13)\r\n[bfmtv] Extracting URL: https://www.bfmtv.com/alsace/replay-emissions/bonsoir-l-alsace/diabete-le-groupe-lilly-investit-160-millions-d-euros-a-fegersheim_VN-202310230671.html\r\n[bfmtv] 202310230671: Downloading webpage\r\nERROR: [bfmtv] 202310230671: Unable to extract video block; please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U\r\n  File \"/usr/local/bin/yt-dlp/yt_dlp/extractor/common.py\", line 715, in extract\r\n    ie_result = self._real_extract(url)\r\n                ^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/bin/yt-dlp/yt_dlp/extractor/bfmtv.py\", line 43, in _real_extract\r\n    video_block = extract_attributes(self._search_regex(\r\n                                     ^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/bin/yt-dlp/yt_dlp/extractor/common.py\", line 1263, in _search_regex\r\n    raise RegexNotFoundError('Unable to extract %s' % _name)\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\\.|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"}], "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': '20220926',\n            'timestamp': 1664207191,\n            'live_status': 'is_live',\n            'thumbnail': r're:https://.+/image\\.jpg',\n            'tags': [],\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"}]}