We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Bitchute --dateafter flag broken
<!--

######################################################################
  WARNING!
  IGNORING THE FOLLOWING TEMPLATE WILL RESULT IN ISSUE CLOSED AS INCOMPLETE
######################################################################

-->


## Checklist

<!--
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dl:
- First of, make sure you are using the latest version of youtube-dl. Run `youtube-dl --version` and ensure your version is 2019.11.05. If it's not, see https://yt-dl.org/update on how to update. Issues with outdated version will be REJECTED.
- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.
- Make sure that all URLs and arguments with special characters are properly quoted or escaped as explained in http://yt-dl.org/escape.
- Search the bugtracker for similar issues: http://yt-dl.org/search-issues. DO NOT post duplicates.
- Read bugs section in FAQ: http://yt-dl.org/reporting
- Finally, put x into all relevant boxes (like this [x])
-->

- [x] I'm reporting a broken site support issue
- [x] I've verified that I'm running youtube-dl version **2019.11.05**
- [x] I've checked that all provided URLs are alive and playable in a browser
- [x] I've checked that all URLs and arguments with special characters are properly quoted or escaped
- [x] I've searched the bugtracker for similar bug reports including closed ones
- [x] I've read bugs section in FAQ


## Verbose log

<!--
Provide the complete verbose output of youtube-dl that clearly demonstrates the problem.
Add the `-v` flag to your command line you run youtube-dl with (`youtube-dl -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:
 [debug] System config: []
 [debug] User config: []
 [debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKcj']
 [debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
 [debug] youtube-dl version 2019.11.05
 [debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2
 [debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
 [debug] Proxy map: {}
 <more lines>
-->

```
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: [u'https://www.bitchute.com/channel/Styxhexenham/', u'--dateafter', u'now-3days', u'-e', u'-v']
[debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2019.11.05
[debug] Python version 2.7.5 (CPython) - Linux-4.4.198-1.el7.elrepo.x86_64-x86_64-with-centos-7.7.1908-Core
[debug] exe versions: ffmpeg 3.4.6, ffprobe 3.4.6
[debug] Proxy map: {}
```


## Description

<!--
Provide an explanation of your issue in an arbitrary form. Please make sure the description is worded well enough to be understood, see https://github.com/ytdl-org/youtube-dl#is-the-description-of-the-issue-itself-sufficient. Provide any additional information, suggested solution and as much context and examples as possible.
If work on your issue requires account credentials please provide them or explain how one can obtain them.
-->

Title says it all. The date feature works on youtube but not bitchute. Thanks for looking into it

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `youtube_dl/extractor/bitchute.py`
Content:
```
1 # coding: utf-8
2 from __future__ import unicode_literals
3 
4 import itertools
5 import re
6 
7 from .common import InfoExtractor
8 from ..utils import (
9     orderedSet,
10     urlencode_postdata,
11 )
12 
13 
14 class BitChuteIE(InfoExtractor):
15     _VALID_URL = r'https?://(?:www\.)?bitchute\.com/(?:video|embed|torrent/[^/]+)/(?P<id>[^/?#&]+)'
16     _TESTS = [{
17         'url': 'https://www.bitchute.com/video/szoMrox2JEI/',
18         'md5': '66c4a70e6bfc40dcb6be3eb1d74939eb',
19         'info_dict': {
20             'id': 'szoMrox2JEI',
21             'ext': 'mp4',
22             'title': 'Fuck bitches get money',
23             'description': 'md5:3f21f6fb5b1d17c3dee9cf6b5fe60b3a',
24             'thumbnail': r're:^https?://.*\.jpg$',
25             'uploader': 'Victoria X Rave',
26         },
27     }, {
28         'url': 'https://www.bitchute.com/embed/lbb5G1hjPhw/',
29         'only_matching': True,
30     }, {
31         'url': 'https://www.bitchute.com/torrent/Zee5BE49045h/szoMrox2JEI.webtorrent',
32         'only_matching': True,
33     }]
34 
35     def _real_extract(self, url):
36         video_id = self._match_id(url)
37 
38         webpage = self._download_webpage(
39             'https://www.bitchute.com/video/%s' % video_id, video_id, headers={
40                 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.57 Safari/537.36',
41             })
42 
43         title = self._html_search_regex(
44             (r'<[^>]+\bid=["\']video-title[^>]+>([^<]+)', r'<title>([^<]+)'),
45             webpage, 'title', default=None) or self._html_search_meta(
46             'description', webpage, 'title',
47             default=None) or self._og_search_description(webpage)
48 
49         format_urls = []
50         for mobj in re.finditer(
51                 r'addWebSeed\s*\(\s*(["\'])(?P<url>(?:(?!\1).)+)\1', webpage):
52             format_urls.append(mobj.group('url'))
53         format_urls.extend(re.findall(r'as=(https?://[^&"\']+)', webpage))
54 
55         formats = [
56             {'url': format_url}
57             for format_url in orderedSet(format_urls)]
58 
59         if not formats:
60             formats = self._parse_html5_media_entries(
61                 url, webpage, video_id)[0]['formats']
62 
63         self._check_formats(formats, video_id)
64         self._sort_formats(formats)
65 
66         description = self._html_search_regex(
67             r'(?s)<div\b[^>]+\bclass=["\']full hidden[^>]+>(.+?)</div>',
68             webpage, 'description', fatal=False)
69         thumbnail = self._og_search_thumbnail(
70             webpage, default=None) or self._html_search_meta(
71             'twitter:image:src', webpage, 'thumbnail')
72         uploader = self._html_search_regex(
73             (r'(?s)<div class=["\']channel-banner.*?<p\b[^>]+\bclass=["\']name[^>]+>(.+?)</p>',
74              r'(?s)<p\b[^>]+\bclass=["\']video-author[^>]+>(.+?)</p>'),
75             webpage, 'uploader', fatal=False)
76 
77         return {
78             'id': video_id,
79             'title': title,
80             'description': description,
81             'thumbnail': thumbnail,
82             'uploader': uploader,
83             'formats': formats,
84         }
85 
86 
87 class BitChuteChannelIE(InfoExtractor):
88     _VALID_URL = r'https?://(?:www\.)?bitchute\.com/channel/(?P<id>[^/?#&]+)'
89     _TEST = {
90         'url': 'https://www.bitchute.com/channel/victoriaxrave/',
91         'playlist_mincount': 185,
92         'info_dict': {
93             'id': 'victoriaxrave',
94         },
95     }
96 
97     _TOKEN = 'zyG6tQcGPE5swyAEFLqKUwMuMMuF6IO2DZ6ZDQjGfsL0e4dcTLwqkTTul05Jdve7'
98 
99     def _entries(self, channel_id):
100         channel_url = 'https://www.bitchute.com/channel/%s/' % channel_id
101         offset = 0
102         for page_num in itertools.count(1):
103             data = self._download_json(
104                 '%sextend/' % channel_url, channel_id,
105                 'Downloading channel page %d' % page_num,
106                 data=urlencode_postdata({
107                     'csrfmiddlewaretoken': self._TOKEN,
108                     'name': '',
109                     'offset': offset,
110                 }), headers={
111                     'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
112                     'Referer': channel_url,
113                     'X-Requested-With': 'XMLHttpRequest',
114                     'Cookie': 'csrftoken=%s' % self._TOKEN,
115                 })
116             if data.get('success') is False:
117                 break
118             html = data.get('html')
119             if not html:
120                 break
121             video_ids = re.findall(
122                 r'class=["\']channel-videos-image-container[^>]+>\s*<a\b[^>]+\bhref=["\']/video/([^"\'/]+)',
123                 html)
124             if not video_ids:
125                 break
126             offset += len(video_ids)
127             for video_id in video_ids:
128                 yield self.url_result(
129                     'https://www.bitchute.com/video/%s' % video_id,
130                     ie=BitChuteIE.ie_key(), video_id=video_id)
131 
132     def _real_extract(self, url):
133         channel_id = self._match_id(url)
134         return self.playlist_result(
135             self._entries(channel_id), playlist_id=channel_id)
136
```
--- 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/youtube_dl/extractor/bitchute.py b/youtube_dl/extractor/bitchute.py
--- a/youtube_dl/extractor/bitchute.py
+++ b/youtube_dl/extractor/bitchute.py
@@ -7,6 +7,7 @@
 from .common import InfoExtractor
 from ..utils import (
     orderedSet,
+    unified_strdate,
     urlencode_postdata,
 )
 
@@ -23,6 +24,7 @@
             'description': 'md5:3f21f6fb5b1d17c3dee9cf6b5fe60b3a',
             'thumbnail': r're:^https?://.*\.jpg$',
             'uploader': 'Victoria X Rave',
+            'upload_date': '20170813',
         },
     }, {
         'url': 'https://www.bitchute.com/embed/lbb5G1hjPhw/',
@@ -74,12 +76,17 @@
              r'(?s)<p\b[^>]+\bclass=["\']video-author[^>]+>(.+?)</p>'),
             webpage, 'uploader', fatal=False)
 
+        upload_date = unified_strdate(self._search_regex(
+            r'class=["\']video-publish-date[^>]+>[^<]+ at \d+:\d+ UTC on (.+?)\.',
+            webpage, 'upload date', fatal=False))
+
         return {
             'id': video_id,
             'title': title,
             'description': description,
             'thumbnail': thumbnail,
             'uploader': uploader,
+            'upload_date': upload_date,
             'formats': formats,
         }

{"golden_diff": "diff --git a/youtube_dl/extractor/bitchute.py b/youtube_dl/extractor/bitchute.py\n--- a/youtube_dl/extractor/bitchute.py\n+++ b/youtube_dl/extractor/bitchute.py\n@@ -7,6 +7,7 @@\n from .common import InfoExtractor\n from ..utils import (\n     orderedSet,\n+    unified_strdate,\n     urlencode_postdata,\n )\n \n@@ -23,6 +24,7 @@\n             'description': 'md5:3f21f6fb5b1d17c3dee9cf6b5fe60b3a',\n             'thumbnail': r're:^https?://.*\\.jpg$',\n             'uploader': 'Victoria X Rave',\n+            'upload_date': '20170813',\n         },\n     }, {\n         'url': 'https://www.bitchute.com/embed/lbb5G1hjPhw/',\n@@ -74,12 +76,17 @@\n              r'(?s)<p\\b[^>]+\\bclass=[\"\\']video-author[^>]+>(.+?)</p>'),\n             webpage, 'uploader', fatal=False)\n \n+        upload_date = unified_strdate(self._search_regex(\n+            r'class=[\"\\']video-publish-date[^>]+>[^<]+ at \\d+:\\d+ UTC on (.+?)\\.',\n+            webpage, 'upload date', fatal=False))\n+\n         return {\n             'id': video_id,\n             'title': title,\n             'description': description,\n             'thumbnail': thumbnail,\n             'uploader': uploader,\n+            'upload_date': upload_date,\n             'formats': formats,\n         }\n", "issue": "Bitchute --dateafter flag broken\n<!--\r\n\r\n######################################################################\r\n  WARNING!\r\n  IGNORING THE FOLLOWING TEMPLATE WILL RESULT IN ISSUE CLOSED AS INCOMPLETE\r\n######################################################################\r\n\r\n-->\r\n\r\n\r\n## Checklist\r\n\r\n<!--\r\nCarefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dl:\r\n- First of, make sure you are using the latest version of youtube-dl. Run `youtube-dl --version` and ensure your version is 2019.11.05. If it's not, see https://yt-dl.org/update on how to update. Issues with outdated version will be REJECTED.\r\n- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.\r\n- Make sure that all URLs and arguments with special characters are properly quoted or escaped as explained in http://yt-dl.org/escape.\r\n- Search the bugtracker for similar issues: http://yt-dl.org/search-issues. DO NOT post duplicates.\r\n- Read bugs section in FAQ: http://yt-dl.org/reporting\r\n- Finally, put x into all relevant boxes (like this [x])\r\n-->\r\n\r\n- [x] I'm reporting a broken site support issue\r\n- [x] I've verified that I'm running youtube-dl version **2019.11.05**\r\n- [x] I've checked that all provided URLs are alive and playable in a browser\r\n- [x] I've checked that all URLs and arguments with special characters are properly quoted or escaped\r\n- [x] I've searched the bugtracker for similar bug reports including closed ones\r\n- [x] I've read bugs section in FAQ\r\n\r\n\r\n## Verbose log\r\n\r\n<!--\r\nProvide the complete verbose output of youtube-dl that clearly demonstrates the problem.\r\nAdd the `-v` flag to your command line you run youtube-dl with (`youtube-dl -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:\r\n [debug] System config: []\r\n [debug] User config: []\r\n [debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKcj']\r\n [debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251\r\n [debug] youtube-dl version 2019.11.05\r\n [debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2\r\n [debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4\r\n [debug] Proxy map: {}\r\n <more lines>\r\n-->\r\n\r\n```\r\n[debug] System config: []\r\n[debug] User config: []\r\n[debug] Custom config: []\r\n[debug] Command-line args: [u'https://www.bitchute.com/channel/Styxhexenham/', u'--dateafter', u'now-3days', u'-e', u'-v']\r\n[debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8\r\n[debug] youtube-dl version 2019.11.05\r\n[debug] Python version 2.7.5 (CPython) - Linux-4.4.198-1.el7.elrepo.x86_64-x86_64-with-centos-7.7.1908-Core\r\n[debug] exe versions: ffmpeg 3.4.6, ffprobe 3.4.6\r\n[debug] Proxy map: {}\r\n```\r\n\r\n\r\n## Description\r\n\r\n<!--\r\nProvide an explanation of your issue in an arbitrary form. Please make sure the description is worded well enough to be understood, see https://github.com/ytdl-org/youtube-dl#is-the-description-of-the-issue-itself-sufficient. Provide any additional information, suggested solution and as much context and examples as possible.\r\nIf work on your issue requires account credentials please provide them or explain how one can obtain them.\r\n-->\r\n\r\nTitle says it all. The date feature works on youtube but not bitchute. Thanks for looking into it\n", "before_files": [{"content": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport itertools\nimport re\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n    orderedSet,\n    urlencode_postdata,\n)\n\n\nclass BitChuteIE(InfoExtractor):\n    _VALID_URL = r'https?://(?:www\\.)?bitchute\\.com/(?:video|embed|torrent/[^/]+)/(?P<id>[^/?#&]+)'\n    _TESTS = [{\n        'url': 'https://www.bitchute.com/video/szoMrox2JEI/',\n        'md5': '66c4a70e6bfc40dcb6be3eb1d74939eb',\n        'info_dict': {\n            'id': 'szoMrox2JEI',\n            'ext': 'mp4',\n            'title': 'Fuck bitches get money',\n            'description': 'md5:3f21f6fb5b1d17c3dee9cf6b5fe60b3a',\n            'thumbnail': r're:^https?://.*\\.jpg$',\n            'uploader': 'Victoria X Rave',\n        },\n    }, {\n        'url': 'https://www.bitchute.com/embed/lbb5G1hjPhw/',\n        'only_matching': True,\n    }, {\n        'url': 'https://www.bitchute.com/torrent/Zee5BE49045h/szoMrox2JEI.webtorrent',\n        'only_matching': True,\n    }]\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n\n        webpage = self._download_webpage(\n            'https://www.bitchute.com/video/%s' % video_id, video_id, headers={\n                'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.57 Safari/537.36',\n            })\n\n        title = self._html_search_regex(\n            (r'<[^>]+\\bid=[\"\\']video-title[^>]+>([^<]+)', r'<title>([^<]+)'),\n            webpage, 'title', default=None) or self._html_search_meta(\n            'description', webpage, 'title',\n            default=None) or self._og_search_description(webpage)\n\n        format_urls = []\n        for mobj in re.finditer(\n                r'addWebSeed\\s*\\(\\s*([\"\\'])(?P<url>(?:(?!\\1).)+)\\1', webpage):\n            format_urls.append(mobj.group('url'))\n        format_urls.extend(re.findall(r'as=(https?://[^&\"\\']+)', webpage))\n\n        formats = [\n            {'url': format_url}\n            for format_url in orderedSet(format_urls)]\n\n        if not formats:\n            formats = self._parse_html5_media_entries(\n                url, webpage, video_id)[0]['formats']\n\n        self._check_formats(formats, video_id)\n        self._sort_formats(formats)\n\n        description = self._html_search_regex(\n            r'(?s)<div\\b[^>]+\\bclass=[\"\\']full hidden[^>]+>(.+?)</div>',\n            webpage, 'description', fatal=False)\n        thumbnail = self._og_search_thumbnail(\n            webpage, default=None) or self._html_search_meta(\n            'twitter:image:src', webpage, 'thumbnail')\n        uploader = self._html_search_regex(\n            (r'(?s)<div class=[\"\\']channel-banner.*?<p\\b[^>]+\\bclass=[\"\\']name[^>]+>(.+?)</p>',\n             r'(?s)<p\\b[^>]+\\bclass=[\"\\']video-author[^>]+>(.+?)</p>'),\n            webpage, 'uploader', fatal=False)\n\n        return {\n            'id': video_id,\n            'title': title,\n            'description': description,\n            'thumbnail': thumbnail,\n            'uploader': uploader,\n            'formats': formats,\n        }\n\n\nclass BitChuteChannelIE(InfoExtractor):\n    _VALID_URL = r'https?://(?:www\\.)?bitchute\\.com/channel/(?P<id>[^/?#&]+)'\n    _TEST = {\n        'url': 'https://www.bitchute.com/channel/victoriaxrave/',\n        'playlist_mincount': 185,\n        'info_dict': {\n            'id': 'victoriaxrave',\n        },\n    }\n\n    _TOKEN = 'zyG6tQcGPE5swyAEFLqKUwMuMMuF6IO2DZ6ZDQjGfsL0e4dcTLwqkTTul05Jdve7'\n\n    def _entries(self, channel_id):\n        channel_url = 'https://www.bitchute.com/channel/%s/' % channel_id\n        offset = 0\n        for page_num in itertools.count(1):\n            data = self._download_json(\n                '%sextend/' % channel_url, channel_id,\n                'Downloading channel page %d' % page_num,\n                data=urlencode_postdata({\n                    'csrfmiddlewaretoken': self._TOKEN,\n                    'name': '',\n                    'offset': offset,\n                }), headers={\n                    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n                    'Referer': channel_url,\n                    'X-Requested-With': 'XMLHttpRequest',\n                    'Cookie': 'csrftoken=%s' % self._TOKEN,\n                })\n            if data.get('success') is False:\n                break\n            html = data.get('html')\n            if not html:\n                break\n            video_ids = re.findall(\n                r'class=[\"\\']channel-videos-image-container[^>]+>\\s*<a\\b[^>]+\\bhref=[\"\\']/video/([^\"\\'/]+)',\n                html)\n            if not video_ids:\n                break\n            offset += len(video_ids)\n            for video_id in video_ids:\n                yield self.url_result(\n                    'https://www.bitchute.com/video/%s' % video_id,\n                    ie=BitChuteIE.ie_key(), video_id=video_id)\n\n    def _real_extract(self, url):\n        channel_id = self._match_id(url)\n        return self.playlist_result(\n            self._entries(channel_id), playlist_id=channel_id)\n", "path": "youtube_dl/extractor/bitchute.py"}], "after_files": [{"content": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport itertools\nimport re\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n    orderedSet,\n    unified_strdate,\n    urlencode_postdata,\n)\n\n\nclass BitChuteIE(InfoExtractor):\n    _VALID_URL = r'https?://(?:www\\.)?bitchute\\.com/(?:video|embed|torrent/[^/]+)/(?P<id>[^/?#&]+)'\n    _TESTS = [{\n        'url': 'https://www.bitchute.com/video/szoMrox2JEI/',\n        'md5': '66c4a70e6bfc40dcb6be3eb1d74939eb',\n        'info_dict': {\n            'id': 'szoMrox2JEI',\n            'ext': 'mp4',\n            'title': 'Fuck bitches get money',\n            'description': 'md5:3f21f6fb5b1d17c3dee9cf6b5fe60b3a',\n            'thumbnail': r're:^https?://.*\\.jpg$',\n            'uploader': 'Victoria X Rave',\n            'upload_date': '20170813',\n        },\n    }, {\n        'url': 'https://www.bitchute.com/embed/lbb5G1hjPhw/',\n        'only_matching': True,\n    }, {\n        'url': 'https://www.bitchute.com/torrent/Zee5BE49045h/szoMrox2JEI.webtorrent',\n        'only_matching': True,\n    }]\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n\n        webpage = self._download_webpage(\n            'https://www.bitchute.com/video/%s' % video_id, video_id, headers={\n                'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.57 Safari/537.36',\n            })\n\n        title = self._html_search_regex(\n            (r'<[^>]+\\bid=[\"\\']video-title[^>]+>([^<]+)', r'<title>([^<]+)'),\n            webpage, 'title', default=None) or self._html_search_meta(\n            'description', webpage, 'title',\n            default=None) or self._og_search_description(webpage)\n\n        format_urls = []\n        for mobj in re.finditer(\n                r'addWebSeed\\s*\\(\\s*([\"\\'])(?P<url>(?:(?!\\1).)+)\\1', webpage):\n            format_urls.append(mobj.group('url'))\n        format_urls.extend(re.findall(r'as=(https?://[^&\"\\']+)', webpage))\n\n        formats = [\n            {'url': format_url}\n            for format_url in orderedSet(format_urls)]\n\n        if not formats:\n            formats = self._parse_html5_media_entries(\n                url, webpage, video_id)[0]['formats']\n\n        self._check_formats(formats, video_id)\n        self._sort_formats(formats)\n\n        description = self._html_search_regex(\n            r'(?s)<div\\b[^>]+\\bclass=[\"\\']full hidden[^>]+>(.+?)</div>',\n            webpage, 'description', fatal=False)\n        thumbnail = self._og_search_thumbnail(\n            webpage, default=None) or self._html_search_meta(\n            'twitter:image:src', webpage, 'thumbnail')\n        uploader = self._html_search_regex(\n            (r'(?s)<div class=[\"\\']channel-banner.*?<p\\b[^>]+\\bclass=[\"\\']name[^>]+>(.+?)</p>',\n             r'(?s)<p\\b[^>]+\\bclass=[\"\\']video-author[^>]+>(.+?)</p>'),\n            webpage, 'uploader', fatal=False)\n\n        upload_date = unified_strdate(self._search_regex(\n            r'class=[\"\\']video-publish-date[^>]+>[^<]+ at \\d+:\\d+ UTC on (.+?)\\.',\n            webpage, 'upload date', fatal=False))\n\n        return {\n            'id': video_id,\n            'title': title,\n            'description': description,\n            'thumbnail': thumbnail,\n            'uploader': uploader,\n            'upload_date': upload_date,\n            'formats': formats,\n        }\n\n\nclass BitChuteChannelIE(InfoExtractor):\n    _VALID_URL = r'https?://(?:www\\.)?bitchute\\.com/channel/(?P<id>[^/?#&]+)'\n    _TEST = {\n        'url': 'https://www.bitchute.com/channel/victoriaxrave/',\n        'playlist_mincount': 185,\n        'info_dict': {\n            'id': 'victoriaxrave',\n        },\n    }\n\n    _TOKEN = 'zyG6tQcGPE5swyAEFLqKUwMuMMuF6IO2DZ6ZDQjGfsL0e4dcTLwqkTTul05Jdve7'\n\n    def _entries(self, channel_id):\n        channel_url = 'https://www.bitchute.com/channel/%s/' % channel_id\n        offset = 0\n        for page_num in itertools.count(1):\n            data = self._download_json(\n                '%sextend/' % channel_url, channel_id,\n                'Downloading channel page %d' % page_num,\n                data=urlencode_postdata({\n                    'csrfmiddlewaretoken': self._TOKEN,\n                    'name': '',\n                    'offset': offset,\n                }), headers={\n                    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n                    'Referer': channel_url,\n                    'X-Requested-With': 'XMLHttpRequest',\n                    'Cookie': 'csrftoken=%s' % self._TOKEN,\n                })\n            if data.get('success') is False:\n                break\n            html = data.get('html')\n            if not html:\n                break\n            video_ids = re.findall(\n                r'class=[\"\\']channel-videos-image-container[^>]+>\\s*<a\\b[^>]+\\bhref=[\"\\']/video/([^\"\\'/]+)',\n                html)\n            if not video_ids:\n                break\n            offset += len(video_ids)\n            for video_id in video_ids:\n                yield self.url_result(\n                    'https://www.bitchute.com/video/%s' % video_id,\n                    ie=BitChuteIE.ie_key(), video_id=video_id)\n\n    def _real_extract(self, url):\n        channel_id = self._match_id(url)\n        return self.playlist_result(\n            self._entries(channel_id), playlist_id=channel_id)\n", "path": "youtube_dl/extractor/bitchute.py"}]}