a
    h/                     @   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 )MTVServicesBaseIEFZUSZmtvservicesaccessZrefreshZmediac                 C   s   t | d t  dk S )Nexpx   )r
   time)token r   I/mnt/pikpak/tmp/myenv/lib/python3.9/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| ||pTd	||i | ||pji 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}|s4|r4| |s4|S | j|vrT| 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
resourceIdZaccessTokenzRetrieving auth tokens    )r'   zaccessToken/refreshzRefreshing auth tokensZrefreshTokenAuthorizationBearer r'   r(   ZapplicationAccessTokenZdeviceRefreshToken)	_token_cacheget_ACCESS_TOKEN_KEYr   _REFRESH_TOKEN_KEYr3   cachestore_CACHE_SECTION)r0   r   r2   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|p0i  }| j |< || j}|rZ| |sZ|S | ||}t|ds| 	d}|st
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 )'Nr4   ZaccessMethodsZ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$   ZcallbackURL)ZauthSuiteDataZmvpdCodezmvpd/z/loginz&Retrieving provider authentication URLZcallbackUrlr6   r7   r)   r(   ZauthenticationUrlzDownloading provider auth pagezinitInterstitialRedirect\(r   zredirect JSON)Ztransform_sourcecontinuez!Requesting provider redirect pageZauthorizationCodezaccess/mvpd/z-Submitting authorization code to MTVNServicesr5   )r)   r'   r(   )r@   Z
mediaTokenzFetching media tokenc                 S   s"   i | ]\}}|d krdn||qS )ZvideoIdidr   ).0kvr   r   r   
<dictcomp>   r5   z6MTVServicesBaseIE._get_media_token.<locals>.<dictcomp>)contentr4   r8   )r9   r=   loadr?   r:   _MEDIA_TOKEN_KEYr   rE   r
   	get_paramr   r,   r-   r   r.   r   urllibparsequotebase64	b64encodedecoder3   Z_download_webpage_handleZ_search_jsonr	   Z_request_webpager   urlitemsr>   )r0   video_configr   r2   rA   rB   Zmedia_tokenrC   Zmso_idZauth_suite_dataZcallback_urlZauth_urlresZredirect_urlZurlhZauthorization_coder   r   r   _get_media_tokenT   sr    





z"MTVServicesBaseIE._get_media_tokenc                 C   s  |  |}z | jt|d d|ddid}W n\ ty } zDt|jtrp|jjdkrp| |jj	j
sp| j| jd  W Y d }~n
d }~0 0 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}	|	sHt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)   r,   truei  )Z	countrieschildrenc                 S   s   |d dkS )NtypeZMainContainerr   _rN   r   r   r   <lambda>   r5   z1MTVServicesBaseIE._real_extract.<locals>.<lambda>c                 S   s   |d dkS )Nra   ZAviaWrapperr   rb   r   r   r   rd      r5   c                 S   s   |d dkS )Nra   ZFlexWrapperr   rb   r   r   r   rd      r5   c                 S   s   |d dkS Nra   ZAuthSuiteWrapperr   rb   r   r   r   rd      r5   c                 S   s   |d dkS )Nra   ZPlayerr   rb   r   r   r   rd      r5   propsZvideoDetail.)ZhandleTVEAuthRedirectionNzvideo detailmgidr#   r   ZvideoServiceUrlz#This content is no longer availableTrF   ZauthRequiredc                 S   s   |d dkS re   r   rb   r   r   r   rd      r5   ZvideoConfigzvideo configZauthSuiteConfigzauth suite configzX-VIA-TVE-MEDIATOKENzDownloading API JSONzUnable to download API JSONZclientPlatformZdesktoprH   ZstitchedstreamZmanifesttypeZhlssourcemp4)Zm3u8_idZdash)Zmpd_idzUnsupported manifest type ""titlechannelnameZimagesrZ   )ZfullDescriptiondescriptionZparentEntityZseasonNumberZepisodeAiringOrderdurationZmillisecondsi  )ZscaleZoriginalPublishDateZpublishDate	timestampZoriginalAirDateZairDate)
rk   rl   Z
thumbnailsrn   seriesseason_numberepisode_numberro   rp   release_timestamp)rK   r2   formats	subtitles)Z	_match_idr/   r   r   r*   causer   statusZsuitablerD   rZ   Zraise_geo_restricted_GEO_COUNTRIESr   r+   anyr   
rpartitionr   r:   r^   Z#_extract_m3u8_formats_and_subtitlesZ"_extract_mpd_formats_and_subtitlesZraise_no_formatsr   r   r   r   )r0   rZ   r2   r'   eZflex_wrapperZvideo_detailrg   Zvideo_idZservice_urlr(   r\   r   Zstream_infoZmanifest_typeru   rv   r   r   r   _real_extract   s    

(









zMTVServicesBaseIE._real_extract)NNNNN)NF)N)__name__
__module____qualname__Z_GEO_BYPASSry   r?   r;   r<   rR   r9   staticmethodr   r   r3   rE   r^   r}   r   r   r   r   r      s   




9r   c                   @   sz   e 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didddddddddd
dddd d!d"d#d"d#d$ddidgZd%S )&MTVIEZmtvzGhttps?://(?:www\.)?mtv\.com/(?:video-clips|episodes)/(?P<id>[\da-z]{6})z&https://www.mtv.com/video-clips/syolsjz$213ea7f8-bac7-4a43-8cd5-8d8cb8c8160fri   Zsyolsjz!The Challenge: Vets & New Threatsz$md5:c4d2e90a5fff6463740fbf96b2bb6a41g     W@z=re:https://images\.paramount\.tech/uri/mgid:arc:imageassetrefzThe Challengez	Season 41)   z	Episode 0r   iphZ20250731)rK   extr2   rk   rn   ro   	thumbnailrq   seasonrr   episoders   rp   upload_datert   release_dateZskip_downloadZm3u8)rZ   Z	info_dictparamsz#https://www.mtv.com/episodes/uzvighz$364e8b9e-e415-11ef-b405-16fff45bc035Zuzvighz CT Tamburello and Johnny Bananasz$md5:364cea52001e9c13f92784e3365c6606ZMTVg     @ZRidiculousnessz	Season 47/   z
Episode 19   ihZ20250724)rK   r   r2   rk   rn   rl   ro   r   rq   r   rr   r   rs   rp   r   rt   r   N)r~   r   r   ZIE_NAMEZ
_VALID_URLZ_TESTSr   r   r   r   r      sX   r   )rW   r,   r   urllib.parserT   commonr   Znetworking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   r   Zutils.traversalr   r   r   r   r   r   r   r   <module>   s   0 H