
    V|hR                         S SK r 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	J
r
JrJrJrJrJrJrJrJr   " S S\5      r " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      rg)    N   )InfoExtractor   )
ExtractorErrorint_or_none
remove_endsmuggle_urlstrip_or_nonetraverse_objtry_getunified_timestampunsmuggle_urlurl_or_nonec                   "    \ rS rSr0 S.S jrSrg)	ViuBaseIE   )headersc                    U R                   " SU 3/UQ70 UDS0 U R                  5       EUE0D6S   nUR                  S5      S:w  a  [        U R                   SUS    3SS	9eU$ )
Nzhttps://www.viu.com/api/r   responsestatussuccess said: messageTexpected)_download_jsongeo_verification_headersgetr   IE_NAME)selfpathr   argskwargsr   s         N/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/viu.py	_call_apiViuBaseIE._call_api   s    &&&tf-D04D8>DBt446B'BDDNP <<!Y. DLL>)9L8M!NY]^^     N)__name__
__module____qualname____firstlineno__r%   __static_attributes__r(   r'   r$   r   r      s    -/  r'   r   c                   ^    \ rS rSrSrSSSSSS.S	S
0SS.SSSSSS.S	S
0SS.SSS./rS rSrg)ViuIE    z<(?:viu:|https?://[^/]+\.viu\.com/[a-z]{2}/media/)(?P<id>\d+)zEhttps://www.viu.com/en/media/1116705532?containerId=playlist-22168059
1116705532mp4zCitizen Khan - Ep 1z$md5:d7ea1604f49e5ba79c212c551ce2110eidexttitledescriptionskip_downloadm3u8 downloadzGeo-restricted to Indiaurl	info_dictparamsskipz'https://www.viu.com/en/media/1130599965
1130599965zJealousy Incarnate - Episode 1z$md5:d3d82375cab969415d2720b6894361e9Geo-restricted to Indonesiaz)https://india.viu.com/en/media/1126286865T)r;   only_matchingc                    U R                  U5      nU R                  SUSSSUS.S9S   S   nUS	   nS nUR                  S
5      =(       d    UR                  S5      nUR                  S5      nUR                  S5      nU(       a  U(       a  U(       a  U SU SU 3nOUS   nU R                  XRS5      u  pUR	                  5        Hg  u  p[
        R                  " SU5      nU(       d  M%  U
R                  UR                  S5      / 5      R                  UUR                  S5      S.5        Mi     UUUR                  S5      UR                  S5      U[        UR                  S5      5      [        UR                  S5      5      U	U
S.	$ )Nz	clip/loadzDownloading video dataviu_desktopjsonappidfmtr4   queryitemr   r6   urlpathdurlpathtdirforwhole	jwhlsfile/hrefr2   z+subtitle_(?P<lang>[^_]+)_(?P<ext>(vtt|srt))langr5   )r;   r5   r7   moviealbumshowname	episodenoduration)	r4   r6   r7   seriesepisodeepisode_numberrT   formats	subtitles)	_match_idr%   r   #_extract_m3u8_formats_and_subtitlesitemsrematch
setdefaultgroupappendr   )r    r;   video_id
video_datar6   m3u8_urlurl_pathrM   hls_filerX   rY   keyvaluemobjs                 r$   _real_extractViuIE._real_extract?   s   >>#&^^#;&D $ 
 
 
 7#>>*-J	1J!~~n5
 >>+."1\N!H:>H
 "&)H!EEhZ_`$**,JC88JCPD  F!3R8??zz%(A 	 - %>>-8 nn%9:)*..*EF#JNN:$>?"

 
	
r'   r(   Nr)   r*   r+   r,   
_VALID_URL_TESTSrj   r-   r(   r'   r$   r/   r/       sv    PJV*A	
 _
 * 95A	
 _
 . ;1F:0
r'   r/   c                   6    \ rS rSrSrSrSSSS.SS	S
.rS rSrg)ViuPlaylistIEr   zviu:playlistz9https?://www\.viu\.com/[^/]+/listing/playlist-(?P<id>\d+)z0https://www.viu.com/en/listing/playlist-2246138022461380zThe Good Wife)r4   r6      r@   )r;   r<   playlist_countr>   c           	      h   U R                  U5      nU R                  SUSSSSU-   S.S9S   n/ nUR                  S	/ 5       HM  nUR                  S
5      nU(       d  M  [        U5      nUR	                  U R                  SU-   SU5      5        MO     U R                  XBUR                  S5      5      $ )Nzcontainer/loadzDownloading playlist inforC   rD   z	playlist-rE   rH   	containerrJ   r4   zviu:Viur6   )rZ   r%   r   strra   
url_resultplaylist_result)r    r;   playlist_idplaylist_dataentriesrJ   item_ids          r$   rj   ViuPlaylistIE._real_extract   s    nnS)k'&!K/0 '   !%%fb1DhhtnG'lGNN4?? %2 3 2 ##-"3"3G"<> 	>r'   r(   N)	r)   r*   r+   r,   r   rm   _TESTrj   r-   r(   r'   r$   rp   rp   r   s.    GMJA$
 -E>r'   rp   c                       \ rS rSrSrSrSr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S S.SS!./rSS"S#S$S%.rSS"S&S'.r	S(r
0 rS) rS* rS+ rS, rS-rg().ViuOTTIE   zviu:ottviuzkhttps?://(?:www\.)?viu\.com/ott/(?P<country_code>[a-z]{2})/(?P<lang_code>[a-z]{2}-[a-z]{2})/vod/(?P<id>\d+)zIhttp://www.viu.com/ott/sg/en-us/vod/3421/The%20Prime%20Minister%20and%20I3421r2   zA New Beginningz$md5:1e7486a619b6399b25ba6a41c0fe5b2cr3   r9   T)r8   
noplaylistzGeo-restricted to Singaporer:   zIhttps://www.viu.com/ott/hk/zh-hk/vod/430078/%E7%AC%AC%E5%85%AD%E6%84%9F-3430078u   大韓民國的1%z$md5:74d6db47ddd9ddb9c89a05739103ccdbr   i  u   第六感 3zYhttps://d2anahhhmp1ffz.cloudfront.net/1313295781/d2b14f48d008ef2f3a9200c98d8e9b63967b9cc2)	r4   r5   r6   r7   rW   rT   rV   rU   	thumbnailzGeo-restricted to Hong Kongzthttps://www.viu.com/ott/hk/zh-hk/vod/444666/%E6%88%91%E7%9A%84%E5%AE%A4%E5%8F%8B%E6%98%AF%E4%B9%9D%E5%B0%BE%E7%8B%90rs   23807u   我的室友是九尾狐z$md5:b42c95f2b4a316cdd6ae14ca695f33b9)r4   r6   r7   F)r;   rt   r<   r=   r>   r         )HKSGTHPH   )zzh-hkzzh-cnzen-usNc                     [        US 5      nU(       a0  US:  a*  [        US 5      n[        U R                   SU SU S3SS9eUR                  S	5      =(       d    0 $ )
Nc                     U S   S   $ )Nr   coder(   xs    r$   <lambda>(ViuOTTIE._detect_error.<locals>.<lambda>   s    1X;v+>r'   r   c                     U S   S   $ )Nr   r   r(   r   s    r$   r   r      s    !H+i2Hr'   r   z ()Tr   data)r   r   r   r   )r    r   r   r   s       r$   _detect_errorViuOTTIE._detect_error   s^    x!>?D1Hh(HIG DLL>	D6!KVZ[[||F#)r)r'   c                 :   U R                   Gc  U R                  5       u  p4Uc  g SU R                  U    3SS.nU R                  SUSU[        R
                  " USS.5      R                  5       S9nUR                  S	5      (       d  [        S
5      eU R                  SUSU[        R
                  " UUSS.5      R                  5       S9nU R                  U5        UR                  S5      U l         UR                  S5      U R                  U'   U R                   $ )NBearer application/json)AuthorizationContent-Typez7https://api-gateway-global.viu.com/api/account/validatezValidating email addressemail)	principalprovider)r   r   existszInvalid email addressz1https://api-gateway-global.viu.com/api/auth/loginz
Logging in)r   passwordr   identitytoken)
_user_token_get_login_info_auth_codesr   rD   dumpsencoder   r   r   )r    country_coderb   usernamer   r   r   s          r$   _loginViuOTTIE._login   s/   #!%!5!5!7H#*4+;+;L+I*J!K 2G &&I4gZZ!) '!  68 ' D 88H%%$%<==&&C,ZZ% ( '!  68 ' D t$#xx
3D-1XXg->D\*r'   c                 (   SR                  [        R                  " SSS95      nU R                  SU S3USS0S	[        R
                  " UR                  5       S
SS[        [        R                  " 5       5      SS.5      R                  5       S9S   $ )N 
0123456789
   )kz4https://api-gateway-global.viu.com/api/auth/token?v=000r   r   zGetting bearer tokenbrowserweben0)countryCodeplatformplatformFlagLabellanguageuuid	carrierId)r   noter   r   )joinrandomchoicesr   rD   r   upperrx   r   uuid4r   )r    r   rb   rands       r$   
_get_tokenViuOTTIE._get_token   s    wwv~~lb9:""B4&Lh#%78?U+113%%* DJJL)   vx # 
 !
" 
	"r'   c                 
  ^ ^^^^^ [        T0 5      u  mnT R                  T5      R                  5       u  mnmSSTS.mT R                  R	                  TR                  5       5      nU(       a  UTS'   T R                  ST S3TSTS9S	   nUR	                  S
5      nU(       d  T R                  5         UR	                  S5      nT R                  UTU5      (       a  UR	                  S5      =(       d    0 nUR	                  S5      n	U	(       a  / n
[        U	S S9 H  nUR	                  S5      nU(       d  M  U
R                  T R                  [        ST SU SU S3SS05      [        [        U5      UR	                  SS5      R                  5       5      5        M     T R!                  XUR	                  S5      UR	                  S5      5      $ SnUS   T R"                  R	                  UR%                  5       5      =(       d    SS.mUUU UU4S jnT R&                  R	                  T5      (       d  T R)                  TT5      T R&                  T'   S n U" 5       nU(       d
  [+        S#SS$9e/ nUR	                  S%5      =(       d    0 R3                  5        GH	  u  mn[5        T R7                  S&TS'S S(95      nU(       a  [8        R:                  R=                  U5      n[?        [8        R:                  RA                  URB                  SS)95      mTRE                  UR	                  S*5      =(       d    S+S,S-.5        URG                  [8        R:                  RI                  T5      S9RK                  5       nUR                  TUUS.[M        UU4S/ j[4        5      S0.5        GM     0 nUR	                  S15      =(       d    /  H  nUR	                  S5      =(       d    S2nUR	                  S%5      (       a+  URO                  U/ 5      R                  US%   S3S4U 3S5.5        UR	                  S65      (       d  Mv  URO                  U S73/ 5      R                  US6   S3S8U 3S5.5        M     [Q        UR	                  S5      5      nTUUR	                  S5      [M        US9 5      U[S        UR	                  S:5      5      [S        UR	                  S 5      5      [U        UR	                  S;5      5      UUS<.
$ ! [*        [,        4 aZ    T R/                  TT5      nUb  UTS'   OSu  nTS '    U" 5       n GN! [*        [,        4 a    Ub  e T R1                  S!S"9    GNf = ff = f)=Nzvod/ajax-detailr   )rplatform_flag_label
product_idarea_idzhttp://www.viu.com/ott/z
/index.phpzDownloading video inforH   r   current_product	series_idrU   productc                 8    [        U R                  SS5      5      $ )Nnumberr   )r   r   r   s    r$   r   (ViuOTTIE._real_extract.<locals>.<lambda>)  s    ;quuXWXGY;Zr'   )rg   r   rO   z/vod/force_noplaylistTsynopsisr   namer7   Fccs_product_id3)r   language_flag_idc                     > TR                  STTSSSTR                  T    3TTS.S9n TR                  U 5      R                  S5      $ )Nz:https://api-gateway-global.viu.com/api/playback/distributeFzDownloading stream infor   )r   RefererOrigin)rb   rI   fatalr   r   stream)r   r   r   r   )stream_datar   rI   r    r;   rb   s    r$   download_playback1ViuOTTIE._real_extract.<locals>.download_playback:  sd    --L!eB['.t/?/?/M.N%O"! . K %%k266x@@r'   r   )T180rT   r   )methodzCannot get stream infor   r;   zs(\d+)pheightdefault)keep_blank_valuestime_duration9999999r   )rT   duration_startr2   c                    > U S   T   $ )Nsizer(   )r   
vid_formats    r$   r   r   o  s    1V9Z;Pr'   )	format_idr;   r   r5   filesizesubtitleundsrtzSpoken text for )r;   r5   r   second_subtitle_url_ostzOn-screen text for c                     U S   S   $ )NrU   r   r(   r   s    r$   r   r     s    ak&6Ir'   r   cover_image_url)
r4   r6   r7   rU   rV   rW   rT   r   rX   rY   )+r   _match_valid_urlgroups_AREA_IDr   r   r   raise_geo_restricted_yes_playlistsortedra   ry   r	   r   rx   striprz   _LANGUAGE_FLAGlowerr   r   r   KeyErrorr   raise_login_requiredr\   int_search_regexurllibparseurlparsedict	parse_qslrI   update_replace	urlencodegeturlr   r_   r
   r   r   )r    r;   idata	lang_coder   product_datarc   r   rU   r   r}   entryr~   duration_limitr   r   r   rX   
stream_urlr   old_stream_urlrY   subrQ   r6   r   rI   r   rb   s   ``                       @@@@r$   rj   ViuOTTIE._real_extract  s,   "3+
U,0,A,A#,F,M,M,O)i ##("
 --##L$6$6$89&E)**%l^:>$E + 339; "%%&78
%%'NN;/	i599!%%h/52Fjj+G#G1Z[E#ii5G" NN4??#&=l^1YKW\]d\eef$g%7$>@ #g,		*b0I0O0O0Q$S T	 \ ++G

6@RTZT^T^_lTmnn()9: $ 3 3 7 7	8I J Qc

		A 		A ##L11-1__\8-TD\*	=+-K  !9DII'2u'='C&J&J&L"J
++J
HVZ+[\F !'!6!6z!BV\\33N4H4H\`3ab * ? L9&)  ,446<<;Q;QRW;X4Y``b
NN'! #K1PRUV  'M* 	>>*-33C776?+eDwwu~~$$T2.55u: .tf57 
 ww,--$$vT]B7>>45 1$8@  4 jnnZ89%>>-8l,IJ)*..*BC#KOOJ$?@$Z^^4E%FG"
 	
q ) 	=KKh7E $)j! 5@1j 1=/1"H- =$)))<=	=s*   S6 63U *T44#UU UU )r   )r)   r*   r+   r,   r   _NETRC_MACHINErm   rn   r   r   r   r   r   r   r   rj   r-   r(   r'   r$   r   r      s    GNJZ&A	
 -
 . [(A*#t

 -
 .#& F/A
 -
 .?,F^ 	H N KK* B"A
r'   r   c                       \ rS rSrSSSSSSS.r\" \R                  " 5       5      r\" \R                  " 5       5      r	S	r
\	S
S.rSSS.rS rSrg	)ViuOTTIndonesiaBaseIEi  g      ?rD   g      @g       @rC   desktop)verrG   averappverrF   r   Nr   )zx-session-idzx-client      )ADULTSteensc           
          U R                  SS SS0U R                  E0 U R                  ESU R                  0E[        R
                  " SU R                  05      R                  5       SS9S   [        l        g )	Nz"https://um.viuapi.io/user/identityzContent-typer   iiddeviceIdzDownloading token information)r   rI   r   r   r   )	r   _HEADERS_BASE_QUERY
_DEVICE_IDrD   r   r   r  _TOKEN)r    s    r$   _real_initialize&ViuOTTIndonesiaBaseIE._real_initialize  sv    '+':':0$#%7I4==I>T%%>udoo>Z9:AAC0 (; (2
 3:(;$r'   r(   )r)   r*   r+   r,   r'  rx   r   r   r(  _SESSION_IDr)  r&  _AGE_RATINGS_MAPPERr*  r-   r(   r'   r$   r  r    sf    K TZZ\"Jdjjl#KF $H 
;r'   r  c                       \ rS rSrSr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!S"S#S!/ S$QS%S&.
S.S'S(SS SS)S%S*S+S,S-S..
S./rS/ rS0rg1)2ViuOTTIndonesiaIEi  z?https?://www\.viu\.com/ott/\w+/\w+/all/video-[\w-]+-(?P<id>\d+)zhttps://www.viu.com/ott/id/id/all/video-japanese-drama-tv_shows-detective_conan_episode_793-1165863142?containerId=playlist-26271226
1165863142r2   i  zEpisode 793zDetective Conan - Episode 793i  z$md5:b79d55345bc1e0217ece22616267c9a5zhhttps://vuclipi-a.akamaihd.net/p/cloudinary/h_171,w_304,dpr_1.5,f_auto,c_thumb,q_auto:low/1165863189/d-120210101i f_)
r4   r5   rW   rV   r6   rT   r7   r   upload_date	timestamp)r;   r<   zlhttps://www.viu.com/ott/id/id/all/video-korean-reality-tv_shows-entertainment_weekly_episode_1622-1118617054
1118617054iV  zEpisode 1622z$md5:6d68ca450004020113e9bf27ad99f0f8z#Entertainment Weekly - Episode 1622iy  zhhttps://vuclipi-a.akamaihd.net/p/cloudinary/h_171,w_304,dpr_1.5,f_auto,c_thumb,q_auto:low/1120187848/d-1i T20150101zShin Hyun-joonz
Lee Da-Hee)r4   r5   rW   rV   r7   r6   rT   r   r3  r2  castzhttps://www.viu.com/ott/id/id/all/video-japanese-trailer-tv_shows-trailer_jujutsu_kaisen_ver_01-1166044219?containerId=playlist-26273140
116604421920200101i ^zTrailer 'Jujutsu Kaisen' Ver.01\   zhhttps://vuclipi-a.akamaihd.net/p/cloudinary/h_171,w_304,dpr_1.5,f_auto,c_thumb,q_auto:low/1166044240/d-1)zJunya Enokiu    Yûichi Nakamuraz Yuma Uchidaz
Asami Setor   )
r4   r5   r2  r3  r6   rT   r   r7   r6  	age_limitzhttps://www.viu.com/ott/id/id/all/video-japanese-animation-movies-demon_slayer_kimetsu_no_yaiba_the_movie_mugen_train-1165892707?containerId=1675060691786
1165892707z8Demon Slayer - Kimetsu no Yaiba - The Movie: Mugen Trainzcount:9zhhttps://vuclipi-a.akamaihd.net/p/cloudinary/h_171,w_304,dpr_1.5,f_auto,c_thumb,q_auto:low/1165895279/d-1z$md5:1ce9c35a3aeab384085533f746c87469im  )
r4   r5   r3  r2  r6   r:  r6  r   r7   rT   c                 v   U R                  U5      nU R                  X5      nU R                  SU 3USS[        R                  0U R
                  ESS0ES9nU R                  US   U5      u  pVU R                  SUS	U5      S
   S   nUR                  5        H}  u  pU R                  SUSSSS9u  pU	(       d  M#  U
(       d  M,  UR                  U	/ 5      R                  U
US.5        U
S:X  d  MX  Xi   R                  S[        Xx   S5       S3S.5        M     [        [        [        S U R!                  X25      5      5      S5      =(       d    0 nU[        USS5      =(       d    UR#                  S5      UR#                  S5      =(       d    UR#                  S5      UR#                  S5      [        US5      [%        UR#                  S5      5      UU[        USS[&        S9=(       d    ['        UR#                  S 5      5      [        US!S S"9U R(                  R#                  UR#                  S#5      5      S$.$ )%Nz$https://um.viuapi.io/drm/v1/content/r'   r   ccodeID)r   r   playUrlzwindow\.__INITIAL_STATE__\s*=zinitial statecontentclipDetailsz(^subtitle_(?P<lang>[\w-]+)_(?P<ext>\w+)$zsubtitle metadata)NN)rQ   r5   )r   r`   )r5   r;   vttr   c                 *    U R                  S5      S;   $ )Nz@type)	TVEpisodeMovie)r   r   s    r$   r   1ViuOTTIndonesiaIE._real_extract.<locals>.<lambda>  s    aeeGn(>>r'   r   r6   display_titler   r7   rT   )imager;   dateCreated
episode_norS   )expected_typeepisodeNumber)actor.r   r   internal_age_rating)r4   r6   r7   rT   r   r3  rX   rY   rW   r6  r:  )rZ   _download_webpager   r  r)  r&  r[   _search_jsonr\   r  r_   ra   r   r   listfilter_yield_json_ldr   r   r   r-  )r    r;   
display_idwebpagerc   rX   rY   initial_staterg   rQ   r5   rV   s               r$   rj   ViuOTTIndonesiaIE._real_extract  sX   ^^C(
((9((2:,?RU$&;&B&BcdmmcU\^bc ) e
 "EEjQZF[]gh)),g!##02 &++-HC**;SBU$O + =ID t$$T2.557 
 %<O**$",]-?"G!HL,  .  tF>@S@ST[@h%j  klmo urt 	 "='?K - V,(,,];Yw{{=?Y%))*5%g/?@*7;;}+EF"+M<dop  L"-gkk/.J"K *@$O1155m6G6GH]6^_
 	
r'   r(   Nrl   r(   r'   r$   r/  r/    s    SJ V!$4A D%#
 ~"%A: D#%%|4
" Z%#8 D>V
" l#%O DA
Y;Fz,
r'   r/  )rD   r   r]   urllib.parser  r   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r/   rp   r   r  r/  r(   r'   r$   <module>r[     sy      	   !   O
I O
d!>I !>Hx
} x
v;M ;Bk
- k
r'   