- def _entries(self, channel_id):
- channel_url = 'https://www.bitchute.com/channel/%s/' % channel_id
- offset = 0
- for page_num in itertools.count(1):
- data = self._download_json(
- '%sextend/' % channel_url, channel_id,
- 'Downloading channel page %d' % page_num,
- data=urlencode_postdata({
- 'csrfmiddlewaretoken': self._TOKEN,
- 'name': '',
- 'offset': offset,
- }), headers={
- 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
- 'Referer': channel_url,
- 'X-Requested-With': 'XMLHttpRequest',
- 'Cookie': 'csrftoken=%s' % self._TOKEN,
- })
- if data.get('success') is False:
- break
- html = data.get('html')
- if not html:
- break
- video_ids = re.findall(
- r'class=["\']channel-videos-image-container[^>]+>\s*<a\b[^>]+\bhref=["\']/video/([^"\'/]+)',
- html)
- if not video_ids:
- break
- offset += len(video_ids)
- for video_id in video_ids:
- yield self.url_result(
- 'https://www.bitchute.com/video/%s' % video_id,
- ie=BitChuteIE.ie_key(), video_id=video_id)
+ @staticmethod
+ def _make_url(playlist_id, playlist_type):
+ return f'https://old.bitchute.com/{playlist_type}/{playlist_id}/'
+
+ def _fetch_page(self, playlist_id, playlist_type, page_num):
+ playlist_url = self._make_url(playlist_id, playlist_type)
+ data = self._download_json(
+ f'{playlist_url}extend/', playlist_id, f'Downloading page {page_num}',
+ data=urlencode_postdata({
+ 'csrfmiddlewaretoken': self._TOKEN,
+ 'name': '',
+ 'offset': page_num * self.PAGE_SIZE,
+ }), headers={
+ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
+ 'Referer': playlist_url,
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'Cookie': f'csrftoken={self._TOKEN}',
+ })
+ if not data.get('success'):
+ return
+ classes = self.HTML_CLASS_NAMES[playlist_type]
+ for video_html in get_elements_html_by_class(classes['container'], data.get('html')):
+ video_id = self._search_regex(
+ r'<a\s[^>]*\bhref=["\']/video/([^"\'/]+)', video_html, 'video id', default=None)
+ if not video_id:
+ continue
+ yield self.url_result(
+ f'https://www.bitchute.com/video/{video_id}', BitChuteIE, video_id, url_transparent=True,
+ title=clean_html(get_element_by_class(classes['title'], video_html)),
+ description=clean_html(get_element_by_class(classes['description'], video_html)),
+ duration=parse_duration(get_element_by_class('video-duration', video_html)),
+ view_count=parse_count(clean_html(get_element_by_class('video-views', video_html))))