
    uki/                         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	e      Z G d
 de      Zy)    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                   h    e Zd ZdZdgZdZdZdZdZi Z	e
d        Ze
d        Zdd
ZddZddZd Zy	)MTVServicesBaseIEFUSmtvservicesaccessrefreshmediac                 N    t        |       d   t        j                         z
  dk  S )Nexpx   )r   time)tokens    O/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/extractor/mtv.py_jwt_is_expiredz!MTVServicesBaseIE._jwt_is_expired    s"    &u-		;cAA    c                 <    t        | dt        hfdt        hfd      S )NclientIdcountryCode)r#   r$   )r   str)configs    r   _get_auth_suite_dataz&MTVServicesBaseIE._get_auth_suite_data$   s*    F#cU+)C51%
  	r!   Nc                     dddd|xs i }|:d|d<   t        |t              r%t        j                  |d      j	                         }| j                  d| ||xs d	||i | j                  |      |xs i 
      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/   r0   r1   r2   s           r   _call_auth_apiz MTVServicesBaseIE._call_auth_api+   s    ("g'
 }"	
 &8GN#$%zz$:>EEG"",TF3Z55D#Yd&?&?&G#YEKUW#Y # [ 	[r!   c           
         |d   }| j                   |   }|j                  | j                        }|s|r| j                  |      s|S | j                  |vr| j                  d||dd      }n+| j                  d||dd|| j                     id	d
| i      }|d   || j                  <   |d   || j                  <   | j                  j                  | j                  ||       || j                     S )N
resourceIdaccessTokenzRetrieving auth tokensr!   )r0   zaccessToken/refreshzRefreshing auth tokensrefreshTokenAuthorizationBearer r0   r1   applicationAccessTokendeviceRefreshToken)	_token_cacheget_ACCESS_TOKEN_KEYr    _REFRESH_TOKEN_KEYr<   cachestore_CACHE_SECTION)r9   r&   r;   force_refreshresource_idtokensaccess_tokenresponses           r   _get_fresh_access_tokenz)MTVServicesBaseIE._get_fresh_access_token<   s   \*"";/zz$"8"89d6J6J<6X""&0**vz3KRU + WH **%vz;S$fT-D-D&EF(GL>*BC + EH
 *22J)Kt%%&*23G*Ht&&'

,,k6Bd,,--r!   c                 \   |d   }|| j                   v r| j                   |   }n9| j                  j                  | j                  |      xs i x}| j                   |<   |j	                  | j
                        }|r| j                  |      s|S | j                  ||      }t        |      j	                  d      s`| j                  d      }|st        dd      t        j                  | j                  |      d      j                         }	t        |d	   t         j"                  j%                  t'        j(                  |	      j+                               |d
      }
| j-                  d| d||dd|
idd| i      d   }| j/                  ||d      }| j1                  d|d   d|t2              d   }| j5                  ||d      }t7        |j8                        d   d   }| j-                  d| ||dd|iddd| i       | j                  ||d       }| j-                  d!||d"|j;                         D ci c]  \  }}|d#k(  rd$n|| c}}|d%dd| i&      d!   || j
                  <   | j                  j=                  | j                  ||       || j
                     S c c}}w )'Nr>   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callbackUrlrA   rB   r2   r1   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!   )r2   r0   r1   )rM   
mediaTokenzFetching media tokenvideoIdid)contentr>   rC   )rF   rJ   loadrL   rG   _MEDIA_TOKEN_KEYr    rR   r   	get_paramr   r5   r6   r'   r7   r   urllibparsequotebase64	b64encodedecoder<   _download_webpage_handle_search_jsonr
   _request_webpager   urlitemsrK   )r9   video_configr&   r;   rN   rO   media_tokenrP   mso_idauth_suite_datacallback_urlauth_urlresredirect_urlurlhauthorization_codekvs                     r   _get_media_tokenz"MTVServicesBaseIE._get_media_tokenT   s   \*$+++&&{3F6:jjoodFYFY[f6g6mkmmFT&&{3jj!6!67t33K@33FJG-11/B^^H-F$_imo o
 #jj))&1jJJP&( +F=,A!'!3!3F4D4D_4U4\4\4^!_"D L **xv&
8$l3(GL>*BC	 + E FY	ZH
 //*FfgC  ,,-s1vZ - 99CEL ((zCfgD!)$((!34G!H!Lvh'?*,>?c(GL>*BC	   E
  77
Z^7_L(,(;(;&*.DKWK]K]K_`41aQ)^TQ>`)L (7<.)AB	 )< )D EQ	)Rt$$% 	

,,k6Bd++,, as   <J(c                    | j                  |      }	 | j                  t        |d       |ddi      }t        |dd d dd ffdd	 t        ht        f      }t        |d dd
 ffdd ddt        ht        f      }|s&t        |ddddt        ht        t!        d      hf      }|d   }|j#                  d      d   }t        |dt$        ht        d       hf      }	|	st        dd      i }
|j'                  d      r\t        |dd ddt        ht        t!        d      hf      }t        |ddt        ht!        d      hf      }| j)                  |||      |
d<   | j                  |	|dd d!d"i|
#      d$   }|d%   }|d&k(  r| j+                  |d'   |d(|)      \  }}n9|d*k(  r| j-                  |d'   ||+      \  }}n| j/                  d,| d-       g i }}i t        |d.t0        hfd/d0t0        hfd1dd2d2t$        hfifd3t0        ht        fd4d.t0        hfd5t2        hfd6t2        hfd7d8t5        d9:      hfd;t6        hfd<d=t2        hfft        fd>t6        hfd?d=t2        hfft        fd@
      ||||dAS # t        $ r}t	        |j
                  t              rd|j
                  j                  dk(  rK| j                  |j
                  j                  j                        s| j                  | j                          d }~ww xY w)BN)r2   r5   truei  )	countrieschildrenc                     |d   dk(  S )NtypeMainContainer _r   s     r   <lambda>z1MTVServicesBaseIE._real_extract.<locals>.<lambda>   s    QvY/%A r!   c                     |d   dk(  S )Nr   AviaWrapperr   r   s     r   r   z1MTVServicesBaseIE._real_extract.<locals>.<lambda>   s    QvY--G r!   c                     |d   dk(  S )Nr   FlexWrapperr   r   s     r   r   z1MTVServicesBaseIE._real_extract.<locals>.<lambda>   s    QvY-%? r!   c                     |d   dk(  S Nr   AuthSuiteWrapperr   r   s     r   r   z1MTVServicesBaseIE._real_extract.<locals>.<lambda>   s    QvY:L-L r!   c                     |d   dk(  S )Nr   Playerr   r   s     r   r   z1MTVServicesBaseIE._real_extract.<locals>.<lambda>   s    QvY(%: r!   propsvideoDetail.)handleTVEAuthRedirectionNzvideo detailmgidr,   r   videoServiceUrlz#This content is no longer availableTrV   authRequiredc                     |d   dk(  S r   r   r   s     r   r   z1MTVServicesBaseIE._real_extract.<locals>.<lambda>   s    66H)H r!   videoConfigzvideo configauthSuiteConfigzauth suite configzX-VIA-TVE-MEDIATOKENzDownloading API JSONzUnable to download API JSONclientPlatformdesktopr\   stitchedstreammanifesttypehlssourcemp4)m3u8_iddash)mpd_idzUnsupported manifest type ""titlechannelnameimagesrr   )fullDescriptiondescriptionparentEntityseasonNumberepisodeAiringOrderdurationmillisecondsi  )scaleoriginalPublishDatepublishDate	timestamporiginalAirDateairDate)
r   r   
thumbnailsr   seriesseason_numberepisode_numberr   r   release_timestamp)rd   r;   formats	subtitles)	_match_idr8   r   r   r3   causer   statussuitablerQ   rr   raise_geo_restricted_GEO_COUNTRIESr   r4   anyr   
rpartitionr   rG   r   #_extract_m3u8_formats_and_subtitles"_extract_mpd_formats_and_subtitlesraise_no_formatsr%   r	   r   r   )r9   rr   r;   r0   eflex_wrappervideo_detailr   video_idservice_urlr1   rt   r&   stream_infomanifest_typer   r   s                    r   _real_extractzMTVServicesBaseIE._real_extract   s   ^^C(
	&&3d+Zv& ' (D $DAJ GHI?$+N O $LJ LMN:]TFC31 2 'C!CvsW^-D,E/G HL F#??3'*"<2Ck]U_fjUkTl1mn !FQUVVN+ (Hgn6M5N7P QL "$*TFW=P5Q4R)T UF.2.C.CLRXZd.eG*+))#9;X#Y/ * BBRT $N3E!!%!I!IH%x "J "OGYf$!%!H!HH%x "I "GGY !!$?a"PQ!#RYG
<!C5)%vu5'uu{m6L.MN BSE3O)7SE:"0;-!@#7+"G'-d:S9TU*]O<"K+?ABEG '8k];'=>A&C* 
" $")
 	
e  	!''9-!''..C2GPTP]P]^_^e^e^n^n^r^rPs))D4G4G)H	s   !I+ +	K84A?K33K8)NNNNN)NF)N)__name__
__module____qualname___GEO_BYPASSr   rL   rH   rI   rg   rF   staticmethodr    r'   r<   rR   r   r   r   r!   r   r   r      si    KVN"N "LB B  [".07-rN
r!   r   c                       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y4)5MTVIEmtvzGhttps?://(?:www\.)?mtv\.com/(?:video-clips|episodes)/(?P<id>[\da-z]{6})z&https://www.mtv.com/video-clips/syolsjrd   z$213ea7f8-bac7-4a43-8cd5-8d8cb8c8160fextr   r;   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)rr   	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   G[J7
8
5
 (
 8	

 A
 
 Y
 o
 k
 R
 {
 a
 
 :
  
  J!
$ #F+), 5
8
5
 (
 7	

 A
 u
 
 Y
 &
 k
 R
 |
 b
 
 :
   !
" J#
& #F++++Fr!   r   )rl   r5   r   urllib.parseri   commonr   networking.exceptionsr   utilsr   r   r	   r
   r   r   r   r   r   r   utils.traversalr   r   r   r   r   r!   r   <module>r      sG        ! -   4D
 D
N. .r!   