
    V|hr5                         S SK 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  SSK	J
r
  SSK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   )	HTTPError)ExtractorErrorencode_data_urifilter_dictint_or_nonejwt_decode_hs256url_or_noneurlencode_postdataurljoin)traverse_objc                      \ rS rS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0S.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/S0_S1S2_S3S	_S4S
_SS0S.S50 SS6_SS_S3S	_S4S
_S!S7_SS8_SS9_SS:_S.S;_S+S<_S)S=_S%S>_S/S?_S-S_S1S@_S'SA_S#SB_SS0SC/SDSE.SFSGSH./rSIrSJ/r	S;SSSSSKSKSL.r
SMrSNrSOrSOr\SP 5       r\SQ 5       r\SR 5       rSS rST rSU rSV rSWrgO)X	TenPlayIE   10playzMhttps?://(?:www\.)?10(?:play)?\.com\.au/(?:[^/?#]+/)+(?P<id>tpv\d{6}[a-z]{5})zjhttps://10.com.au/australian-survivor/web-extras/season-10-brains-v-brawn-ii/myless-journey/tpv250414jdmtf7440980000013868mp4zMyles's JourneyzKRelive Myles's epic Brains V Brawn II journey to reach the game's final two
Channel 102199827728001      zre:https://.+/.+\.jpgzAustralian Survivorz	Season 10
   ig20250414)idexttitle	alt_titledescriptionuploaderuploader_id	age_limitduration	thumbnailseriesseasonseason_number	timestampupload_dateskip_downloadm3u8)url	info_dictparamszKhttps://10.com.au/neighbours/episodes/season-42/episode-9107/tpv240902nzqypr   9000000000091177r   r   zNeighbours - S42 Ep. 9107r   z
Thu 05 Sepr    z$md5:37a1f4271be34b9ee2b533426a5fbaefr$   il  episodezEpisode 9107episode_numberi#  r'   z	Season 42r(   *   r&   
Neighboursr%   r#   r)   i$Pfr*   20240905r!   r"   zKhttps://10.com.au/tiny-chef-show/episodes/season-1/episode-2/tpv240228pofvt9000000000084116i  zThe Tiny Chef Show - S1 Ep. 2zS1 Ep. 2 - Popcorn/bananaz$md5:d4758b52b5375dfaa67a78261dcb5763r   zThe Tiny Chef Showr   r   i/h20250522zSeason 1z	Episode 2z3Failed to download m3u8 information: HTTP Error 502zvideo unavailable)r-   r.   r/   expected_warningsskipzohttps://10play.com.au/how-to-stay-married/web-extras/season-1/terrys-talks-ep-1-embracing-change/tpv190915ylupcTr-   only_matchingFAU   )GPGMMAzMA15+RX
token_dataz3(?m)-(?:300|150|75|55)0000-(\d+(?:-[\da-f]+)?)\.ts$Nc                     / nU R                  5        H<  nUR                  S5      (       a  UR                  5         M+  UR                  U5        M>     SR	                  U5      $ )Nz#https://redirector.googlevideo.com/
)
splitlines
startswithpopappendjoin)m3u8_docoutlines      R/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/tenplay.py_filter_ads_from_m3u8TenPlayIE._filter_ads_from_m3u8u   sR    '')DDEE	JJt	 * yy~    c                      [         R                  R                  [         R                  R                  5      R                  S5      n [        R                  " U R                  5       5      R                  5       $ )Nz%Y%m%d%H%M%S)
dtdatetimenowtimezoneutcstrftimebase64	b64encodeencodedecode)tss    rO   !_generate_xnetwork_ten_auth_token+TenPlayIE._generate_xnetwork_ten_auth_token   sG    [[__R[[__-66~F		,3355rR   c                 P    [        U 5      S   [        R                  " 5       -
  S:  $ )Nexpi,  )r   time)tokens    rO   _is_jwt_expiredTenPlayIE._is_jwt_expired   s"    &u-		;cAArR   c                     U R                  SS SSS0[        R                  " U R                  U R                  S.5      R                  5       S9nUS	   U l        US
   U l        U R                  R                  U R                  U R                  U R                  U R                  /5        g ! [         a  n[        UR                  [        5      (       a  UR                  R                  S:X  at  S =U l        U l        U R                  R                  U R                  U R                  S S /5        U R                  S5        U R                   " U R#                  5       6    S nAg e S nAff = f)Nz#https://10.com.au/api/token/refreshzRefreshing access tokenContent-Typeapplication/json)accessTokenrefreshTokenheadersdata  z=Refresh token has been invalidated; retrying with credentialsrj   rk   )_download_jsonjsondumps_access_token_refresh_tokenr\   r   
isinstancecauser   statuscachestore_NETRC_MACHINE_TOKEN_CACHE_KEYreport_warning_perform_login_get_login_info)selfrefresh_dataes      rO   _refresh_access_tokenTenPlayIE._refresh_access_token   s@   	..5t=V"$6

#'#5#5$($7$7$  68 / L  *-8*>:

,,d.C.CdFYFY[_[m[mEno  	!''9--!''..C2G;??#d&8

  !4!4d6K6KdTX\Z##$cd##T%9%9%;<	s   AB, ,
E)6B(E$#E$$E)c                    U R                   (       d>  U R                  R                  U R                  U R                  S S /S9u  U l         U l        U R                   (       a#  U R
                  (       a  U R                  S5        g  U R                  SS SSU R                  5       SS.[        R                  " UUS.5      R                  5       S	9nUS   S   U l         US   S   U l        U R                  R#                  U R                  U R                  U R                   U R
                  /5        g ! [         aI  n[        UR                  [        5      (       a$  UR                  R                   S
:X  a
  [        SSS9ee S nAff = f)N)defaultzUsing cached refresh tokenzhttps://10.com.au/api/user/authz
Logging inri   zhttps://10.com.au/)rh   zX-Network-Ten-AuthReferer)emailpasswordrl   ro   zInvalid username/passwordT)expectedjwtrk   rj   )rt   rx   loadrz   r{   rs   write_debugrp   r_   rq   rr   r\   r   ru   rv   r   rw   ry   )r   usernamer   	auth_datar   s        rO   r}   TenPlayIE._perform_login   s`   ""6:jjoo##T%:%:T4L 7F 7R3D!34#5#59:	++14$6*.*P*P*R3 

% ($  68 , 	I (.~>&u-m<

,,d.C.CdFYFY[_[m[mEno  	!''9--!''..C2G$%@4PP	s   A
D1 1
F;AE??Fc                    U R                   (       a0  U R                  U R                   5      (       a  U R                  5         S HI  n U R                  SU S3USSS0[	        SU R                   (       a  SU R                    3OS S	.5      S
9s  $    g ! [
         a  nU(       d  [        UR                  [        5      (       az  UR                  R                  S:X  a`  U R                   (       a'  U R                  S5        U R                  5          S nAM  U R                  5       S   (       d  U R                  SSS9  e S nAff = f)N)FTz)https://10.com.au/api/v1/videos/playback//zDownloading video JSONplatformsamsungzv1/fw;v1/drmzBearer )zTP-AcceptFeatureAuthorization)notequeryrm     z$Access token has expired; refreshingr   z#Login required to access this videor   )method)rs   re   r   _download_json_handler	   r   ru   rv   r   rw   	to_screenr~   raise_login_required)r   
content_idis_retryr   s       rO   _call_playback_apiTenPlayIE._call_playback_api   s   $"6"6t7I7I"J"J&&(%H11?
|1Mz1*i9P',:KOK]K]743E3E2F)Gcg)  2   & " Jqww	$B$Bqww~~Y\G\))'MN224 !113A6112W`j1ks    AB
EA2D=)D==Ec                    U R                  U5      n U R                  SU 3U5      nU R                  U5      u  pVUS   S   nUS   S   nUR                  S5      n	U	(       d  [        S	5      eU R                  S
U SU S3US[        SU	05      S9n
U R                  U
S   US5      u  pSnU HE  nU R!                  US   USS9nU R#                  U5      nXS'   UR%                  S5      S:X  d  MC  SnMG     U(       d  W(       a  [&        R(                  " U R*                  U5      (       al  [&        R,                  " U R*                  SU5      n[&        R,                  " SSU5      nUR/                  S[1        UR3                  5       S5      USSSS SS!.5        UU[5        UR%                  S"5      5      (       a
  S#SUS"   0/0OS S$S%S&.[7        US'[8        14S([:        14S)[8        14S*[8        14S+[8        14S,U R<                  R$                  14S-[8        14S.[:        14S/[:        14S0[:        14S1[4        14S2.5      E$ ! [         a  n[        UR                  [
        5      (       ai  UR                  R                  S:X  aO  SUR                  R                  R                  5       R                  5       ;   a  U R                  U R                  S9  e S nAff = f)3Nz https://10.com.au/api/v1/videos/r   zError 54113)	countriesdaicontentSourceIdvideoIdz
x-dai-authzFailed to get DAI auth tokenz6https://pubads.g.doubleclick.net/ondemand/hls/content/z/vid/z/streamszDownloading DAI JSONz
auth-token)r   rn   stream_manifestr   Fr-   zDownloading m3u8 information)r   hls_media_playlist_dataheighti8  Tz-5000000-\1.tsz-(?:300|150|75|55)0000\.key"z-5000000.key"zupgrade-attempt-1080pzapplication/x-mpegurli  m3u8_native)	format_idr-   r   widthr   r   protocol__needs_testing
captionUrlenr   r   )r   formats	subtitlesr!   r"   altIdr$   subtitler   r    classificationtvShowr'   r1   	publishedimageUrl)r   r$   r   r   r    r#   r&   r(   r2   r)   r%   )	_match_idrp   r   ru   rv   r   rw   responsereadr]   raise_geo_restricted_GEO_COUNTRIESr   
get_headerr   #_extract_m3u8_formats_and_subtitles_download_webpagerP   getresearch_SEGMENT_BITRATE_REsubrJ   r   r\   r   r   strr
   	_AUS_AGES)r   r-   r   rn   r   
video_dataurlhcontent_source_idvideo_id
auth_tokendai_datar   _already_have_1080pfmtrL   s                   rO   _real_extractTenPlayIE._real_extract   s   ^^C(
	&&)I*'VXbcD  22:>
&u-.?@e$Y/__\2
 !?@@&&DEVDWW\]e\ffno3#\:$>? ' A ==&'U<
 #C--E
J-K . MH11(;H-5)*wwx D(%)"  "h299T=U=UW_3`3`vvd668I8THvv=?OQYZHNN4&x'8:QR+3)#'	 	 BMdhhWcNdBeBe$%l);!< =>ko$*
 4&'+7$se,%u- -u5.1C1C0DE#cU+"*[M!:#,{m"<)K=9(;-8" 
 	
a  	177I..177>>S3H!QWW%5%5%:%:%<%C%C%EE))D4G4G)H	s   H= =
KB	KK)rs   rt   )__name__
__module____qualname____firstlineno__IE_NAME
_VALID_URLrz   _TESTS_GEO_BYPASSr   r   r{   r   rt   rs   staticmethodrP   r_   re   r   r}   r   r   __static_attributes__ rR   rO   r   r      s   GaJN |$'+j$*1+!#%
" #F+). ]
$
5
 0
 	

 A
 
 ~
 d
 k
 R
 l
 1
 
 
 :
  !
" ?#
& #F+-2 ]
$
5
 
 ?	

 
 4
 4
 A
 
 *
 Q
 a
 
 1
 :
  j!
" {#
& #F+ST#14 AKHFR KVNI $PNM  6 6 B Bp,p8,G
rR   r   c                   X    \ rS rSrSrSrSSSS.SS	.S
SSS.SS	.SSS./rSS jrS rSr	g)TenPlaySeasonIEi  z10play:seasonzbhttps?://(?:www\.)?10(?:play)?\.com\.au/(?P<show>[^/?#]+)/episodes/(?P<season>[^/?#]+)/?(?:$|[?#])z/https://10.com.au/masterchef/episodes/season-15z	Season 15zMTQ2NjMxOQ==)r   r   2   )r-   r.   playlist_mincountzNhttps://10.com.au/the-bold-and-the-beautiful-fast-tracked/episodes/season-2024zSeason 2024Mjc0OTIw   zRhttps://10play.com.au/the-bold-and-the-beautiful-fast-tracked/episodes/season-2024Tr:   Nc              #      #    / n[         R                  " S5       HR  nU R                  XSU0SU 3S9nUS   nUR                  S U 5       5        U H
  nUS   v   M     US   (       a  MR    g    g 7f)	Nr   z	skipIds[]zFetching episodes page )r   r   itemsc              3   *   #    U  H	  oS    v   M     g7f)r   Nr   ).0eps     rO   	<genexpr>+TenPlaySeasonIE._entries.<locals>.<genexpr>9  s     >~tH~s   cardLinkhasMore)	itertoolscountrp   extend)r   load_more_url
display_idskip_idspageepisodes_carouselepisodes_chunkr   s           rO   _entriesTenPlaySeasonIE._entries1  s     OOA&D $ 3 3+x1H.tf5 !4 !7 /w7NOO>~>>$n$ %$Y// 's   A'A2-A2c                 d   U R                  U5      R                  SS5      u  p#U R                  SU SU 3U SU 35      n[        USSSS	 S
[        1444SS9=(       d    0 nUS   nU R                  U R                  [        XS   5      U5      U[        USSS[        145      [        U5      S9$ )Nshowr'   zhttps://10.com.au/api/shows/z
/episodes/r   contentr   
componentsc                 .    US   R                  5       S:H  $ )Nr   episodes)lower)r   vs     rO   <lambda>/TenPlaySeasonIE._real_extract.<locals>.<lambda>G  s    QwZ--/:=rR   .F)get_alltpIdloadMoreUrlr   )getter)	_match_valid_urlgrouprp   r   dictplaylist_from_matchesr   r   r   )r   r-   r   r'   season_infor   playlist_ids          rO   r   TenPlaySeasonIE._real_extract@  s    ,,S177I))*4&
6(CvQvhEWY )q,=tf)7 	 % #%	 	 (/))MM'#'GH+VkIq'C53QR3< * ! 	!rR   r   )N)
r   r   r   r   r   r   r   r   r   r   r   rR   rO   r   r     s^    GvJ@  
   `"
 ! dF&!rR   r   )rZ   rU   rT   r   rq   r   rc   commonr   networking.exceptionsr   utilsr   r   r	   r
   r   r   r   r   utils.traversalr   r   r   r   rR   rO   <module>r     sL        	  ! -	 	 	 +A
 A
H5!m 5!rR   