
    VGhR                         d dl Z 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	m
Z
mZmZmZmZmZmZmZmZ  G d de      Z G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Zy)    N   )InfoExtractor   )
ExtractorErrorint_or_none
remove_endsmuggle_urlstrip_or_nonetraverse_objtry_getunified_timestampunsmuggle_urlurl_or_nonec                       e Zd Zi ddZy)	ViuBaseIE)headersc                     | j                   d| g|i |di | j                         |id   }|j                  d      dk7  rt        | j                   d|d    d	      |S )
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         ]/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/viu.py	_call_apizViuBaseIE._call_api   s    &4&&&tf-D04D8>DBt446B'BDDNP <<!Y. DLL>)9L8M!NY]^^    N)__name__
__module____qualname__r$    r%   r#   r   r      s
    -/ r%   r   c                   V    e Zd ZdZdddddddd	id
ddddddddd	idddddgZd Zy)ViuIEz<(?: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)r6   only_matchingc                    | j                  |      }| j                  d|ddd|d      d   d   }|d	   }d }|j                  d
      xs |j                  d      }|j                  d      }|j                  d      }|r|r|r| d| d| }n|d   }| j                  ||d      \  }	}
|j	                         D ]`  \  }}t        j                  d|      }|s|
j                  |j                  d      g       j                  ||j                  d      d       b |||j                  d      |j                  d      |t        |j                  d            t        |j                  d            |	|
d	S )Nz	clip/loadzDownloading video dataviu_desktopjsonappidfmtr/   queryitemr   r1   urlpathdurlpathtdirforwhole	jwhlsfile/hrefr-   z+subtitle_(?P<lang>[^_]+)_(?P<ext>(vtt|srt))langr0   )r6   r0   r2   moviealbumshowname	episodenoduration)	r/   r1   r2   seriesepisodeepisode_numberrO   formats	subtitles)	_match_idr$   r   #_extract_m3u8_formats_and_subtitlesitemsrematch
setdefaultgroupappendr   )r   r6   video_id
video_datar1   m3u8_urlurl_pathrH   hls_filerS   rT   keyvaluemobjs                 r#   _real_extractzViuIE._real_extract?   s   >>#&^^#;&D $ 
 
 
 7#>>*-J	1J!~~n5
 >>+."1\N!H:>H
 "&)H!EEhPXZ_`$**, 	JC88JCPD  F!3R8??zz%(A 		 %>>-8 nn%9:)*..*EF#JNN:$>?"

 
	
r%   Nr&   r'   r(   
_VALID_URL_TESTSre   r)   r%   r#   r+   r+       sv    PJV*A	
 _
 * 95A	
 _
 . ;1F:0
r%   r+   c                   .    e Zd ZdZdZddddddd	Zd
 Zy)ViuPlaylistIEzviu:playlistz9https?://www\.viu\.com/[^/]+/listing/playlist-(?P<id>\d+)z0https://www.viu.com/en/listing/playlist-2246138022461380zThe Good Wife)r/   r1      r;   )r6   r7   playlist_countr9   c           	      `   | j                  |      }| j                  d|dddd|z   d      d   }g }|j                  d	g       D ]F  }|j                  d
      }|st        |      }|j	                  | j                  d|z   d|             H | j                  |||j                  d            S )Nzcontainer/loadzDownloading playlist infor>   r?   z	playlist-r@   rC   	containerrE   r/   zviu:Viur1   )rU   r$   r   strr\   
url_resultplaylist_result)r   r6   playlist_idplaylist_dataentriesrE   item_ids          r#   re   zViuPlaylistIE._real_extract   s    nnS)k'&!K/0 '   !%%fb1 	3DhhtnG'lGNN4?? %2 3	3 ##[-"3"3G"<> 	>r%   N)r&   r'   r(   r   rg   _TESTre   r)   r%   r#   rj   rj   r   s.    GMJA$
 -E>r%   rj   c                       e Zd 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dd	d
ddddddddddd
dddd gZdd!d"d#d$Zdd!d%d&Zd'Z	i Z
d( Zd) Zd* Zd+ Zy'),ViuOTTIEz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3421r-   zA New Beginningz$md5:1e7486a619b6399b25ba6a41c0fe5b2cr.   r4   T)r3   
noplaylistzGeo-restricted to Singaporer5   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)	r/   r0   r1   r2   rR   rO   rQ   rP   	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%90rl   23807u   我的室友是九尾狐z$md5:b42c95f2b4a316cdd6ae14ca695f33b9)r/   r1   r2   F)r6   rm   r7   r8   r9   r         )HKSGTHPH   )zzh-hkzzh-cnzen-usNc                     t        |d       }|r2|dkD  r-t        |d       }t        | j                   d| d| dd      |j                  d	      xs i S )
Nc                     | d   d   S )Nr   coder)   xs    r#   <lambda>z(ViuOTTIE._detect_error.<locals>.<lambda>   s    1X;v+> r%   r   c                     | d   d   S )Nr   r   r)   r   s    r#   r   z(ViuOTTIE._detect_error.<locals>.<lambda>   s    !H+i2H r%   r   z ()Tr   data)r   r   r   r   )r   r   r   r   s       r#   _detect_errorzViuOTTIE._detect_error   s^    x!>?D1Hh(HIG DLL>	D6!KVZ[[||F#)r)r%   c                 6   | j                   | j                         \  }}|y d| j                  |    dd}| j                  d|d|t	        j
                  |dd      j                               }|j                  d	      st        d
      | j                  d|d|t	        j
                  ||dd      j                               }| j                  |       |j                  d      | _         |j                  d      | j                  |<   | j                   S )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   r?   dumpsencoder   r   r   )r   country_coder]   usernamer   r   r   s          r#   _loginzViuOTTIE._login   s.   #!%!5!5!7Hh#*4+;+;L+I*J!K 2G &&I4gZZ!) '!  68 ' D 88H%$%<==&&C,ZZ% ( '!  68 ' D t$#xx
3D-1XXg->D\*r%   c                 .   dj                  t        j                  dd            }| j                  d| d|ddid	t	        j
                  |j                         d
ddt        t        j                               dd      j                               d   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   r?   r   upperrq   r   uuid4r   )r   r   r]   rands       r#   
_get_tokenzViuOTTIE._get_token   s    wwv~~lb9:""B4&Lh#%78?U+113%%* DJJL)   vx # 
 !
" 
	"r%   c                 4
    t        i       \  } j                        j                         \  }ddd j                  j	                  j                               }|r|d<    j                  d dd      d	   }|j	                  d
      }|s j                          |j	                  d      } j                  ||      r|j	                  d      xs i }|j	                  d      }	|	rg }
t        |	d       D ]z  }|j	                  d      }|s|
j                   j                  t        d d| d| dddi      t        t        |      |j	                  dd      j                                      |  j!                  |
||j	                  d      |j	                  d            S d}|d    j"                  j	                  |j%                               xs dd fd} j&                  j	                        s j)                         j&                  <   d }	  |       }|st+        d#d$      g }|j	                  d%      xs i j3                         D ]  \  }t5         j7                  d&d'd (            }|rt8        j:                  j=                  |      }t?        t8        j:                  jA                  |jB                  d)            jE                  |j	                  d*      xs d+d,d-       |jG                  t8        j:                  jI                              jK                         }|j                  ||d.tM        |fd/t4              d0       	 i }|j	                  d1      xs g D ]  }|j	                  d      xs d2}|j	                  d%      r+|jO                  |g       j                  |d%   d3d4| d5       |j	                  d6      sf|jO                  | d7g       j                  |d6   d3d8| d5        tQ        |j	                  d            }||j	                  d      tM        |d9       |tS        |j	                  d:            tS        |j	                  d             tU        |j	                  d;            ||d<
S # t*        t,        f$ rY  j/                        }||d<   nd\  }d <   	  |       }n*# t*        t,        f$ r |  j1                  d!"       Y nw xY wY w xY w)=Nzvod/ajax-detailr   )rplatform_flag_label
product_idarea_idzhttp://www.viu.com/ott/z
/index.phpzDownloading video inforC   r   current_product	series_idrP   productc                 8    t        | j                  dd            S )Nnumberr   )r   r   r   s    r#   r   z(ViuOTTIE._real_extract.<locals>.<lambda>)  s    ;quuXWXGY;Z r%   )rb   r   rJ   z/vod/force_noplaylistTsynopsisr   namer2   Fccs_product_id3)r   language_flag_idc                      j                  ddddj                      d      } j                  |       j                  d      S )Nz:https://api-gateway-global.viu.com/api/playback/distributeFzDownloading stream infor   )r   RefererOrigin)r]   rD   fatalr   r   stream)r   r   r   r   )stream_datar   rD   r   r6   r]   s    r#   download_playbackz1ViuOTTIE._real_extract.<locals>.download_playback:  sd    --L!eB['.t/?/?/M.N%O"! . K %%k266x@@r%   r   )T180rO   r   )methodzCannot get stream infor   r6   zs(\d+)pheightdefault)keep_blank_valuestime_duration9999999r   )rO   duration_startr-   c                     | d      S )Nsizer)   )r   
vid_formats    r#   r   z(ViuOTTIE._real_extract.<locals>.<lambda>o  s    1V9Z;P r%   )	format_idr6   r   r0   filesizesubtitleundsrtzSpoken text for )r6   r0   r   second_subtitle_url_ostzOn-screen text for c                     | d   d   S )NrP   r   r)   r   s    r#   r   z(ViuOTTIE._real_extract.<locals>.<lambda>  s    ak&6I r%   r   cover_image_url)
r/   r1   r2   rP   rQ   rR   rO   r   rS   rT   )+r   _match_valid_urlgroups_AREA_IDr   r   r   raise_geo_restricted_yes_playlistsortedr\   rr   r	   rz   rq   striprs   _LANGUAGE_FLAGlowerr   r   r   KeyErrorr   raise_login_requiredrW   int_search_regexurllibparseurlparsedict	parse_qslrD   update_replace	urlencodegeturlr   rZ   r
   r   r   )r   r6   idata	lang_coder   product_datar^   r   rP   r   rv   entryrw   duration_limitr   r   r   rS   
stream_urlr   old_stream_urlrT   subrL   r1   r   rD   r   r]   s   ``                       @@@@r#   re   z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!%%h/52Fjj+G#G1Z[ TE#ii5G" NN4??#&=l^1YKW\]d\eef$g%7$>@ #g,		*b0I0O0O0Q$S T	T ++GY

6@RTZT^T^_lTmnn()9: $ 3 3 7 7	8I J Qc

		A 		A ##L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 	* 	>>*-3 	C776?+eDwwu~$$T2.55u: .tf57 
 ww,-$$vT]B7>>45 1$8@ 	 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- =$)))<=	=s6   4R/ /1T!S)(T)$TTTTT)r&   r'   r(   r   _NETRC_MACHINErg   rh   r   r   r   r   r   r   r   re   r)   r%   r#   rz   rz      s    GNJZ&A	
 -
 . [(A*#t

 -
 .#& F/A
 -
 .?,F^ 	H N KK* B"A
r%   rz   c                       e Zd ZdddddddZ e ej                               Z e ej                               ZdZ	ed	d
Z
dddZd Zy)ViuOTTIndonesiaBaseIEg      ?r?   g      @g       @r>   desktop)verrB   averappverrA   r   Nr   )zx-session-idzx-client      )ADULTSteensc           
          | j                  dd ddi| j                  i | j                  d| j                  it	        j
                  d| j                  i      j                         d      d   t        _        y )	Nz"https://um.viuapi.io/user/identityzContent-typer   iiddeviceIdzDownloading token information)r   rD   r   r   r   )	r   _HEADERS_BASE_QUERY
_DEVICE_IDr?   r   r   r
  _TOKEN)r   s    r#   _real_initializez&ViuOTTIndonesiaBaseIE._real_initialize  sv    '+':':0$#%7I4==I>T%%>udoo>Z9:AAC0 (; (2
 3:(;$r%   )r&   r'   r(   r  rq   r   r   r  _SESSION_IDr  r  _AGE_RATINGS_MAPPERr  r)   r%   r#   r
  r
    sj    K ZTZZ\"Jjdjjl#KF $H 
;r%   r
  c                       e 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ddddddgdddddddd d!d"d g d#d$d%
dd&d'dddd(d$d)d*d+d,d-
dgZd. Zy/)0ViuOTTIndonesiaIEz?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
1165863142r-   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_)
r/   r0   rR   rQ   r1   rO   r2   r   upload_date	timestamp)r6   r7   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)r/   r0   rR   rQ   r2   r1   rO   r   r"  r!  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  )
r/   r0   r!  r"  r1   rO   r   r2   r%  	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  )
r/   r0   r"  r!  r1   r)  r%  r   r2   rO   c                 T   | j                  |      }| j                  ||      }| j                  d| |ddt        j                  i| j
                  ddi      }| j                  |d   |      \  }}| j                  d|d	|      d
   d   }|j                         D ]u  \  }}| j                  d|ddd      \  }	}
|	s"|
s%|j                  |	g       j                  |
|d       |
dk(  sO||	   j                  dt        ||   d       dd       w t        t        t        d | j!                  ||                  d      xs i }|t        |dd      xs |j#                  d      |j#                  d      xs |j#                  d      |j#                  d      t        |d      t%        |j#                  d            ||t        |ddt&              xs t'        |j#                  d             t        |d!d "      | j(                  j#                  |j#                  d#            d$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)rL   r0   )r   r[   )r0   r6   vttr   c                 (    | j                  d      dv S )Nz@type)	TVEpisodeMovie)r   r   s    r#   r   z1ViuOTTIndonesiaIE._real_extract.<locals>.<lambda>  s    aeeGn(>> r%   r   r1   display_titler   r2   rO   )imager6   dateCreated
episode_norN   )expected_typeepisodeNumber)actor.r   r   internal_age_rating)r/   r1   r2   rO   r   r"  rS   rT   rR   r%  r)  )rU   _download_webpager   r
  r  r  rV   _search_jsonrW   r   rZ   r\   r   r   listfilter_yield_json_ldr   r   r   r  )r   r6   
display_idwebpager^   rS   rT   initial_staterb   rL   r0   rQ   s               r#   re   zViuOTTIndonesiaIE._real_extract  sh   ^^C(
((j9((2:,?RU$&;&B&BcdmmcU\^bc ) e
 "EEjQZF[]gh)),g!##02 &++- 	HC**;SBU$O + =ID# $$T2.557 
 %<dO**$",]3-?"G!HL, 	  tF>@S@ST[]g@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%   Nrf   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  )r?   r   rX   urllib.parser   r   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r+   rj   rz   r
  r  r)   r%   r#   <module>rH     sy      	   !   O
I O
d!>I !>Hx
} x
v;M ;Bk
- k
r%   