
    VGhj5                         d dl Z d dlZd dlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ  G d	 d
e      Z G d de      Zy)    N   )InfoExtractor   )HEADRequest)	HTTPError)ExtractorErrorOnDemandPagedList
clean_htmldetermine_extformat_fieldget_element_by_classget_elements_html_by_classint_or_none
orderedSetparse_countparse_durationparse_iso8601url_or_noneurlencode_postdataurljoin)traverse_objc                   &   e Zd ZdZde dgZdddddd	d
dddddddeddddddddddd
ddddddd ed!d"ddd#d$i d%d&d'dd(d)d*d+d,d-d.d
d/dd0d1d2dd3dd4dd5dd6dd7ed8d9d:d;gd<d=d>d?id@dAdBdCdDdBdCdEdBdCgZdFZdGZdHZ	dI Z
dLdJZdK Zy?)M
BitChuteIEzYhttps?://(?:(?:www|old)\.)?bitchute\.com/(?:video|embed|torrent/[^/?#]+)/(?P<id>[^/?#&]+)z,<(?:script|iframe)[^>]+\bsrc=(["\'])(?P<url>)z+https://www.bitchute.com/video/UGlrF9o9b-Q/ 7e427d7ed7af5a75b5855705ec750e2bUGlrF9o9b-Qmp4&This is the first video on #BitChute !$md5:a0337e7b1fe39e32336974af8173a034re:https?://.+/.+\.jpg$BitChute20170103.https://www.bitchute.com/profile/I5NgtHZn9vPj/*https://www.bitchute.com/channel/bitchute/I5NgtHZn9vPj1VBwRfyNcKdXg      0@FkX)idexttitledescription	thumbnailuploaderupload_dateuploader_urlchannelchannel_urluploader_id
channel_id
view_countduration	timestamp)urlmd5	info_dictz+https://www.bitchute.com/video/Yti_j9A-UZ4/ f10e6a8e787766235946d0868703f1d0zYti_j9A-UZ4zIsrael at War | Full Measurez$md5:e60198b89971966d6030d22b3268f08fsharylattkisson20231106z.https://www.bitchute.com/profile/9K0kUWA9zmd9/z"Full Measure with Sharyl Attkissonz1https://www.bitchute.com/channel/sharylattkisson/9K0kUWA9zmd9NpdxoCRv3ZLbg     P@ij3Iez,https://www.bitchute.com/video/2s6B3nZjAk7R/ 05c12397d5354bf24494885b08d24ed1r(   2s6B3nZjAk7Rr)   filesizeiCr*   zMSTYXHEXENHAMMER666 - Election Fraud, Clinton 2020, EU Armies, and Gun Controlr+   z$md5:2029c7c212ccd4b040f52bb2d036ef4er,   r-   r.   20181113r/   r0   r1   r2   r3   r4   r5   g     @tagsbitchuter6   io
[check_formatsN)r7   r8   r9   paramsz+https://www.bitchute.com/embed/lbb5G1hjPhw/Tr7   only_matchingzDhttps://www.bitchute.com/torrent/Zee5BE49045h/szoMrox2JEI.webtorrentz+https://old.bitchute.com/video/UGlrF9o9b-Q/Fz$https://www.bitchute.com/profile/%s/z$https://www.bitchute.com/channel/%s/c                 :   t        fddD              }|D ]K  }	 | j                  t        |      |d|       }|t        |j                  j                  d            dc S  y # t        $ r*}| j	                  | d|j
                          Y d }~}d }~ww xY w)Nc              3   R   K   | ]  }t        j                  d d|          yw)z((^https?://)(seed\d+)(?=\.bitchute\.com)z\g<1>N)resub).0host	video_urls     b/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/bitchute.py	<genexpr>z+BitChuteIE._check_format.<locals>.<genexpr>o   s.      9 FF>5QZ[9s   $')z\g<2>seed122seed125seed126seed128seed132seed150seed151seed152seed153seed167seed171seed177seed305seed307	seedp29xbzzb10-7gsop1v78z	Checking )video_idnotez: URL is invalid, skipping: zContent-Length)r7   rA   )	r   _request_webpager   r   	to_screencauser   headersget)selfrO   ra   urlsr7   responsees    `     rP   _check_formatzBitChuteIE._check_formatn   s     989 9  
	C00$x	#>O 1 Q '(8(8(<(<=M(NO 
	 " (+GyQRs    A''	B0 BBc                 ~   |j                  d      d   }	 | j                  d| |d| dd| dt        j                  |      j	                         ddd	      S # t
        $ r}t        |j                  t              r|j                  j                  d
k(  r|dj                  t        |j                  j                  j                         j                         t        j                  hdd dt         hf            }|rd|v r| j#                  |       |r | j%                  |j&                         Y d }~y d }~ww xY w)N/r   z"https://api.bitchute.com/api/beta/zDownloading z	 API JSONzUnable to download zapplication/json)AcceptContent-Typedatarf   i  z. errorsc                     |d   dk(  S )Ncontextreason )_vs     rP   <lambda>z&BitChuteIE._call_api.<locals>.<lambda>   s    99Q     messagelocation)
rpartition_download_jsonjsondumpsencoder   
isinstancere   r   statusjoinr   rj   readdecodeloadsstrraise_geo_restrictedreport_warningmsg)rh   endpointrr   
display_idfatalrb   rk   rs   s           rP   	_call_apizBitChuteIE._call_api   s-   ""3'*	'&&4XJ?tfI.2EdV90UZZ%,,.0$6	 '    		'!''9-!''..C2G<0@0@0E0E0G0N0N0PZZL(,QS\_b^cSe $f gjF2--f5&&		's   AA 	D<%CD77D<c                 *   | j                  |      }d|i}| j                  d||      d   }g }t        |      dk(  r&|j                  | j	                  ||ddd             nL| j                  d	      d
ur&| j                  ||      x}r%|j                  |       n|j                  d|i       |s| j                  dd|       | j                  d||d
      }d }t        |ddt        hf      x}	r| j                  dd|	i|d
      }i t        |dt        hfdt        hfdt        hfddt        hfddt        hfddt        d      hfdt        hfdt        | j                        ht        fdt         hfdt"        hfddt        ht        t$        t        fdt&        hfdd  hfd!      t        |dt        hfdt        hfd"t        | j(                        ht        fd#t        hfdt        hfdt        | j                        ht        fd$      ||d%S )&Nra   zvideo/media	media_urlm3u8r   hlsT)m3u8_idliverE   Fr7   ziVideo is unavailable. Please make sure this video is playable in the browser before reporting this issue.)expectedra   video)r   r0   r3   
video_namer+   thumbnail_urlchannel_namer1   zhttps://www.bitchute.com/
profile_id)templatedate_publishedr5   hashtags.r4   state_idc                     | dk(  S )Nr   rw   )xs    rP   rz   z*BitChuteIE._real_extract.<locals>.<lambda>   s
    1; r{   )r*   r+   r,   r0   r3   r1   r2   r/   r6   r5   rC   r4   is_liveurl_slugprofile_name)r0   r3   r1   r-   r2   r/   )r(   formats)	_match_idr   r   extend_extract_m3u8_formats	get_paramrl   appendraise_no_formatsr   r   r   r   r   _UPLOADER_URL_TMPLfilterr   r   allr   _CHANNEL_URL_TMPL)
rh   r7   ra   rr   r   r   fmtr   r0   r3   s
             rP   _real_extractzBitChuteIE._real_extract   sk   >>#&H%NN=$A+N	#v-NN**9hu[_*`b ~~o.e;,,YAA3ANN3'y12!!/9= " R wheD%eiu-MNN:NnnYz0JH\anbG
5&. -u5-}=%~u=(,> )=7C^;_:`a ,se4!-dF]F]0^/_ag h.@'.)9:#S3%fE+k];&)>(?@# 
  7*SE2+cU3 *\4CYCY-Z,[]cd+cU3 ,se4!-dF]F]0^/_ag h% !
0 3
 	
r{   )T)__name__
__module____qualname__
_VALID_URL_EMBED_REGEXint_TESTS_GEO_BYPASSr   r   rl   r   r   rw   r{   rP   r   r      s   mJCJ<qQRL<1=A3"%L!G)(#
, =13A3)%L;N)(#
	. >1
.
5
 
 d	

 A
 3
 

 :
 L
 z
 G
 >
 .
 #
 
  ZL!
" #
& #D)/2 = V =OJFV K?>&',4
r{   r   c                       e Zd ZdZdddddddd	d
ddddddddedddddgddddddddddddd dd!gZd"Zd#Zd$d%d&d'd(d)d*d'd+Ze	d,        Z
d- Zd. Zy/)0BitChuteChannelIEzThttps?://(?:(?:www|old)\.)?bitchute\.com/(?P<type>channel|playlist)/(?P<id>[^/?#&]+)r$   rD   r!   z$md5:2134c37d64fc3a4846787c402956adac)r(   r*   r+   r   r   r   r   r   r    r"   r#      r%   r&   r'   )r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r5   r4   r2   r3   r6   )r8   r9   Tz-1)skip_downloadplaylist_items)r7   r9   playlistrF   z/https://www.bitchute.com/playlist/wV9Imujxasw9/   wV9Imujxasw9z+Bruce MacDonald and "The Light of Darkness"z$md5:747724ef404eebdfc04277714f81863ez404 Not Found)r7   playlist_mincountr9   skipz/https://old.bitchute.com/playlist/wV9Imujxasw9/rG   @zyG6tQcGPE5swyAEFLqKUwMuMMuF6IO2DZ6ZDQjGfsL0e4dcTLwqkTTul05Jdve7   zchannel-videos-containerzchannel-videos-titlezchannel-videos-text)	containerr*   r+   zplaylist-videor*   r+   )r0   r   c                     d| d|  dS )Nzhttps://old.bitchute.com/rn   rw   )playlist_idplaylist_types     rP   	_make_urlzBitChuteChannelIE._make_url  s    *=/;-qIIr{   c              #     K   | j                  ||      }| j                  | d|d| t        | j                  d|| j                  z  d      d|dd| j                   d	      }|j                  d
      sy | j                  |   }t        |d   |j                  d            D ]  }| j                  d|dd       }|s| j                  d| t        |dt        t        |d   |            t        t        |d   |            t        t        d|            t        t        t        d|                          y w)Nzextend/zDownloading page  )csrfmiddlewaretokennameoffsetz0application/x-www-form-urlencoded; charset=UTF-8XMLHttpRequestz
csrftoken=)rp   RefererzX-Requested-WithCookierq   successr   htmlz&<a\s[^>]*\bhref=["\']/video/([^"\'/]+)zvideo iddefaultzhttps://www.bitchute.com/video/Tr*   r+   zvideo-durationzvideo-views)url_transparentr*   r+   r5   r4   )r   r   r   _TOKEN	PAGE_SIZErg   HTML_CLASS_NAMESr   _search_regex
url_resultr   r
   r   r   r   )	rh   r   r   page_numplaylist_urlrr   classes
video_htmlra   s	            rP   _fetch_pagezBitChuteChannelIE._fetch_page  sl    ~~k=A""nG$k5Fxj3Q#'+{{"T^^3% 
 !S'$4&t{{m4	 #  xx	"''64W[5I488TZK[\ 
	eJ))9:z[_ * aH//1(<j(dh !5gg6F
!ST&';GM<RT^'_`'(<=Mz(Z[&z2F}V`2a'bc " e e
	es   D?Ec                    | j                  |      j                  dd      \  }}| j                  | j                  ||      |      }t	        j
                  | j                  ||      }| j                  t        || j                        || j                  |d       | j                  d|d       t        | j                  d|dd                   S )Ntyper(   r   )r+   zog:descriptionztwitter:descriptionz<span>(\d+)\s+videos?</span>zplaylist count)r*   r+   playlist_count)_match_valid_urlgroup_download_webpager   	functoolspartialr   playlist_resultr	   r   _html_extract_title_html_search_metar   _html_search_regex)rh   r7   r   r   webpage	page_funcs         rP   r   zBitChuteChannelIE._real_extract0  s    %)%:%:3%?%E%Efd%S"{((])SU`a%%d&6&6]S	##i8+**7D*A..H'[_ / a&t'>'>/:JTX (? (Z [ $ \ 	\r{   N)r   r   r   r   r   r   r   r   r   staticmethodr   r   r   rw   r{   rP   r   r      s    hJ;A
 :' E#I!; *#-$T)#O ""%#1"0!+
. ""
;!D A BA

  	 AU-F^ PFI 4+0
 *(
 J Je:\r{   r   )r   r   rK   commonr   
networkingr   networking.exceptionsr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r   r   rw   r{   rP   <module>r      sT      	 ! $ -    " +o
 o
dm\ m\r{   