
    V|h=                         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  SSKJr   " S S\5      r " S S	\5      r " S
 S\5      rg)   )InfoExtractor   )	HTTPError)ExtractorErrorLazyListint_or_nonejoin_nonemptyparse_iso8601parse_qssmuggle_urlstr_or_noneurl_or_noneurlencode_postdataurljoin)traverse_objc                   2    \ rS rSrSrSr\ S3rS rS rSr	g)	RoosterTeethBaseIE   roosterteethz https://svod-be.roosterteeth.comz/api/v1c                    U R                  U R                  5      R                  S5      (       a  g  U R                  SS S[	        SSUUS.5      S9  g ! [
         a  nSn[        UR                  [        5      (       a  UR                  R                  S	:X  a  U R                  UR                  R                  R                  5       R                  5       S S
S9nU(       aP  UR                  S5      =(       d)    UR                  S5      =(       d    UR                  S5      nU(       a  USU-   -  nU R                  U5         S nAg S nAff = f)Nrt_access_tokenz)https://auth.roosterteeth.com/oauth/tokenz
Logging in@4338d2b4bdc8db1239360f28e72f0d9ddb1fd01e7a38fbb07b4b1f4ba4564cc5password)	client_id
grant_typeusernamer   )datazUnable to logini  Ffatal
extra_infoerror_descriptionerrorz: )_get_cookies_API_BASE_URLget_download_jsonr   r   
isinstancecauser   status_parse_jsonresponsereaddecodereport_warning)selfr   r   emsgrespr"   s          W/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/roosterteeth.py_perform_login!RoosterTeethBaseIE._perform_login   s    T//0445FGG	%;l);!c", ( (	= *     	%#C!''9--!''..C2G''(8(8(=(=(?(F(F(H$V['\ HH\2hdhh?R6ShW[W_W_`gWhEte|+$$	%s    A 
EC$EEc           
      2   / n[        US5       H{  nUR                  S5      S;  a  M  UR                  UR                  S5      =(       d    0 R                  5        VVs/ s H  u  pE[	        U5      (       d  M  UUS.PM     snn5        M}     UR                  S5      =(       d    0 n[        USS5      nUR                  S5      n[        UR                  S	5      5      n	[        UR                  S
5      5      n
U
(       a  SU;   a  U
S-  n
O	U
(       d  U	n
0 S
U
_SUR                  S5      _SU_S[        USS5      _S[        USS5      _S[        UR                  S5      5      _S[        UR                  S5      5      _SU_S[        UR                  S5      5      _SU	_SUR                  S5      _S[        UR                  S5      5      _S[        UR                  S5      5      _SU_S U R                  XUS!S!S"9_S#UR                  S$5      _$ s  snnf )%N)includedimagestype)episode_imagebonus_feature_image
attributes)idurltitledisplay_titleis_sponsors_onlyuuidr=   parent_content_idz-bonus
display_idslugdescriptioncaptionseries
show_titleparent_content_titleseason_number	season_idepisodeepisode_numbernumber
episode_id
channel_iddurationlengthrelease_timestamporiginal_air_date
thumbnailsavailabilityF)needs_premiumneeds_subscription
needs_auth
is_privateis_unlistedtagsgenres)	r   r%   extenditemsr   r   r   r
   _availability)r/   r   rV   imagenamer>   r<   r?   sub_onlyrP   video_ids              r3   _extract_video_info&RoosterTeethBaseIE._extract_video_info/   s_   
!$(>?Eyy (PP !&		, 7 =2DDF\  G)$+VYJZ    G\ ] @ XXl+1r
Z/B>>"45 &!12
txx~.+z9 H!H
(
*..0
 U
 <
M9M	

 l:|=ST
 [)HI
 Z^^K%@A
 u
 k*..*BC
 *
 *..6
 JNN8$<=
  z~~>Q/R!S
 *
 D..&PX e / 5
$ JNN8,%
 	
!\s   H9	H N)
__name__
__module____qualname____firstlineno___NETRC_MACHINE	_API_BASEr$   r4   rf   __static_attributes__rh       r3   r   r      s"    #N2I k)M%.(
rp   r   c                      \ rS rSrSrS0 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(.ES)S*0S+.S,0 SS-_SS._S
S/_SS0_SS/_S"S1_SS2_SS	_SS_SS3_SS4_SS5/_S S6_SS7_SS8_SS9_S$S:_S;S<S(.ES)S*0S+.S=S>S?S@SAS@S1S2S	SSBSCSDSESFSGSH.S)S*0S+.SI0 SSJ_SS	_S
SK_SSL_SS_SS2_SSK_SSM_SSN_SSO_SSP/_SSQ_SSR_S SS_SST_S"SU_S$SV_SWSXS(.ES)S*0S+.SY0 SSZ_SS	_S
S[_SS_SS\_SS_S S]_S"S^_SS[_SS__SS2_SSPS`/_SSa_SSb_SS4_SSc_SdSe_SfSg0ESh/S)S*0Si.SjS*Sk.SlS*Sk.SmS*Sk.SnS*Sk.SoS*Sk.SpS*Sk.SqS*Sk./rSrrSs rSt rSur	gv)wRoosterTeethIEZ   zUhttps?://(?:.+?\.)?roosterteeth\.com/(?:bonus-feature|episode|watch)/(?P<id>[^/?#&]+)zfhttp://roosterteeth.com/episode/million-dollars-but-season-2-million-dollars-but-the-game-announcementr=   9156rD   zFmillion-dollars-but-season-2-million-dollars-but-the-game-announcementextmp4r?   z-Million Dollars, But... The Game AnnouncementrF   z$md5:168a54b40e228e79f4ddb141e89fe4f5	thumbnailzre:^https?://.*\.png$rH   zMillion Dollars, But...rM   r]   z	Game ShowSketchrK   r   rW   publicrN   
   rP   z$00374575-464e-11e7-a302-065410f210c4seasonzSeason 2rL   z$ffa27d48-464d-11e7-a302-065410f210c4rQ   z$92b6bb21-91d2-4b1b-bf95-3268fa0d9939rR      i W3W20160511)rT   release_dateskip_downloadT)r>   	info_dictparamsz,https://roosterteeth.com/watch/rwby-bonus-2540432zrwby-bonus-25Grimmz$md5:f30ff570741213418a8d2c19868b93abz$92f780eb-ebfe-4bf5-a3b5-c6ad5460a5f1zre:^https?://.*\.(png|jpe?g)$z$f8117b13-f068-499e-803e-eec9ea2dec8c   	Animationz$4b8f0a9e-12c4-41ed-8caa-fed15a85bab8zSeason 1zRWBY: World of Remnantr      i#@T20141016z,https://roosterteeth.com/watch/rwby-bonus-21z33-bonuszrwby-bonus-21zVolume 5 Yang Character Shortz$md5:8c2440bc763ea90c52cfe0a68093e1f7z$f2a9f132-1fe2-44ad-8956-63d7c02677207   RWBY   ip&Y20171014)r=   rD   r?   rF   rM   rQ   rw   ru   rW   rP   rN   rH   rR   rT   r~   zhttps://www.roosterteeth.com/watch/achievement-hunter-achievement-hunter-fatality-walkthrough-deathstroke-lex-luthor-captain-marvel-green-lantern-and-wonder-woman25394z^Fatality Walkthrough: Deathstroke, Lex Luthor, Captain Marvel, Green Lantern, and Wonder Womanz$md5:91bb934698344fb9647b1c7351f16964G   z$ffaec998-464d-11e7-a302-065410f210c4zSeason 2008GamingzAchievement Hunterz$md5:4465ce4f001735f9d7a2ae529a543d31z$ffa13340-464d-11e7-a302-065410f210c4i  z$2cb2a70c-be50-46f5-93d7-84a1baabb4f7   it6I20081203z1https://roosterteeth.com/watch/lets-play-2013-12617845zWWE '13z
Let's Playz$ffa23d9c-464d-11e7-a302-065410f210c4z$75ba87e8-06fd-4482-bad9-52a4da2c6181z$ffdbe55e-464d-11e7-a302-065410f210c4zOur Favoritesz$md5:b4a5226d2bbcf0dafbde11a2ba27262dzlets-play-2013-126zSeason 3rT   i`Qr~   20130204z'Direct m3u8 URL returned HTTP Error 403)r>   r   expected_warningsr   zhttp://achievementhunter.roosterteeth.com/episode/off-topic-the-achievement-hunter-podcast-2016-i-didn-t-think-it-would-pass-31)r>   only_matchingzWhttp://funhaus.roosterteeth.com/episode/funhaus-shorts-2016-austin-sucks-funhaus-shortszRhttp://screwattack.roosterteeth.com/episode/death-battle-season-3-mewtwo-vs-shadowzahttp://theknow.roosterteeth.com/episode/the-know-game-news-season-1-boring-steam-sales-are-betterzhttp://roosterteeth.com/episode/rt-docs-the-world-s-greatest-head-massage-the-world-s-greatest-head-massage-an-asmr-journey-part-onezehttps://roosterteeth.com/watch/million-dollars-but-season-2-million-dollars-but-the-game-announcementznhttps://roosterteeth.com/bonus-feature/camp-camp-soundtrack-another-rap-song-about-foreign-cars-richie-branson6203312018001c                     U R                  SUSU R                  S9nU R                  R                  S5      R	                  [        SU SU 3SU05      5      nUS   US	   4$ )
Nz/accounts/(\d+)/videos/z
account id)defaultBrightcoveNewzhttps://players.brightcove.net/z$/default_default/index.html?videoId=referrerformats	subtitles)_search_regex_BRIGHTCOVE_ACCOUNT_ID_downloaderget_info_extractorextractr   )r/   bc_idr>   m3u8_url
account_idinfos         r3   )_extract_brightcove_formats_and_subtitles8RoosterTeethIE._extract_brightcove_formats_and_subtitles   s    ''&,HcHc ( e
22?CKKK-j\9]^c]deM   I[ 111rp   c                    U R                  U5      nU R                   SU 3n U R                  US-   USSS0S9S   S   nUS   S   n[        US5      S:H  n[        USS[        145      n U R!                  XbSSSS9u  pU R                  X2S5      S   S   nUU	U
S.U R'                  U5      E$ ! [         a  n[	        UR
                  [        5      (       a  UR
                  R                  S	:X  ah  U R                  UR
                  R                  R                  5       R                  5       U5      R                  S
5      SL a  U R                  U S35        e S nAff = f! [         ax  nU(       ak  U(       ad  [	        UR
                  [        5      (       aE  UR
                  R                  S	:X  a+  U R#                  S5        U R%                  XU5      u  p S nAGN_e S nAff = f)Nz/watch/z/videoszDownloading video JSON metadatazClient-Typeweb)headersr       i  accessFz$ is only available for FIRST membersr<   r>   )r<   encoding_pipeline
brightcoveuidrv   m3u8_nativehls)m3u8_idzLDirect m3u8 URL returned HTTP Error 403; retrying with Brightcove extractionz!Downloading episode JSON metadata)rD   r   r   )	_match_idr$   r&   r   r'   r(   r   r)   r*   r+   r,   r-   r%   raise_login_requiredr   str#_extract_m3u8_formats_and_subtitlesr.   r   rf   )r/   r>   rD   api_episode_url
video_datar0   r   is_brightcover   r   r   rM   s               r3   _real_extractRoosterTeethIE._real_extract   s
   ^^C(
!//0
|D		,,)+Z9Z&. - 006889;J l+E2$Z1TUYeeZ,u)EF		!%!I!Ie]E "J "KG %%/11799:<
 %"
 &&w/	
 	
7  	!''9--!''..C2G##AGG$4$4$9$9$;$B$B$DjQUUV^_chh--%,&JKM	  	:aggy+I+Iaggnn`cNc##bd%)%S%STY`h%i"	s7   B0 -E$ 0
E!:B"EE!$
G&.A,G! G!!G&rh   N)
ri   rj   rk   rl   
_VALID_URL_TESTSr   r   r   ro   rh   rp   r3   rr   rr   Z   s   iJw
&
b
 5
 D	

 A
 1
 /
 F
 [(+
 Q
 H
 b
 @
 j
 ?
  @!
" #
$ ",&'
* #D)/2 >
'
/
 W
 A	

 w
 @
 9
 5
 H
 @
 a
 [M
 ?
 j
 .
  Q!
" #
$ ",&'
* #D)/4 >)4A6@9$@ !+&
" #D)). t
'
5
 u
 A	

 H
 9
 w
 b
 @
 m
 XJ
 *
 @
 ?
 T
  @!
" #
$ ",&'
* #D)16 C
'
5
 Z
 H	

 m
 b
 ?
 @
 z
 @
 9
 X/
 A
 .
 Q
  j!
"  #
$ J%
( HH"D)14 Q i d s
 V
 w @UMF^ -2(
rp   rr   c                   h    \ 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./rS rS rSrg)RoosterTeethSeriesIEi   z<https?://(?:.+?\.)?roosterteeth\.com/series/(?P<id>[^/?#&]+)z-https://roosterteeth.com/series/rwby?season=7   zrwby-7zRWBY - Season 7)r=   r?   )r>   playlist_countr   z/https://roosterteeth.com/series/the-weird-place   zthe-weird-placezThe Weird Placez/https://roosterteeth.com/series/role-initiative   zrole-initiativezRole Initiative)r>   playlist_mincountr   z=https://roosterteeth.com/series/let-s-play-minecraft?season=92   zlet-s-play-minecraft-9zLet's Play Minecraft - Season 9c           
   #     ^ #    [        X5      nU 4S jnT R                  T R                   SU S3U5      n[        USS 45       HY  n[        US5      nUb  Xr:w  a  M  U" T R                  [	        T R
                  US   S   5      US	U S
3SS0S95       S h  vN   M[     Uc1  U" T R                  T R                   SU S3USSS95       S h  vN   g g  N= N7f)Nc              3      >#    [        U SS 45       H<  nTR                  " [        SUS   S   5      [        40 TR	                  U5      D6v   M>     g 7f)Nr   c                     US   S   $ )Ncanonical_linksr/   rh   _vs     r3   <lambda>GRoosterTeethSeriesIE._entries.<locals>.yield_episodes.<locals>.<lambda>D  s    AFWDXY_D`rp   zhttps://www.roosterteeth.comr   r/   )r   
url_resultr   rr   rf   )r   rM   r/   s     r3   yield_episodes5RoosterTeethSeriesIE._entries.<locals>.yield_episodesC  s_     'v7`.aboo:GDU<VW]<^_"I&*&>&>w&GI I cs   AAz/shows/z/seasons?order=asc&order_byr   c                     US   S   $ )Nlinksepisodesrh   r   s     r3   r   /RoosterTeethSeriesIE._entries.<locals>.<lambda>K  s    1W:V`Karp   )r<   rO   r   r   zDownloading season z JSON metadataper_pagei  )queryz0/bonus_features?order=asc&order_by&per_page=1000z(Downloading bonus features JSON metadataFr   )r	   r&   r$   r   r   rn   )r/   	series_idrK   rD   r   series_dataseason_dataidxs   `       r3   _entriesRoosterTeethSeriesIE._entries@  s-    "9<
	I ))!!"')4OPR\^'f>a5bcK{,DEC(S-A%d&9&9G(<Z(HI:%cU.9*dAS ': 'U V V V	 d  %d&9&9%%&gi[8hiFe ': 'U V V V !	V
Vs$   BCC6CCCCc           
          U R                  U5      n[        [        U5      S[        S9n[	        U R                  X#5      5      nU R                  U[        X#5      [        US   R                  S5      USS95      $ )N)r{   r   )expected_typer   rH   z
 - Season )delim)	r   r   r   r   r   r   playlist_resultr	   r%   )r/   r>   r   rK   entriess        r3   r   "RoosterTeethSeriesIE._real_extractX  so    NN3'	$Xc]MQ\]4==BC##)3'!*..2MVX 	Xrp   rh   N)	ri   rj   rk   rl   r   r   r   r   ro   rh   rp   r3   r   r      s{    PJ>&
 A#&
 A#&
 O*7
+F<V0Xrp   r   N)commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   r   r   utils.traversalr   r   rr   r   rh   rp   r3   <module>r      sT    ! -    +D
 D
NC
' C
L@X- @Xrp   