
    V|hj5                         S SK r S SKrS SKrSSKJr  SSKJr  SSKJr  SSK	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJr   " S	 S
\5      r " S S\5      rg)    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                   0   \ rS rSrSrS\ S3/rSSSSS	S
SSSSSSSS\SSS.S.SSSSSSSSSSSSS S!\S"S#S.S.S$S%0 S&S'_S(S_S)S*_S+S,_S-S._S/S_S0S_S1S2_S3S_S4S_S5S_S6S_S7S_S8\_S9S:_S;S</_S=S>_S?S@0SA.SBSCSD.SESCSD.SFSCSD./rSGrSHr	SIr
SJ rSNSK jrSL rSMrg@)O
BitChuteIE   zYhttps?://(?:(?: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/   20181113r0   r1   r2   r3   r4   r5   r6   g     @tagsbitchuter7   io
[check_formatsN)r8   r9   r:   paramsz+https://www.bitchute.com/embed/lbb5G1hjPhw/Tr8   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                 <  ^ [        U4S jS 5       5      nU HH  n U R                  [        U5      USU 3S9nU[        UR                  R                  S5      5      S.s  $    g ! [         a+  nU R	                  U SUR
                   35         S nAM}  S nAff = f)Nc              3   Z   >#    U  H   n[         R                  " S SU 3T5      v   M"     g7f)z((^https?://)(seed\d+)(?=\.bitchute\.com)z\g<1>N)resub).0host	video_urls     S/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/bitchute.py	<genexpr>+BitChuteIE._check_format.<locals>.<genexpr>o   s4      98 FF>5QZ[[8s   (+)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)r8   rB   )	r   _request_webpager   r   	to_screencauser   headersget)selfrP   rc   urlsr8   responsees    `     rQ   _check_format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                    UR                  S5      S   n U R                  SU 3USU S3SU S3[        R                  " U5      R	                  5       SSS.S	9$ ! [
         a  n[        UR                  [        5      (       a  UR                  R                  S
:X  a  SR                  [        UR                  R                  R                  5       R                  5       [        R                  1SS S[         145      5      nU(       a  SU;   a  U R#                  U5        U(       a  e U R%                  UR&                  5         S nAg S nAff = f)N/r   z"https://api.bitchute.com/api/beta/zDownloading z	 API JSONzUnable to download zapplication/json)AcceptContent-Typedatarh   i  z. errorsc                     US   S:H  $ )Ncontextreason )_vs     rQ   <lambda>&BitChuteIE._call_api.<locals>.<lambda>   s    99Q    messagelocation)
rpartition_download_jsonjsondumpsencoder   
isinstancerg   r   statusjoinr   rl   readdecodeloadsstrraise_geo_restrictedreport_warningmsg)rj   endpointru   
display_idfatalrd   rm   rv   s           rQ   	_call_apiBitChuteIE._call_api   s0   ""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 
E$CEEc                    U R                  U5      nSU0nU R                  SX25      S   n/ n[        U5      S:X  a"  UR                  U R	                  XBSSSS95        OQU R                  S	5      S
La*  U R                  XB5      =n(       a  UR                  U5        OUR                  SU05        U(       d  U R                  SSUS9  U R                  SX2S
S9nS n[        USS[        145      =n	(       a  U R                  SSU	0US
S9n0 [        US[        14S[        14S[        14SS[        14SS[        14SS[        S5      14S[        14S[        U R                  S91[        4S[         14S["        14SS[        1[        [$        [        4S[&        14SS  14S!.5      E[        US[        14S[        14S"[        U R(                  S91[        4S#[        14S[        14S[        U R                  S91[        4S$.5      EUUS%.E$ )&Nrc   zvideo/media	media_urlm3u8r   hlsT)m3u8_idliverF   Fr8   ziVideo is unavailable. Please make sure this video is playable in the browser before reporting this issue.)expectedrc   video)r   r1   r4   
video_namer,   thumbnail_urlchannel_namer2   zhttps://www.bitchute.com/
profile_id)templatedate_publishedr6   hashtags.r5   state_idc                     U S:H  $ )Nr   rz   )xs    rQ   r}   *BitChuteIE._real_extract.<locals>.<lambda>   s    1;r   )r+   r,   r-   r1   r4   r2   r3   r0   r7   r6   rD   r5   is_liveurl_slugprofile_name)r1   r4   r2   r.   r3   r0   )r)   formats)	_match_idr   r   extend_extract_m3u8_formats	get_paramrn   appendraise_no_formatsr   r   r   r   r   _UPLOADER_URL_TMPLfilterr   r   allr   _CHANNEL_URL_TMPL)
rj   r8   rc   ru   r   r   fmtr   r1   r4   s
             rQ   _real_extractBitChuteIE._real_extract   sd   >>#&H%NN=$A+N	#v-NN**9u[_*`b ~~o.e;,,YAA3ANN3'y12!!/9= " R we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   rz   )T)__name__
__module____qualname____firstlineno__
_VALID_URL_EMBED_REGEXint_TESTS_GEO_BYPASSr   r   rn   r   r   __static_attributes__rz   r   rQ   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                       \ rS rSrSrSSSSS.SS	S
SSSSSSSSS\SSSS.S./SSS.S.SSSSSS.SS .S!SS"./rS#rS$rS%S&S'S(.S)S*S+S(.S,.r	\
S- 5       rS. rS/ rS0rg1)2BitChuteChannelIE   zThttps?://(?:(?:www|old)\.)?bitchute\.com/(?P<type>channel|playlist)/(?P<id>[^/?#&]+)r%   rE   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/   r0   r1   r2   r6   r5   r3   r4   r7   )r9   r:   Tz-1)skip_downloadplaylist_items)r8   r:   playlistrG   z/https://www.bitchute.com/playlist/wV9Imujxasw9/   wV9Imujxasw9z+Bruce MacDonald and "The Light of Darkness"z$md5:747724ef404eebdfc04277714f81863ez404 Not Found)r8   playlist_mincountr:   skipz/https://old.bitchute.com/playlist/wV9Imujxasw9/rH   @zyG6tQcGPE5swyAEFLqKUwMuMMuF6IO2DZ6ZDQjGfsL0e4dcTLwqkTTul05Jdve7   zchannel-videos-containerzchannel-videos-titlezchannel-videos-text)	containerr+   r,   zplaylist-videor+   r,   )r1   r   c                     SU SU  S3$ )Nzhttps://old.bitchute.com/rq   rz   )playlist_idplaylist_types     rQ   	_make_urlBitChuteChannelIE._make_url  s    *=/;-qIIr   c              #     #    U R                  X5      nU R                  U S3USU 3[        U R                  SX0R                  -  S.5      SUSSU R                   3S.S	9nUR                  S
5      (       d  g U R                  U   n[        US   UR                  S5      5       H  nU R                  SUSS S9nU(       d  M  U R                  SU 3[        US[        [        US   U5      5      [        [        US   U5      5      [        [        SU5      5      [        [        [        SU5      5      5      S9v   M     g 7f)Nzextend/zDownloading page  )csrfmiddlewaretokennameoffsetz0application/x-www-form-urlencoded; charset=UTF-8XMLHttpRequestz
csrftoken=)rs   RefererzX-Requested-WithCookiert   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,   r6   r5   )r   r   r   _TOKEN	PAGE_SIZEri   HTML_CLASS_NAMESr   _search_regex
url_resultr   r
   r   r   r   )	rj   r   r   page_numplaylist_urlru   classes
video_htmlrc   s	            rQ   _fetch_pageBitChuteChannelIE._fetch_page  sd    ~~kA""nG$k5Fxj3Q#'+{{"^^3% 
 !S'$4&t{{m4	 #  xx	""''64W[5I488TZK[\J))9:z[_ * aH//1(<j(dh !5gg6F
!ST&';GM<RT^'_`'(<=Mz(Z[&z2F}V`2a'bc " e e ]s   EEc                    U R                  U5      R                  SS5      u  p#U R                  U R                  X25      U5      n[        R
                  " U R                  X25      nU R                  [        XPR                  5      UU R                  US S9U R                  SUS S9[        U R                  SUSS S95      S9$ )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)rj   r8   r   r   webpage	page_funcs         rQ   r   BitChuteChannelIE._real_extract0  s    %)%:%:3%?%E%Efd%S"(()SU`a%%d&6&6S	##i8+**7D*A..H'[_ / a&t'>'>/:JTX (? (Z [ $ \ 	\r   rz   N)r   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   r   rz   r   rQ   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   rL   commonr   
networkingr   networking.exceptionsr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r   r   rz   r   rQ   <module>r     sT      	 ! $ -    " +o
 o
dm\ m\r   