
    VGh=                         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 ddlmZ  G d de      Z G d d	e      Z G d
 de      Zy)   )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                   *    e Zd ZdZdZe dZd Zd Zy)RoosterTeethBaseIEroosterteethz https://svod-be.roosterteeth.comz/api/v1c                 h   | j                  | j                        j                  d      ry 	 | j                  dd dt	        dd||d             y # t
        $ r}d}t        |j                  t              r|j                  j                  d	k(  r| j                  |j                  j                  j                         j                         d d
      }|rA|j                  d      xs$ |j                  d      xs |j                  d      }|r|d|z   z  }| j                  |       Y d }~y d }~ww xY w)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          f/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/roosterteeth.py_perform_loginz!RoosterTeethBaseIE._perform_login   s   T//0445FG	%;l);!c", ( (	= *     	%#C!''9-!''..C2G''(8(8(=(=(?(F(F(H$V['\ HH\2hdhh?R6ShW[W_W_`gWhEte|+$$	%s   #A 	D1CD,,D1c           
         g }t        |d      D ]i  }|j                  d      dvr|j                  |j                  d      xs i j                         D cg c]  \  }}t	        |      r||d c}}       k |j                  d      xs i }t        |dd      }|j                  d      }t        |j                  d	            }	t        |j                  d
            }
|
r
d|v r|
dz  }
n|
s|	}
i d
|
d|j                  d      d|dt        |dd      dt        |dd      dt        |j                  d            dt        |j                  d            d|dt        |j                  d            d|	d|j                  d      dt        |j                  d            dt        |j                  d            d|d | j                  |||d!d!"      d#|j                  d$      S c c}}w )%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   rT   imagenamer<   r:   r=   sub_onlyrN   video_ids              r2   _extract_video_infoz&RoosterTeethBaseIE._extract_video_info/   s]   
!$(>? 	]Eyy (PP !&		, 7 =2DDF\ $+VYJZ   \ ]	] 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..&8PX e / 5
$ JNN8,%
 	
!\s   G3N)__name__
__module____qualname___NETRC_MACHINE	_API_BASEr#   r3   rd        r2   r   r      s"    #N2I k)M%.(
rk   r   c                      e Zd ZdZdi ddddddd	d
dddddddd
dddgdddddddddddd d!d"d#d$d%d&d'd(d)id*d+i dd,dd-d	d.dd/dd.d!d0dd1dddddd2dd3dd4gdd5dd6dd7dd8d#d9d:d;d'd(d)id*d<d=d>d?d@d?d0d1dddAdBdCdDdEdFdGd(d)id*dHi ddIddd	dJddKdddd1ddJddLddMddNddOgddPddQddRddSd!dTd#dUdVdWd'd(d)id*dXi ddYddd	dZdddd[dddd\d!d]ddZdd^dd1ddOd_gdd`ddadd3ddbdcdddedfidggd(d)idhdid)djdkd)djdld)djdmd)djdnd)djdod)djdpd)djgZdqZdr Zds Zyt)uRoosterTeethIEzUhttps?://(?:.+?\.)?roosterteeth\.com/(?:bonus-feature|episode|watch)/(?P<id>[^/?#&]+)zfhttp://roosterteeth.com/episode/million-dollars-but-season-2-million-dollars-but-the-game-announcementr;   9156rB   zFmillion-dollars-but-season-2-million-dollars-but-the-game-announcementextmp4r=   z-Million Dollars, But... The Game AnnouncementrD   z$md5:168a54b40e228e79f4ddb141e89fe4f5	thumbnailzre:^https?://.*\.png$rF   zMillion Dollars, But...rK   r[   z	Game ShowSketchrI   r   rU   publicrL   
   rN   z$00374575-464e-11e7-a302-065410f210c4seasonzSeason 2rJ   z$ffa27d48-464d-11e7-a302-065410f210c4rO   z$92b6bb21-91d2-4b1b-bf95-3268fa0d9939rP      i W3W20160511)rR   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;   rB   r=   rD   rK   rO   rq   ro   rU   rN   rL   rF   rP   rR   rx   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 3rR   i`Qrx   20130204z'Direct m3u8 URL returned HTTP Error 403)r<   rz   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                     | j                  d|d| j                        }| j                  j                  d      j	                  t        d| d| d|i            }|d   |d	   fS )
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         r2   )_extract_brightcove_formats_and_subtitlesz8RoosterTeethIE._extract_brightcove_formats_and_subtitles   s    ''&,HcHc ( e
22?CKKK-j\9]^c]deM   I[ 111rk   c                    | j                  |      }| j                   d| }	 | j                  |dz   |dddi      d   d   }|d   d   }t        |d      dk(  }t        |ddt        hf      }	 | j!                  ||ddd      \  }	}
| j                  ||d      d   d   }||	|
d| j'                  |      S # t        $ r}t	        |j
                  t              r|j
                  j                  d	k(  rg| j                  |j
                  j                  j                         j                         |      j                  d
      du r| j                  | d        d }~ww xY w# t        $ rk}|r]|r[t	        |j
                  t              rA|j
                  j                  d	k(  r(| j#                  d       | j%                  |||      \  }	}
n Y d }~Kd }~ww xY w)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uidrp   m3u8_nativehls)m3u8_idzLDirect m3u8 URL returned HTTP Error 403; retrying with Brightcove extractionz!Downloading episode JSON metadata)rB   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   rd   )r.   r<   rB   api_episode_url
video_datar/   r   is_brightcover   r   r   rK   s               r2   _real_extractz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GY %%Z/11799:<
 %"
 &&w/	
 	
7  	!''9-!''..C2G##AGG$4$4$9$9$;$B$B$DjQUUV^_chh--%,&JKM	  	:aggy+Iaggnn`cNc##bd%)%S%STY[^`h%i" #		s1    B9 0E% 9	E"BEE"%	G.A GGN)re   rf   rg   
_VALID_URL_TESTSr   r   r   rj   rk   r2   rm   rm   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(
rk   rm   c                   `    e Zd ZdZdddddddd	d
dddddddddddddddgZd Zd Zy)RoosterTeethSeriesIEz<https?://(?:.+?\.)?roosterteeth\.com/series/(?P<id>[^/?#&]+)z-https://roosterteeth.com/series/rwby?season=7   zrwby-7zRWBY - Season 7)r;   r=   )r<   playlist_countrz   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_mincountrz   z=https://roosterteeth.com/series/let-s-play-minecraft?season=92   zlet-s-play-minecraft-9zLet's Play Minecraft - Season 9c           
   #      K   t        ||      } fd} j                   j                   d| d|      }t        |dd f      D ]Y  }t        |d      }|||k7  r | j                  t	         j
                  |d   d         |d	| d
ddi            E d {    [ |4 | j                   j                   d| d|dd            E d {    y y 7 =7 w)Nc              3      K   t        | dd f      D ];  } j                  t        d|d   d         t        fi j	                  |       = y w)Nr   c                     |d   d   S )Ncanonical_linksr.   rj   _vs     r2   <lambda>zGRoosterTeethSeriesIE._entries.<locals>.yield_episodes.<locals>.<lambda>D  s    AFWDXY_D` rk   zhttps://www.roosterteeth.comr   r.   )r   
url_resultr   rm   rd   )r   rK   r.   s     r2   yield_episodesz5RoosterTeethSeriesIE._entries.<locals>.yield_episodesC  sh     'v7`.ab I%doo:GDU<VW]<^_"I&*&>&>w&GI IIs   AAz/shows/z/seasons?order=asc&order_byr   c                     |d   d   S )Nlinksepisodesrj   r   s     r2   r   z/RoosterTeethSeriesIE._entries.<locals>.<lambda>K  s    1W:V`Ka rk   )r:   rM   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   ri   )r.   	series_idrI   rB   r   series_dataseason_dataidxs   `       r2   _entrieszRoosterTeethSeriesIE._entries@  s9    "9m<
	I ))!!"')4OPR\^'f>a5bc 	VK{,DEC(SM-A%d&9&9G(<Z(HI:%cU.9*dAS ': 'U V V V		V  %d&9&9%%&gi[8hiFe ': 'U V V V !	V
Vs$   BCC6CCCCc           	         | j                  |      }t        t        |      dt              }t	        | j                  ||            }| j                  |t        ||      t        |d   j                  d      |d            S )N)ru   r   )expected_typer   rF   z
 - Season )delim)	r   r   r   r   r   r   playlist_resultr	   r$   )r.   r<   r   rI   entriess        r2   r   z"RoosterTeethSeriesIE._real_extractX  ss    NN3'	$Xc]MQ\]4==MBC##)]3'!*..2MVX 	Xrk   N)re   rf   rg   r   r   r   r   rj   rk   r2   r   r      s{    PJ>&
 A#&
 A#&
 O*7
+F<V0Xrk   r   N)commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   r   r   utils.traversalr   r   rm   r   rj   rk   r2   <module>r      sT    ! -    +D
 D
NC
' C
L@X- @Xrk   