Ë
    š„jŒ=  ã                   óž   — 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          úT/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/roosterteeth.pyÚ_perform_loginz!RoosterTeethBaseIE._perform_login   s  € Ø×Ñ˜T×/Ñ/Ó0×4Ñ4Ð5FÔGØð	%Ø×ÑØ;Ø�lÔ);Ø!cØ",Ø (Ø (ñ	=ó *ð  õ øô ò 	%Ø#ˆCÜ˜!Ÿ'™'¤9Ô-°!·'±'·.±.ÀCÒ2GØ×'Ñ'¨¯©×(8Ñ(8×(=Ñ(=Ó(?×(FÑ(FÓ(HÈ$ÐV[Ð'Ó\�ÙØ ŸH™H \Ó2Òh°d·h±hÐ?RÓ6SÒhÐW[×W_ÑW_Ð`gÓWh�EÙØ˜t e™|Ñ+˜Ø×Ñ ×$Ñ$ûð	%ú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Ø�y‰y˜Ó Ð(PÑPØØ×Ñð !&§	¡	¨,Ó 7Ò =¸2×DÑDÓF÷\ñ �$˜Ì+ÐVYÔJZð Øó ó \õ ]ð	]ð —X‘X˜lÓ+Ò1¨rˆ
Ü˜Z¨°/ÓBˆØ—>‘>Ð"4Ó5ˆä  §¡¨&Ó!1Ó2ˆ
Ü˜tŸx™x¨›~Ó.ˆÙÐ+¨zÑ9Ø˜Ñ ‰HÙØ!ˆHð
Ø�(ð
à˜*Ÿ.™.¨Ó0ð
ð �Uð
ð œ<¨
°MÀ9ÓMð	
ð
 ”l :¨|Ð=SÓTð
ð œ[¨¯©¸Ó)HÓIð
ð œ Z§^¡^°KÓ%@ÓAð
ð �uð
ð œk¨*¯.©.¸Ó*BÓCð
ð ˜*ð
ð ˜*Ÿ.™.¨Ó6ð
ð œ J§N¡N°8Ó$<Ó=ð
ð  ¤¨z¯~©~Ð>QÓ/RÓ!Sð
ð ˜*ð
ð ˜D×.Ñ.Ø&¸8ÐPXØ ¨eð /ó 5ð
ð$ �J—N‘N 8Ó,ð%
ð 	
ùó!\s   ÁG3N)Ú__name__Ú
__module__Ú__qualname__Ú_NETRC_MACHINEÚ	_API_BASEr#   r3   rd   © ó    r2   r   r      s"   „ Ø#€NØ2€IØ �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-63d7c0267720é7   ÚRWBYéÿ   ip&âYÚ20171014)r;   rB   r=   rD   rK   rO   rq   ro   rU   rN   rL   rF   rP   rR   rx   z¢https://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:91bb934698344fb9647b1c7351f16964éG   z$ffaec998-464d-11e7-a302-065410f210c4zSeason 2008ÚGamingzAchievement Hunterz$md5:4465ce4f001735f9d7a2ae529a543d31z$ffa13340-464d-11e7-a302-065410f210c4iØ  z$2cb2a70c-be50-46f5-93d7-84a1baabb4f7é½   it¢6IÚ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-betterz„http://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�   € Ø×'Ñ'Ø&¨°,È×HcÑHcð (ó eˆ
à×Ñ×2Ñ2°?ÓC×KÑKÌKØ-¨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ˆð		Ø×,Ñ,Ø )Ñ+¨ZÐ9ZØ&¨Ð.ð -ó 0à06ñ8à89ñ;ˆJð ˜lÑ+¨EÑ2ˆÜ$ ZÐ1TÓUÐYeÑeˆÜ˜Z¨,¸Ä¸uÐ)EÓFˆð		Ø!%×!IÑ!IØ˜* e¨]ÀEð "Jó "KÑˆG�Yð ×%Ñ%Ø˜ZØ/ó1à17ñ9à9:ñ<ˆð
 %ØØ"ñ
ð ×&Ñ& wÓ/ð	
ð 	
øô7 ò 	Ü˜!Ÿ'™'¤9Ô-°!·'±'·.±.ÀCÒ2GØ×#Ñ# A§G¡G×$4Ñ$4×$9Ñ$9Ó$;×$BÑ$BÓ$DÀjÓQ×UÑUÐV^Ó_ÐchÑhØ×-Ñ-Ø%˜,Ð&JÐKôMàûð	ûô ò 	Ù¡¬:°a·g±g¼yÔ+IÈaÏgÉgÏnÉnÐ`cÒNcØ×#Ñ#Øbôdà%)×%SÑ%SÐTYÐ[^Ð`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µ  „ Øi€Jà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ð
ð �X�Jð
ð Ð*ð
ð Ð@ð
ð Ð?ð
ð ˜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=9é2   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   € ÀAÐFWÑDXÐY_Ñ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   øè ø€ Ü'¨¨vÑ7`Ð.aÓbò I�Ø%�d—o‘oÜÐ:¸GÐDUÑ<VÐW]Ñ<^Ó_Ü"ñ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   € È1ÈWÉ:Ð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  øè ø€ Ü" 9¨mÓ<ˆ
ô	Ið ×)Ñ)Ø×!Ñ!Ð" '¨)¨Ð4OÐPÐR\ó^ˆä'¨°fÑ>aÐ5bÓcò 	VˆKÜ˜{Ð,DÓEˆCØÐ(¨S°MÒ-AØÙ% d×&9Ñ&9Ü˜Ÿ™¨°GÑ(<¸ZÑ(HÓIÈ:Ø% c U¨.Ð9À*ÈdÐASð ':ó 'Uó V÷ Vñ Vð		Vð Ð Ù% d×&9Ñ&9Ø×%Ñ%Ð& g¨i¨[Ð8hÐiØÐFÈeð ':ó '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   € Ø—N‘N 3Ó'ˆ	Ü$¤X¨c£]°MÔQ\Ô]ˆä˜4Ÿ=™=¨°MÓBÓCˆØ×#Ñ#ØÜ˜) ]Ó3Ü˜' !™*Ÿ.™.¨Ó2°MÈÔVóXð 	Xrk   N)re   rf   rg   r³   r´   rÐ   r²   rj   rk   r2   r¶   r¶      s{   „ ØP€Jà>ØàØ&ñ
ñð 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   