o
    i/                     @   s   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mZmZ ddlmZmZ G dd	 d	eZG d
d deZdS )    N   )InfoExtractor   )	HTTPError)
ExtractorErrorfloat_or_noneint_or_none
js_to_jsonjwt_decode_hs256parse_iso8601parse_qs
update_urlupdate_url_queryurl_or_none)requiretraverse_objc                   @   sh   e Zd ZdZdgZdZdZdZdZi Z	e
dd Ze
d	d
 ZdddZdddZdddZdd ZdS )MTVServicesBaseIEFUSmtvservicesaccessrefreshmediac                 C   s   t | d t  dk S )Nexpx   )r
   time)token r   H/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/mtv.py_jwt_is_expired    s   z!MTVServicesBaseIE._jwt_is_expiredc                 C   s   t | dthfdthfdS )NclientIdcountryCode)r   r    )r   str)configr   r   r   _get_auth_suite_data$   s   z&MTVServicesBaseIE._get_auth_suite_dataNc              
   C   sr   dddd|pi }|d ur d|d< t |tr tj|dd }| jd| ||p*d	||i | ||p5i d
S )Nzapplication/jsonzCdeviceName=Chrome Windows;deviceType=desktop;system=Windows NT 10.0z
2025-07-09)AcceptzClient-DescriptionzApi-VersionzContent-Type,:
separatorszhttps://auth.mtvnservices.com/zCalling authentication API)notedataheadersquery)
isinstancedictjsondumpsencode_download_jsonr#   )selfpathr"   
display_idr*   r+   r,   r-   r   r   r   _call_auth_api+   s   

z MTVServicesBaseIE._call_auth_apic              	   C   s   |d }| j | }|| j}|s|r| |s|S | j|vr*| jd||ddd}n| jd||dd|| j id	d
| id}|d || j< |d || j< | j| j|| || j S )N
resourceIdaccessTokenzRetrieving auth tokens    )r+   zaccessToken/refreshzRefreshing auth tokensrefreshTokenAuthorizationBearer r+   r,   applicationAccessTokendeviceRefreshToken)	_token_cacheget_ACCESS_TOKEN_KEYr   _REFRESH_TOKEN_KEYr7   cachestore_CACHE_SECTION)r4   r"   r6   force_refreshresource_idtokensaccess_tokenresponser   r   r   _get_fresh_access_token<   s$   



z)MTVServicesBaseIE._get_fresh_access_tokenc              
   C   s  |d }|| j v r| j | }n| j| j|pi  }| j |< || j}|r-| |s-|S | ||}t|ds| 	d}|sGt
dddtj| |dd }	t|d	 tjt|	 |d
}
| jd| d||dd|
idd| idd }| ||d}| jd|d d|tdd }| ||d}t|jd d }| jd| ||dd|iddd| id | j||dd }| jd!||d"d#d$ | D |d%dd| id&d! || j< | j| j|| || j S )'Nr8   accessMethodsap_msozThis video is only available for users of participating TV providers. Use --ap-mso to specify Adobe Pass Multiple-system operator Identifier and pass cookies from a browser session where you are signed-in to your provider.Texpectedr%   r(   callbackURL)authSuiteDatamvpdCodezmvpd/z/loginz&Retrieving provider authentication URLcallbackUrlr<   r=   r-   r,   authenticationUrlzDownloading provider auth pagezinitInterstitialRedirect\(r   zredirect JSON)transform_sourcecontinuez!Requesting provider redirect pageauthorizationCodezaccess/mvpd/z-Submitting authorization code to MTVNServicesr:   )r-   r+   r,   )rH   
mediaTokenzFetching media tokenc                 S   s"   i | ]\}}|d krdn||qS )videoIdidr   ).0kvr   r   r   
<dictcomp>   s   " z6MTVServicesBaseIE._get_media_token.<locals>.<dictcomp>)contentr8   r>   )rA   rE   loadrG   rB   _MEDIA_TOKEN_KEYr   rM   r
   	get_paramr   r0   r1   r#   r2   r   urllibparsequotebase64	b64encodedecoder7   _download_webpage_handle_search_jsonr	   _request_webpager   urlitemsrF   )r4   video_configr"   r6   rI   rJ   media_tokenrK   mso_idauth_suite_datacallback_urlauth_urlresredirect_urlurlhauthorization_coder   r   r   _get_media_tokenT   sv   





z"MTVServicesBaseIE._get_media_tokenc                 C   s  |  |}z| jt|d d|ddid}W n( ty= } zt|jtr8|jjdkr8| |jj	j
s8| j| jd  d }~ww t|ddd d dd	d ffdd
d thtf}t|d ddd ffddd ddthtf}|s|t|ddddthttdhf}|d }|dd }t|dthtd dhf}	|	stdddi }
|drt|ddd ddthttdhf}t|ddthtdhf}| ||||
d< | j|	|d d!d"d#i|
d$d% }|d& }|d'kr| j|d( |d)|d*\}}n |d+kr| j|d( ||d,\}}n| d-| d. g i }}i t|d/thfd0d1thfd2dd3d3thfifd4thtfd5d/thfd6thfd7thfd8d9td:d;hfd<thfd=d>thfftfd?thfd@d>thfftfdA
||||dBS )CN)r-   r0   truei  )	countrieschildrenc                 S      |d dkS )NtypeMainContainerr   _ra   r   r   r   <lambda>       z1MTVServicesBaseIE._real_extract.<locals>.<lambda>c                 S   r   )Nr   AviaWrapperr   r   r   r   r   r      r   c                 S   r   )Nr   FlexWrapperr   r   r   r   r   r      r   c                 S   r   Nr   AuthSuiteWrapperr   r   r   r   r   r      r   c                 S   r   )Nr   Playerr   r   r   r   r   r      r   propsvideoDetail.)handleTVEAuthRedirectionNzvideo detailmgidr'   r   videoServiceUrlz#This content is no longer availableTrP   authRequiredc                 S   r   r   r   r   r   r   r   r      r   videoConfigzvideo configauthSuiteConfigzauth suite configzX-VIA-TVE-MEDIATOKENzDownloading API JSONzUnable to download API JSONclientPlatformdesktoprV   stitchedstreammanifesttypehlssourcemp4)m3u8_iddash)mpd_idzUnsupported manifest type ""titlechannelnameimagesrp   )fullDescriptiondescriptionparentEntityseasonNumberepisodeAiringOrderdurationmillisecondsi  )scaleoriginalPublishDatepublishDate	timestamporiginalAirDateairDate)
r   r   
thumbnailsr   seriesseason_numberepisode_numberr   r   release_timestamp)r^   r6   formats	subtitles)	_match_idr3   r   r   r.   causer   statussuitablerL   rp   raise_geo_restricted_GEO_COUNTRIESr   r/   anyr   
rpartitionr   rB   r|   #_extract_m3u8_formats_and_subtitles"_extract_mpd_formats_and_subtitlesraise_no_formatsr!   r   r   r   )r4   rp   r6   r+   eflex_wrappervideo_detailr   video_idservice_urlr,   rr   r"   stream_infomanifest_typer   r   r   r   r   _real_extract   s   

(









zMTVServicesBaseIE._real_extract)NNNNN)NF)N)__name__
__module____qualname___GEO_BYPASSr   rG   rC   rD   re   rA   staticmethodr   r#   r7   rM   r|   r   r   r   r   r   r      s     




9r   c                   @   s   e Zd 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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d0dd1dd2dd3d d2d!d3d"d#id$gZd4S )5MTVIEmtvzGhttps?://(?:www\.)?mtv\.com/(?:video-clips|episodes)/(?P<id>[\da-z]{6})z&https://www.mtv.com/video-clips/syolsjr^   z$213ea7f8-bac7-4a43-8cd5-8d8cb8c8160fextr   r6   syolsjr   z!The Challenge: Vets & New Threatsr   z$md5:c4d2e90a5fff6463740fbf96b2bb6a41r   g     W@	thumbnailz=re:https://images\.paramount\.tech/uri/mgid:arc:imageassetrefr   zThe Challengeseasonz	Season 41r   )   episodez	Episode 0r   r   r   iphupload_date20250731r   release_dateskip_downloadm3u8)rp   	info_dictparamsz#https://www.mtv.com/episodes/uzvighz$364e8b9e-e415-11ef-b405-16fff45bc035uzvighz CT Tamburello and Johnny Bananasz$md5:364cea52001e9c13f92784e3365c6606r   MTVg     @Ridiculousnessz	Season 47/   z
Episode 19   ih20250724N)r   r   r   IE_NAME
_VALID_URL_TESTSr   r   r   r   r      s    	
	
r   )rj   r0   r   urllib.parserg   commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   r   utils.traversalr   r   r   r   r   r   r   r   <module>   s    0 H