
    V|h<R                         S SK rS SKrS SKrS SKrS SKrSSKJr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  Sr " S S\5      r " S	 S
\5      r " S S\5      r " S S\5      r " S S\	5      rg)    N   )InfoExtractorSearchInfoExtractor   )ExtractorErrordetermine_extfloat_or_noneformat_fieldint_or_nonestr_or_nonetraverse_objtry_getunescapeHTMLunified_timestampurl_or_noneurlencode_postdataz8https://prod-api-v2.production.rokfin.com/api/v2/public/c                      \ rS rSrSrSrSr0 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0 S S!_S"S_S#S$_S%S	_S&S'_S(S)_S*S+_S,S-_S.S_S/S0_S1S2_S3S1_S4S5_S6S5_S7S8_S9S8_S:\_\S/S;.ES.S<0 S S=_S"S_S#S>_S%S	_S(S?_S*S@_S,SA_S.SB_S3S_S:\_SC\_S4SD_S9SE_SFSSG/_S&SH_SISJ_S.SK0 S SL_S"S_S#SM_S%SN_S(SO_S*SP_S,SQ_S.SB_S3S1_S:\_SC\_S4SR_S6SS_S7ST_S9ST_SFS/_S./r	SU r
SV rSW rSX rSY r0 0 4SZ jrS[rg\)]RokfinIE   z@https?://(?:www\.)?rokfin\.com/(?P<id>(?P<type>post|stream)/\d+)rokfinzHhttps://secure.rokfin.com/auth/realms/rokfin-web/protocol/openid-connectzOhttps://www.rokfin.com/post/57548/Mitt-Romneys-Crazy-Solution-To-Climate-Changez
post/57548mp4z.Mitt Romney's Crazy Solution To Climate Changez*re:https://img\.production\.rokfin\.com/.+20211023itaz
Jimmy Dore65429z#https://rokfin.com/TheJimmyDoreShowpublicnot_live   )idexttitle	thumbnailupload_date	timestampchannel
channel_idchannel_urlavailabilitylive_statusdislike_count
like_countduration)url	info_dictzJhttps://rokfin.com/post/223/Julian-Assange-Arrested-Streaming-In-Real-Timezpost/223z/Julian Assange Arrested: Streaming In Real Time20190412id8\zRon Placone10zhttps://rokfin.com/RonPlaconezFreeThinkingMedia^zRealProgressives^)r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   tagszrhttps://www.rokfin.com/stream/10543/Its-A-Crazy-Mess-Regional-Director-Blows-Whistle-On-Pfizers-Vaccine-Trial-Datar   zstream/10543r   r   zR"It's A Crazy Mess" Regional Director Blows Whistle On Pfizer's Vaccine Trial Datar    descriptionz$md5:324ce2d3e3b62e659506409e458b9d8er#   TLAVagabondr$   53856r%   zhttps://rokfin.com/TLAVagabondr&   is_liveFwas_liveTr'   r"   iwarelease_timestamprelease_date20211102r!   r(   )r)   r/   zihttps://rokfin.com/post/126703/Brave-New-World--Aldous-Huxley-DEEPDIVE--Chpts-13--Quite-Frankly--Jay-Dyerzpost/126703zQBrave New World - Aldous Huxley DEEPDIVE!  (Chpts 1-3) - Quite Frankly & Jay DyerzJay Dyer186881zhttps://rokfin.com/jaydyerpremium_onlyr)   id20230307r/   z	OpenMind^z$md5:cb04e32e68326c9b2b251b297bacff35r*   i  zJhttps://rokfin.com/stream/31332/The-Grayzone-live-on-Nordstream-blame-gamezstream/31332z*The Grayzone live on Nordstream blame gamez#re:https://image\.v\.rokfin\.com/.+zMax Blumenthal248902z https://rokfin.com/MaxBlumenthalidg  A20230310c                    U R                  U5      R                  SS5      u  p#U R                  [         U 3U5      n[	        UR                  S5      5      nUR                  S5      (       a  SOU(       a  SO	US:X  a  SOS	n[        US
S[        S9nUS;   a+  [        U R                  S[        USS[        S9US S9S S5      nU(       a  S
U0/O/ 0 p[        U5      S:X  a  U R                  XrSUS:H  S9u  pU(       dk  [        USS5      (       a  U R                  SSSS9  OGU(       a@  U R                  S[        R                  R!                  U5      R#                  S5       3USS9  [        USS 5      n
U=(       d<    [%        UR                  S!5      S"5      =(       d    [	        UR                  S#5      5      n0 SU_S$U_S%U	_S&['        [        US&S'5      5      _S([%        [        US)5      5      _S*[        [        US*S+5      5      _S,['        [        US,S-5      5      _S.[)        UR                  S/5      5      _S0[)        UR                  S15      5      _S2['        [        US3S45      5      _S5['        [        US6S75      5      _S8U
(       a  [        S9U
 35      OS _S:U_S;US	:w  a  UOS _S<[        US=[&        S9_S>U_S?U R+                  [-        [        USS5      5      SSSSS@9_SAUSB:X  a  U R/                  U5      0E$ S 0E$ )CNr   typescheduledAt	stoppedAtr4   is_upcomingstreamr3   r   r+   )content
contentUrlexpected_type)Nz	fake.m3u8z%https?://[^/]+/([^/]+)/storyboard.vtttimelineUrl)rC   rG   defaultz#https://stream.v.rokfin.com/%s.m3u8m3u8F)fatallivepremiumPlanpremiumz-This video is only available to premium usersTcookies)methodz!Stream is offline; scheduled for z%Y-%m-%d %H:%M:%S)video_idexpected)	createdByusername)creatorrT   postedAtMillii  creationDateTimeformats	subtitlesr   rC   contentTitler*   )rC   r*   r    )rC   thumbnailUrl1r0   )rC   contentDescriptionr)   	likeCountr(   dislikeCountr#   )rS   name)rU   r`   r$   )rS   r   )rU   r   r%   https://rokfin.com/r"   r5   r/   )r/   .r   r'   r&   )needs_premium
is_privateneeds_subscription
needs_authis_unlisted__post_extractorpost)_match_valid_urlgroup!_download_json_using_access_token_API_BASE_URLr   getr   r   r
   _search_regexr   #_extract_m3u8_formats_and_subtitlesraise_login_requiredraise_no_formatsdtdatetimefromtimestampstrftimer	   r   r   _availabilityboolextract_comments)selfr+   rQ   
video_typemetadata	scheduledr'   	video_urlrX   rY   uploaderr"   s               Q/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/rokfin.py_real_extractRokfinIE._real_extract   s   #44S9??fM99]OH::VX`a%hll=&AB	%-\\+%>%>z-6M)3x)?I& 	
 !52K[fg	++$T%7%78X}6P`kl$ &8 &( *./TVI
 6?ui01B#v-!%!I!I5{i7O "J "QG HmY??))*Y[_hq)r%%78Q8QR[8\8e8efy8z7{|% & 6  *CE\] L-_0Mt"T L)(,,7I*JK 	
(
w
 
 [hA\!]^	

 l8=T&UV
 \(KIe%fg
 ;|HmMn'op
 +hll;&?@
 [n)EF
 {<:OQd#ef
 +l8=PRc&de
 H;)<XJ'GHZ^
 
  kZ.GT
 L+AQ\]
  ;!
" D.."<-#ST UuZ_ / a#
* :QWCW 5 5h ?+
 	
* ^b+
 	
    c              #   $  #    S n[         R                  " 5        GHp  nU R                  [         SUSS   SU S3USUS-    [	        US S5       3SS	9=(       d    0 nUR                  S
5      =(       d    /  H  n[        UR                  S5      5      [        UR                  S5      5      UR                  S5      UR                  S5      S[        UR                  S5      5      [        UR                  S5      5      [        UR                  S5      5      S.v   M     [        UR                  S5      5      =(       d    S nUR                  S5      nUR                  S
5      (       a!  U(       d  U(       a  X2:  d  GMf     g USLd  GMq    g    g 7f)Nzcomment?postId=   z&page=&size=50z!Downloading viewer comments page r    of %sFnoterK   rC   commentr`   	commentIduserIdrootnumLikesnumDislikespostedAt)textauthorr   	author_idparentr)   r(   r"   
totalPageslast)		itertoolscount_download_jsonrl   r
   rm   r   r   r   )ry   rQ   pages_totalpage_nraw_commentsr   is_lasts          r   _get_commentsRokfinIE._get_comments   sq    oo'F.. /!"fVHHU!B6A:,|\gimowOxNyz /  # !# 
 (++I6<"<'I(>?)'++f*=>!++k2!(X!6$"-gkk*.E"F%0]1K%L!27;;z3J!K	 	 = &l&6&6|&DEMK"&&v.G##I..'Vaf>R hov{g{+ (s   E9F FFc                    U R                  U R                   S3S SSS9n[        U R                  SUSS95      nU R                  US SS	S
[	        XSSS.5      S9nU R                  5       (       d:  [        R                  " SU=(       d    S5      (       a
  [        SSS9e[        S5      eU R                  U R                   S3S SSSSSSSSS.S9nU R                  U R                   S3S S S![	        [        R                  R                  [        R                  R                  UR                  5      R                   5      R#                  S5      S"   SS#SS$.5      S%9U l        g )&Nzw/auth?client_id=web&redirect_uri=https%3A%2F%2Frokfin.com%2Ffeed&response_mode=fragment&response_type=code&scope=openidzloading login pagezerror loading login page)r   errnotezr<form\s+[^>]+action\s*=\s*"(https://secure\.rokfin\.com/auth/realms/rokfin-web/login-actions/authenticate\?[^"]+)"zAuthentication URL)r`   z
logging inF  off )rT   password
rememberMecredentialId)r   rK   expected_statusdataz((?i)(invalid\s+username\s+or\s+password)zinvalid username/passwordTrR   zLogin failedz/authzgranting user authorizationz%user authorization rejected by Rokfinwebnonez(https://rokfin.com/silent-check-sso.htmlfragmentcodeopenid)	client_idpromptredirect_uriresponse_moderesponse_typescope)r   r   query/tokenzgetting access credentialsz error getting access credentialsr   authorization_code)r   r   
grant_typer   r   r   r   )_download_webpage
_AUTH_BASEr   rn   r   _authentication_activeresearchr   _request_webpager   urllibparseparse_qs	urldefragr+   r   rm   _access_mgmt_tokens)ry   rT   r   
login_pageauthentication_point_url	resp_bodyurlhs          r   _perform_loginRokfinIE._perform_login   s   ++   W  X+5O , Q
 $00B0B B1 1C 13 $4  **$dU\_#_dvx$yz + |	 **,,yyDioSUVV$%@4PP 00$$u%t.8_"  J!+!'! % 
 $(#6#6v&-7Y#--fll.D.DTXX.N.W.WX\\]cdefg"2 J	%  $7 $ r   c                 ^    1 Sk[        U R                  U R                  5      5      -
  (       + $ )N>   KEYCLOAK_SESSIONKEYCLOAK_IDENTITYKEYCLOAK_SESSION_LEGACYKEYCLOAK_IDENTITY_LEGACY)set_get_cookiesr   ry   s    r   r   RokfinIE._authentication_active   s+    l$##DOO4567 	7r   c                 0    [        U R                  S 5      $ )Nc                 4    SR                  U S   U S   /5      $ )N 
token_typeaccess_token)join)xs    r   <lambda>*RokfinIE._get_auth_token.<locals>.<lambda>  s    388Q|_VWXfVgDh;ir   )r   r   r   s    r   _get_auth_tokenRokfinIE._get_auth_token  s    t//1ijjr   c                    SU;  d   eUR                  5       nU R                  5       nU R                  R                  S5      nU(       a  XSS'   U R	                  XX4SS9u  pxU(       a  UR
                  S:w  d  Uc  U R                  Xr5      $ U R                  U R                   S3USS[        SUSS	.5      S
9U l        U R                  5       US'   US   c
  [        SSS9eU R                  XX4S9$ )Nauthorizationrefresh_tokeni  )headersr   r   r   zDUser authorization expired or canceled by Rokfin. Re-authorizing ...zFailed to re-authorizer   )r   r   r   r   zUser authorization lostTr   )r   r   )copyr   r   rm   _download_webpage_handlestatus_parse_jsonr   r   r   r   )	ry   url_or_requestrQ   r   r   
auth_tokenr   json_stringr   s	            r   rk   *RokfinIE._download_json_using_access_token  s   g---,,.))+
0044_E'1O$ 99gTW : YT[[C/=3H##K::#'#6#6v&Way#-!."%  $7 $  $(#7#7#9 ?#+ !:TJJ"">W"ZZr   )r   N)__name__
__module____qualname____firstlineno__
_VALID_URL_NETRC_MACHINEr   r   int_TESTSr   r   r   r   r   rk   __static_attributes__ r   r   r   r      sZ   TJN[J`FF%##!@$% 
& \FF%#$:$% )+>?
& D
.
5
 k
 F	

 A
 }
 '
 ;
 H
 u
 
 :
 
  
 J
  :!
" S#
$ )*'
0 {
-
5
 h
 F	

 z
 (
 7
 N
 :
 S
 #
 
 :
 );7
 A
  !
* \
.
5
 A
 ?	

 '
 (
 =
 N
 :
 S
 #
 
  
 J
 :
  )*!
_cFJ7
r2$L7
k SU\^ [r   r   c                   *    \ rS rSrSSSSSS.rS rSrg)	RokfinPlaylistBaseIEi   rh   rB   stackvideoaudiorB   dead_streamr   c              #   t  #    UR                  S5      =(       d    /  H  nU R                  R                  UR                  S5      5      nUS:X  a  UR                  S5      OUR                  S5      nU(       a  U(       d  Me  U R                  SU SU 3U SU 3[        [	        US5      5      S	9v   M     g 7f)
NrC   	mediaTyperh   r   mediaIdra   /rZ   )rQ   video_title)rm   _TYPES
url_resultr   r   )ry   r{   rC   
media_typerQ   s        r   _get_video_data$RokfinPlaylistBaseIE._get_video_data)  s     ||I.4"4G[)ABJ,6&,@w{{4(gkkR[F\HX//$7
|1XJ"O]g\hhijrisZt.9,wPk:l.m " o o 5s   B6B8r   N)r   r   r   r   r  r  r   r   r   r   r   r      s    For   r   c                   8    \ rS rSrSrSrSrSSSS0S	./rS
 rSr	g)RokfinStackIEi4  zrokfin:stackzRokfin Stacksz2https?://(?:www\.)?rokfin\.com/stack/(?P<id>[^/]+)zShttps://www.rokfin.com/stack/271/Tulsi-Gabbard-Portsmouth-Townhall-FULL--Feb-9-2020   r   271r+   playlist_countr,   c           	          U R                  U5      nU R                  U R                  U R                  [         SU 3U5      5      U5      $ )Nzstack/)	_match_idplaylist_resultr  r   rl   )ry   r+   list_ids      r   r   RokfinStackIE._real_extract@  sQ    ..%##D$8$8=/y A7K%MNUW 	Wr   r   N)
r   r   r   r   IE_NAMEIE_DESCr   r   r   r   r   r   r   r  r  4  s3    GGFJd%
 FWr   r  c                   `    \ rS rSrSrSrSrSSSSS	S
.S./rSSSSSSS.rS r	S r
S rS rSrg)RokfinChannelIEiF  zrokfin:channelzRokfin ChannelszXhttps?://(?:www\.)?rokfin\.com/(?!((feed/?)|(discover/?)|(channels/?))$)(?P<id>[^/]+)/?$z https://rokfin.com/TheConvoCouchd   z	12071-newzTheConvoCouch - Newz$md5:bb622b1bca100209b91cd685f7847f06)r   r   r0   )r+   playlist_mincountr,   poststopr   r   rB   r   )newr  videospodcastsstreamsstacksc                 $    U R                  5         g N)_validate_extractor_argsr   s    r   _real_initialize RokfinChannelIE._real_initialize]  s    %%'r   c                     U R                  SS 5      nUbI  [        U5      S:  d  US   U R                  ;  a&  [        SSR	                  U R                  5       3SS9eg g )Ntabr   r   z,Invalid extractor-arg "tab". Must be one of z, Tr   )_configuration_arglen_TABSr   r   )ry   requested_tabss     r   r   (RokfinChannelIE._validate_extractor_args`  sn    00=%3~+>+BnUVFW_c_i_iFi #OPTPYPYZ^ZdZdPeOf!grvww Gj%r   c              #     #    S n[         R                  " S5       H  nUS;   a  [         SU SU SU S3nO[         SU SU SU 3nU R                  XbS	US
-    [	        US S5       3S9nU R                  U5       S h  vN   [        UR                  S5      5      =(       d    S nUR                  S5      nU(       d  U(       a
  XT:  d  M     g USLd  M    g    g  N\7f)Nr   )r  r  user/r   z?page=r   zpost/search/z&size=50&creator=z Downloading video metadata page r   r   )r   r   r   F)r   r   rl   r   r
   r  r   rm   )	ry   r$   channel_namer$  r   r   data_urlr{   r   s	            r   _entriesRokfinChannelIE._entriese  s     ooa(F&&+_E,qVF8S[\+_LVF8K\]g\hi**7
|LQ\^bdlDmCno + qH ++H555%hll<&@AITKll6*G;6/ ELSXDX ) 6s   A=C?C A	CCCc           
      N   U R                  U5      nU R                  [         SU 3U5      nUS   nU R                  SS/S9S   nU R	                  U R                  XBU R                  U   5      U SU 3U SUR                  5        3[        UR                  S	5      5      5      $ )
Nr+  r   r$  r  rH   r   -z - r0   )
r  r   rl   r%  r  r.  r'  r   r   rm   )ry   r+   r,  channel_infor$   r$  s         r   r   RokfinChannelIE._real_extractv  s    ~~c***m_E,+PR^_!$'
%%eeW%=a@##MM*DJJsODl!C5!l^3syy{m#DkR^RbRbcpRqFrt 	tr   r   N)r   r   r   r   r  r  r   r   r'  r!  r   r.  r   r   r   r   r   r  r  F  sb    GGlJ1 *A
 F E(x
"tr   r  c                   h    \ rS rSrSrSrSrSSSSSS.rS	S
SSS.S./rSr	Sr
S rS rS rSS jrSrg)RokfinSearchIEi  zrokfin:searchzRokfin Search
rkfnsearch))r   rawrh   )
content_idr7  rB   )r8  r   r   zrkfnsearch5:"zelenko"r   z	"zelenko")r   r   r
  Nc                     U R                   R                  U R                  5       SSS9u  U l        U l        U R                  (       d  U R                  5         g g )NauthNNrH   )cacheloadie_key_db_url_db_access_key_get_db_access_credentialsr   s    r   r!  RokfinSearchIE._real_initialize  sC    ,0JJOODKKM6[gO,h)d)||++- r   c              #     #    S n[         R                  " S5       H  nU R                  XSUS.S.SU [        US S5       3S9n[	        US[
        S	9nUR                  S
5      =(       d    /  Hb  nU R                  R                  [	        US5      S5      u  pg[	        XV[
        S	9nU(       d  MB  U(       d  MK  U R                  SU SU 3S9v   Md     UR                  S
5      (       a  M    g    g 7f)Nr   r  )sizecurrent)r   pagezDownloading page z of ~%s)r   r   )metarG  total_pagesrE   results)content_typer7  r<  ra   r   )r+   )	r   r   _run_search_queryr
   r   r   rm   r  r  )	ry   r   rI  page_numbersearch_resultsresultvideo_id_keyrz   rQ   s	            r   _search_resultsRokfinSearchIE._search_results  s     $??1-K!33ck5Z[(l;PTV_6`5ab 4 dN '~7VfqrK(,,Y7=2=+/;;??<Pg;hjv+w('KX8

//0CJ<qQYPZ.[/\\	 >
 "%%i00 .s   B)C0/C08/C0+C0c                 *   [         R                  " U5      R                  5       n[        S5       H`  nU R                  " U R
                  U4X$S:H  SU R                  0S.UD6nU(       a  Us  $ U R                  S5        U R                  U5        Mb     g )Nr   r   r   )r   rK   r   zUpdating access credentials)	jsondumpsencoderanger   r@  rA  write_debugrB  )ry   rQ   r   kwargsattemptrN  s         r   rL   RokfinSearchIE._run_search_query  s    zz$&&(QxG!00hJ-1Q,($*=*=>JBHJN %%:;++H5  r   c           
      T   S S S.nU R                  SUSSS9n[        R                  " SU5       H  nU R                  SU 3USS	S
9nUR                  [        R                  " SSR	                  UR                  5       5       S3U=(       d    S5      5        [        UR                  5       5      (       d  M  [        US    S35      U l	        SUS    3U l
        U R                  R                  U R                  5       SU R                  U R                  45          g    [        S5      e)N)
SEARCH_KEYENDPOINT_BASEzhttps://rokfin.com/discoverr   zDownloading home page)r   r   z/<script\b[^>]*\ssrc\s*=\s*"(/static/js/[^">]+)"zhttps://rokfin.comzDownloading JavaScript fileFr   zREACT_APP_(|z)\s*:\s*"([^"]+)"r   r^  z,/api/as/v1/engines/rokfin-search/search.jsonzBearer r]  r;  z$Unable to extract access credentials)r   r   findallupdater   keysallvaluesr   r@  rA  r=  storer?  r   )ry   rQ   	auth_datanotfound_err_pagejs_file_path
js_contents         r   rB  )RokfinSearchIE._get_db_access_credentials  s0   #'$?	 22)8SOf 3 hJJ'Y[lmL//$\N3XDain 0 pJRZZsxx	(89::KLjN^\^` ay'')**&)O*D)EEq'rsDL$+Il,C+D"EDJJT[[]FT\\4CVCV4WX n CDDr   )rA  r@  r  )r   r   r   r   r  r  _SEARCH_KEYr  r   r@  rA  r!  rQ  rL  rB  r   r   r   r   r5  r5    sg    GGK((381F ' 
 F GN.
 	6Er   r5  )rs   rr   r   rT  r   urllib.parser   commonr   r   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   rl   r   r   r  r  r5  r   r   r   <module>ro     s       	  6    KC[} C[Lo= o(W( W$8t* 8tvFE( FEr   