o
    ir5                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZ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 ddlmZ G dd	 d	eZG d
d deZdS )    N   )InfoExtractor   )	HTTPError)ExtractorErrorencode_data_urifilter_dictint_or_nonejwt_decode_hs256url_or_noneurlencode_postdataurljoin)traverse_objc                   @   s  e Zd ZdZdZdZ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 d!d"d#d$d%d&d'd(d)d*d+d,dd-d
d.d/d0d1d2dd3d	ddidd4i dd5ddd2dd3d	d d6dd7dd8dd9d-d:d*d;d(d<d$d=d.d>d,dd0d?d&d@d"dAddidBgdCdDdEdFdGgZdHZdIgZd:d
d
d
d
dJdJdKZ	dLZ
dMZdNZdNZedOdP ZedQdR ZedSdT ZdUdV ZdWdX ZdYdZ Zd[d\ ZdNS )]	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                 C   s:   g }|   D ]}|dr|  q|| qd|S )Nz#https://redirector.googlevideo.com/
)
splitlines
startswithpopappendjoin)m3u8_docoutline rK   L/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/tenplay.py_filter_ads_from_m3u8u   s   

zTenPlayIE._filter_ads_from_m3u8c                  C   s(   t jt jjd} t|  	 S )Nz%Y%m%d%H%M%S)
dtdatetimenowtimezoneutcstrftimebase64	b64encodeencodedecode)tsrK   rK   rL   !_generate_xnetwork_ten_auth_token   s   z+TenPlayIE._generate_xnetwork_ten_auth_tokenc                 C   s   t | d t  dk S )Nexpi,  )r
   time)tokenrK   rK   rL   _is_jwt_expired   s   zTenPlayIE._is_jwt_expiredc              
   C   s   z| j dd dddit| j| jd d}W n> tyV } z2t|jt	rQ|jj
dkrQd  | _| _| j| j| jd d g | d | j|    W Y d }~d S  d }~ww |d	 | _|d
 | _| j| j| j| j| jg d S )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 credentialsr`   ra   )_download_jsonjsondumps_access_token_refresh_tokenrV   r   
isinstancecauser   statuscachestore_NETRC_MACHINE_TOKEN_CACHE_KEYreport_warning_perform_login_get_login_info)selfrefresh_dataerK   rK   rL   _refresh_access_token   s0   



 zTenPlayIE._refresh_access_tokenc              
   C   s   | j s| jj| j| jd d gd\| _ | _| j r!| jr!| d d S z| jdd dd|  ddt	
||d d	}W n tyZ } zt|jtrU|jjd
krUtddd d }~ww |d d | _ |d d | _| j| j| j| j | jg d S )N)defaultzUsing cached refresh tokenzhttps://10.com.au/api/user/authz
Logging inr_   zhttps://10.com.au/)r^   zX-Network-Ten-AuthReferer)emailpasswordrb   re   zInvalid username/passwordT)expectedjwtra   r`   )rj   rn   loadrp   rq   ri   write_debugrf   rY   rg   rh   rV   r   rk   rl   r   rm   ro   )ru   usernamer|   	auth_datarw   rK   rK   rL   rs      s:   


 zTenPlayIE._perform_loginc                 C   s   | j r| | j r|   dD ]]}z!| jd| d|ddditd| j r)d| j  nd d	d
W   S  tyl } z.|sgt|jtrg|jj	dkrg| j rZ| 
d |   W Y d }~q|  d sg| jddd  d }~ww d S )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queryrc     z$Access token has expired; refreshingr   z#Login required to access this videor|   )method)ri   r]   rx   _download_json_handler   r   rk   rl   r   rm   	to_screenrt   raise_login_required)ru   
content_idis_retryrw   rK   rK   rL   _call_playback_api   s0   
zTenPlayIE._call_playback_apic                 C   s(  |  |}z| d| |}W n* ty: } zt|jtr5|jjdkr5d|jj 	 v r5| j
| jd  d }~ww | |\}}|d d }|d d }|d}	|	sYtd	| jd
| d| d|dtd|	id}
| |
d |d\}}d}|D ]}| j|d |dd}| |}||d< |ddkrd}q||s|rt| j|rt| jd|}tdd|}|dt| d|dddd dd! ||t|d"rd#d|d" igind d$d%d&t|d'thfd(thfd)thfd*thfd+thfd,| jjhfd-thfd.thfd/thfd0thfd1thfd2S )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   rd   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$   r.   	publishedimageUrl)r   r!   r   r   r   r    r#   r%   r/   r&   r"   )	_match_idrf   r   rk   rl   r   rm   responsereadrW   raise_geo_restricted_GEO_COUNTRIESr   
get_headerr   #_extract_m3u8_formats_and_subtitles_download_webpagerM   getresearch_SEGMENT_BITRATE_REsubrF   r   rV   r   r   strr	   	_AUS_AGES)ru   r*   r   rd   rw   
video_dataurlhcontent_source_idvideo_id
auth_tokendai_datar   _already_have_1080pfmtrH   rK   rK   rL   _real_extract   s   






"zTenPlayIE._real_extract)__name__
__module____qualname__IE_NAME
_VALID_URLrp   _TESTS_GEO_BYPASSr   r   rq   r   rj   ri   staticmethodrM   rY   r]   rx   rs   r   r   rK   rK   rK   rL   r      s   	
	
I	



r   c                   @   sR   e Zd ZdZdZddddddd	d
dddddddgZdddZdd ZdS )TenPlaySeasonIEz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-2024Tr7   Nc                 c   st    g }t dD ]/}| j||d|id| d}|d }|dd |D  |D ]}|d V  q(|d	 s7 d S qd S )
Nr   z	skipIds[]zFetching episodes page )r   r   itemsc                 s   s    | ]}|d  V  qdS )r   NrK   ).0eprK   rK   rL   	<genexpr>9  s    z+TenPlaySeasonIE._entries.<locals>.<genexpr>cardLinkhasMore)	itertoolscountrf   extend)ru   load_more_url
display_idskip_idspageepisodes_carouselepisodes_chunkr   rK   rK   rL   _entries1  s   
zTenPlaySeasonIE._entriesc              	   C   s   |  |dd\}}| d| d| | d| }t|dddd	d
 dthfffddp/i }|d }| j| t||d ||t|dddthft|dS )Nshowr$   zhttps://10.com.au/api/shows/z
/episodes/r   contentr   
componentsc                 S   s   |d   dkS )Nr   episodes)lower)r   vrK   rK   rL   <lambda>G  s    z/TenPlaySeasonIE._real_extract.<locals>.<lambda>.F)get_alltpIdloadMoreUrlr   )getter)	_match_valid_urlgrouprf   r   dictplaylist_from_matchesr   r   r   )ru   r*   r   r$   season_infor   playlist_idrK   rK   rL   r   @  s(   zTenPlaySeasonIE._real_extract)N)r   r   r   r   r   r   r   r   rK   rK   rK   rL   r     s*    
r   )rT   rO   rN   r   rg   r   r[   commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   utils.traversalr   r   r   rK   rK   rK   rL   <module>   s    (
  