
    V|h/                         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JrJr  SSKJrJr   " S S	\5      r " S
 S\5      rg)    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                   v    \ rS rSrSrS/rSrSrSrSr	0 r
\S 5       r\S	 5       rSS jrSS jrSS jrS rSrg
)MTVServicesBaseIE   FUSmtvservicesaccessrefreshmediac                 P    [        U 5      S   [        R                  " 5       -
  S:  $ )Nexpx   )r   time)tokens    N/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/mtv.py_jwt_is_expired!MTVServicesBaseIE._jwt_is_expired    s"    &u-		;cAA    c                 <    [        U S[        14S[        14S.5      $ )NclientIdcountryCode)r%   r&   )r   str)configs    r    _get_auth_suite_data&MTVServicesBaseIE._get_auth_suite_data$   s*    F#cU+)C51%
  	r#   Nc                    SSSS.U=(       d    0 EnUb=  SUS'   [        U[        5      (       a#  [        R                  " USS9R	                  5       nU R                  SU 3UU=(       d    S	UU0 U R                  U5      EU=(       d    0 ES
9$ )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_idr2   r3   r4   r5   s           r    _call_auth_api MTVServicesBaseIE._call_auth_api+   s    ("g'
 }"	
 &8GN#$%%zz$:>EEG"",TF3Z55D#Yd&?&?&G#YEKUW#Y # [ 	[r#   c           
         US   nU R                   U   nUR                  U R                  5      nU(       d  U(       a  U R                  U5      (       d  U$ U R                  U;  a  U R                  SXSSS9nO&U R                  SXSSXPR                     0S	S
U 30S9nUS   XPR                  '   US   XPR                  '   U R                  R                  U R                  XE5        XPR                     $ )N
resourceIdaccessTokenzRetrieving auth tokensr#   )r3   zaccessToken/refreshzRefreshing auth tokensrefreshTokenAuthorizationBearer r3   r4   applicationAccessTokendeviceRefreshToken)	_token_cacheget_ACCESS_TOKEN_KEYr!   _REFRESH_TOKEN_KEYr?   cachestore_CACHE_SECTION)r<   r(   r>   force_refreshresource_idtokensaccess_tokenresponses           r    _get_fresh_access_token)MTVServicesBaseIE._get_fresh_access_token<   s   \*"";/zz$"8"89d6J6J<6X6X""&0**v3KRU + WH **%v;S$f-D-D&EF(GL>*BC + EH
 *22J)K%%&*23G*H&&'

,,kB,,--r#   c                 \   US   nX@R                   ;   a  U R                   U   nO=U R                  R                  U R                  U5      =(       d    0 =oPR                   U'   UR	                  U R
                  5      nU(       a  U R                  U5      (       d  U$ U R                  X#5      n[        U5      R	                  S5      (       GdP  U R                  S5      nU(       d
  [        SSS9e[        R                  " U R                  U5      SS9R                  5       n	[        US	   [         R"                  R%                  [&        R(                  " U	5      R+                  5       5      US
.5      n
U R-                  SU S3X#SSU
0SSU 30S9S   nU R/                  XS5      nU R1                  SUS   SU[2        S9S   nU R5                  XS5      n[7        UR8                  5      S   S   nU R-                  SU 3X#SSU0SSSU 30S9  U R                  X#SS 9nU R-                  S!X#S"UR;                  5        VVs0 s H  u  nnUS#:X  a  S$OUU_M     snnUS%.SSU 30S&9S!   XPR
                  '   U R                  R=                  U R                  XE5        XPR
                     $ s  snnf )'NrB   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-   r0   callbackURL)authSuiteDatamvpdCodezmvpd/z/loginz&Retrieving provider authentication URLcallbackUrlrE   rF   r5   r4   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#   )r5   r3   r4   )rQ   
mediaTokenzFetching media tokenvideoIdid)contentrB   rG   )rJ   rN   loadrP   rK   _MEDIA_TOKEN_KEYr!   rV   r   	get_paramr   r8   r9   r)   r:   r   urllibparsequotebase64	b64encodedecoder?   _download_webpage_handle_search_jsonr
   _request_webpager   urlitemsrO   )r<   video_configr(   r>   rR   rS   media_tokenrT   mso_idauth_suite_datacallback_urlauth_urlresredirect_urlurlhauthorization_codekvs                     r    _get_media_token"MTVServicesBaseIE._get_media_tokenT   s   \*+++&&{3F6:jjoodFYFY[f6g6mkmmF&&{3jj!6!67t33K@@33FG-11/B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 ((CfgD!)$((!34G!H!Lvh'?*,>?c(GL>*BC	   E
  77Z^7_L(,(;(;&.DKWK]K]K_`K_41aQ)^TQ>K_`)L (7<.)AB	 )< )D EQ	)R$$% 	

,,kB++,, as   >J(c                    U R                  U5      n U R                  [        US S9USS0S9n[        USS S SS 44SS	 [        1[        45      n[        US SS
 44SS SS[        1[        45      nU(       d&  [        USSSS[        1[        [!        S5      145      nUS   nUR#                  S5      S   n[        US[$        1[        S S9145      n	U	(       d
  [        SSS9e0 n
UR'                  S5      (       a[  [        USS SS[        1[        [!        S5      145      n[        USS[        1[!        S5      145      nU R)                  XU5      U
S'   U R                  XSS S!S"0U
S#9S$   nUS%   nUS&:X  a  U R+                  US'   US(US)9u  nnO6US*:X  a  U R-                  US'   XS+9u  nnOU R/                  S,U S-35        / 0 nn0 [        US.[0        14S/S0[0        14S1SS2S2[$        1404S3[0        1[        4S4S.[0        14S5[2        14S6[2        14S7S8[5        S9S:914S;[6        14S<S=[2        144[        4S>[6        14S?S=[2        144[        4S@.
5      EUUUUSA.E$ ! [         a  n[	        UR
                  [        5      (       ag  UR
                  R                  S:X  aM  U R                  UR
                  R                  R                  5      (       d  U R                  U R                  S9  e S nAff = f)BN)r5   r8   truei  )	countrieschildrenc                     US   S:H  $ )NtypeMainContainer _r   s     r    <lambda>1MTVServicesBaseIE._real_extract.<locals>.<lambda>   s    QvY/%Ar#   c                     US   S:H  $ )Nr   AviaWrapperr   r   s     r    r   r      s    QvY--Gr#   c                     US   S:H  $ )Nr   FlexWrapperr   r   s     r    r   r      s    QvY-%?r#   c                     US   S:H  $ Nr   AuthSuiteWrapperr   r   s     r    r   r      s    QvY:L-Lr#   c                     US   S:H  $ )Nr   Playerr   r   s     r    r   r      s    QvY(%:r#   propsvideoDetail.)handleTVEAuthRedirectionNzvideo detailmgidr/   r   videoServiceUrlz#This content is no longer availableTr[   authRequiredc                     US   S:H  $ r   r   r   s     r    r   r      s    66H)Hr#   videoConfigzvideo configauthSuiteConfigzauth suite configzX-VIA-TVE-MEDIATOKENzDownloading API JSONzUnable to download API JSONclientPlatformdesktopra   stitchedstreammanifesttypehlssourcemp4)m3u8_iddash)mpd_idzUnsupported manifest type ""titlechannelnameimagesrw   )fullDescriptiondescriptionparentEntityseasonNumberepisodeAiringOrderdurationmillisecondsi  )scaleoriginalPublishDatepublishDate	timestamporiginalAirDateairDate)
r   r   
thumbnailsr   seriesseason_numberepisode_numberr   r   release_timestamp)ri   r>   formats	subtitles)	_match_idr;   r   r   r6   causer   statussuitablerU   rw   raise_geo_restricted_GEO_COUNTRIESr   r7   anyr   
rpartitionr   rK   r   #_extract_m3u8_formats_and_subtitles"_extract_mpd_formats_and_subtitlesraise_no_formatsr'   r	   r   r   )r<   rw   r>   r3   eflex_wrappervideo_detailr   video_idservice_urlr4   ry   r(   stream_infomanifest_typer   r   s                    r    _real_extract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.CLZd.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^rPsPs))D4G4G)H	s   I! !
K7+BK22K7r   )NNNNN)NF)N)__name__
__module____qualname____firstlineno___GEO_BYPASSr   rP   rL   rM   rl   rJ   staticmethodr!   r)   r?   rV   r   r   __static_attributes__r   r#   r    r   r      si    KVN"N "LB B  [".07-rN
r#   r   c                      \ rS rSrSrSr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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S0_SS1_SS2_SS3_SS4_S!S3_S"S4_S#S$0S%./rS5rg6)7MTVIE   mtvzGhttps?://(?:www\.)?mtv\.com/(?:video-clips|episodes)/(?P<id>[\da-z]{6})z&https://www.mtv.com/video-clips/syolsjri   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)rw   	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20250724r   N)r   r   r   r   IE_NAME
_VALID_URL_TESTSr   r   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   )rq   r8   r   urllib.parsern   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#   