
    yf4                         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  G d de      Z G d d	e      Z G d
 de      Zy)    N   )InfoExtractor   )ExtractorErrorint_or_noneparse_age_limitparse_iso8601try_getc                   ~    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
dddZd ZddZd Z	 ddZddZd Zd Zed        Zy	)
VikiBaseIEz.https?://(?:www\.)?viki\.(?:com|net|mx|jp|fr)/zhttps://api.viki.io%s
112395910d100005az6.11.3Fd96704b180208dbb2efa30fe44c48bd8690441af9f567ba8fd710a72badc85198f7472FvikiNz4Sorry, this content is not available in your region.z)Sorry, this content is not yet available.zCSorry, this content is only available to Viki Pass Plus subscribers)geoupcomingpaywallc           
      R    ddddddt        |      t        |      | j                  d	S )Nvivoz	vivo 1606z6.0.1WIFI z100005a-1625321982-3932)	zX-Viki-manufacturerzX-Viki-device-modelzX-Viki-device-os-verzX-Viki-connection-typezX-Viki-carrierzX-Viki-as-id	timestamp	signaturex-viki-app-ver)str_APP_VERSION)selfr   sigs      7/usr/lib/python3/dist-packages/yt_dlp/extractor/viki.py_stream_headerszVikiBaseIE._stream_headers$   s5    #)#.$+&, 5YS"//

 
	
    c                     |d|vrdndz  }d| d| d| j                    }| j                  r|d| j                  z  z  }|dj                  d |j                         D              z   S )	N?&z/v/zapp=z	&token=%sr   c              3   2   K   | ]  \  }}d | d|   yw)r$   =N ).0namevals      r   	<genexpr>z(VikiBaseIE._api_query.<locals>.<genexpr>6   s!     PID#4&#/Ps   )_APP_tokenjoinitems)r   pathversionkwargsquerys        r   
_api_queryzVikiBaseIE._api_query1   sj    s$C/WIQtfD4;;[4;;..ErwwPPPPPr!   c                 F   t        t        j                               }| j                  |d      }t        j                  | j
                  j                  d      | d| j                  d      t        j                        j                         }||| j                  |z  fS )N   r2   asciiz&t=)inttimer5   hmacnew_APP_SECRETencodehashlibsha1	hexdigest_API_URL_TEMPLATE)r   r1   r   r4   r   s        r   _sign_queryzVikiBaseIE._sign_query8   s    		$	a0hh##G,s9+.F.M.Mg.VX_XdXdffofofq 	#t55===r!   c                    || j                  |      \  }}}	n | j                  | j                  |d      z  }	| j                  |	|||||r$t	        j
                  |      j                  d      nd |rd| j                  in|| j                        nd d      xs i }
| j                  |
j                  d      |       |
S )N   r8   zutf-8r   i  )fatalr4   dataheadersexpected_statuserror)rD   rC   r5   _download_jsonjsondumpsr?   r   r    _raise_errorget)r   r1   video_idnoterH   r4   rG   r   r   urlresps              r   	_call_apizVikiBaseIE._call_api?   s    ="&"2"24"8IsC((4??4?+KKC""4uE59D!((1t>B&(9(9:BG-$..y#> # 6 <
 :< 	 	$((7+U3r!   c                 l    |y | j                   d|}|rt        |d      | j                  |       y )Nz said: T)expected)IE_NAMEr   report_warning)r   rK   rG   msgs       r   rO   zVikiBaseIE._raise_errorO   s6    =#||U3 t44$r!   c                 V   |j                  d      xs i j                         D ]  \  }}|s	|| j                  v s| j                  |   }|dk(  r| j                  |       n4|dk(  r/t	        |d       r| j                  d       | j                  |       | j                  |        y )Nblockingr   )rZ   r   c                     | d   d   S )Npaywallabletvodr(   xs    r   <lambda>z*VikiBaseIE._check_errors.<locals>.<lambda>_   s    q/?/G r!   zCThis video is for rent only or TVOD (Transactional Video On demand))rP   r0   _ERRORSraise_geo_restrictedr
   rO   raise_login_required)r   rH   reasonstatusmessages        r   _check_errorszVikiBaseIE._check_errorsX   s    #xx
39r@@B 		+NFF&DLL0,,v.U?--'-:y(t%GH))*op--g6!!'*		+r!   c           	          | j                  dd dd||d      j                  d      | _        | j                  s| j                  d       y y )Nzsessions.jsonz
Logging inF)usernamepassword)rG   rH   tokenz)Login Failed: Unable to get session token)rU   rP   r.   rY   )r   rk   rl   s      r   _perform_loginzVikiBaseIE._perform_logind   sQ    nnT<u&H= % ??Bs7| 	 {{ KL r!   c                 j    || v r| |   S t        t        d | j                                     xs d gd   S )Nr   )listfiltervalues)dict_objpreferred_keys     r   dict_selectionzVikiBaseIE.dict_selectionk   s:    H$M**VD(//"345?$CCr!   )rF   )zDownloading JSON metadataNNT)T)__name__
__module____qualname___VALID_URL_BASErC   
_DEVICE_IDr-   r   r>   _GEO_BYPASS_NETRC_MACHINEr.   rc   r    r5   rD   rU   rO   ri   rn   staticmethodru   r(   r!   r   r   r      s    GO/JDLZKKNF F?XG
Q> bf %
+M D Dr!   r   c                      e Zd ZdZdej
                  z  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!ed"d#
d$d%d&d'dd(d)d*d+d,ed	d-	ddd.d/d0dd1d2d3d4d5d6ed	d7d8d9d:d;d<d=d>d?d@dAdBdCdCed	dDdEd%dFdGdHdIdJdKddLdMdNdOdPd	dQd9gZdR Z	yS)TVikiIEr   z#%s(?:videos|player)/(?P<id>[0-9]+v)z*Free non-DRM video with storyboards in MPDzIhttps://www.viki.com/videos/1175236v-choosing-spouse-by-lottery-episode-11175236vmp4z&Choosing Spouse by Lottery - Episode 1i_   FCC20201127)idexttitler   	age_limituploaderupload_date)rR   rS   	info_dictz4http://www.viki.com/videos/1023585v-heirs-episode-141023585vzHeirs - Episode 14zSBS Contents HubiK&R20131121i     )	r   r   r   r   r   r   r   durationepisode_numberzBlocked in the US)rS   r   skipzOhttp://www.viki.com/videos/1067139v-the-avengers-age-of-ultron-press-conference 86c0b5dbd4d83a6611a79987cc7a19891067139vz.'The Avengers: Age of Ultron' Press Conferencez$md5:d70b2f9428f5488321bfe1db10d612eai`  iAU20150430z
Arirang TVr   )
r   r   r   descriptionr   r   r   r   
like_countr   z,Sorry. There was an error loading this video)rS   md5r   r   z0http://www.viki.com/videos/1048879v-ankhon-dekhi1048879vzAnkhon Dekhiip  iS20140820Spuul)	r   r   r   r   r   r   r   r   r   z=http://www.viki.com/videos/44699v-boys-over-flowers-episode-1 0a53dc252e6e690feccd756861495a8c44699vzBoys Over Flowers - Episode 1z$md5:b89cf50038b480b88b5b3c93589a9076iL  i=K20100405group8r   )r   r   r   r   r   r   r   r   r   r   r   )rS   r   r   z@http://www.viki.com/videos/50562v-poor-nastya-complete-episode-1 63f8600c1da6f01b7640eee7eca4f1da50562vwebmz"Poor Nastya [COMPLETE] - Episode 1r   i^  i/K20101213ad14065n)r   r   r   r   r   r   r   r   uploader_idr   r   zPage not found!z!http://www.viki.com/player/44699vTrS   only_matchingz0http://www.viki.com/videos/158036v-love-in-magic 41faaba0de90483fb4848952af7c7d0d158036vzI Planet Entertainment20111122iNz$md5:44b1e46619df3a072294645c770cef36zLove In Magic)r   r   r   r   r   r   r   r   c                      j                  |       j                  d ddi       } j                  |       t        |d t              }t        |j                  d            }|s]|j                  d      dk(  rd	|z  n|j                  d
      xs }t        |d t              xs i } j                  |d      }|d|}|j                  d      xs i j                         D cg c]  \  }}|j                  d      r||d   d  }	}} j                  dd j                  d      d   d   }
t        |
d       t         fd|j                  d      xs i j                         D              }|
d   } j                  |d      } j                  d|d|      }d|vrd|vr|j                  d d      } j                  |      }|| j                  |j                  d!i       d      t        |j                  d"            t!        |j                  d#            |j                  d$      |j                  d%      t        t        |d&             t#        |j                  d'            |	||d(S c c}}w ))Nvideos/.jsonzDownloading video JSON)r4   c                     | d   d   S )Ntitlesenr(   r`   s    r   rb   z&VikiIE._real_extract.<locals>.<lambda>   s    8T): r!   numbertypeepisodez
Episode %dr   c                     | d   d   S )N	containerr   r(   r`   s    r   rb   z&VikiIE._real_extract.<locals>.<lambda>   s    +x8P r!   r   z - imagesrS   )r   rS   zplayback_streams/z.json?drms=dt3&device_id=zDownloading video streams JSONmainr   c                     | d   d   d   S )N
propertiestrack	stream_idr(   r`   s    r   rb   z&VikiIE._real_extract.<locals>.<lambda>   s    AlOG,D[,Q r!   c              3      K   | ]@  }|d D cg c].  }|j                   j                  d d| d|       z  d0 c}f B yc c}w w))srtvttr   z/auth_subtitles/.)r   )r   rS   N)rC   r5   )r)   langr   r   r   rQ   s      r   r,   z'VikiIE._real_extract.<locals>.<genexpr>   s      d +/	  $	!%  ))DOO(#3D63%@I -< -W W"
 !% & d !%s   
A3A	 Asubtitle_completionsz Downloading initial MPD manifest)rR   z(?mi)<BaseURL>(http.+.mpd)znew manifest)default
mpdhd_highzsig=mpdhddescriptionsr   
created_atauthor
author_urlc                     | d   d   S )Nlikescountr(   r`   s    r   rb   z&VikiIE._real_extract.<locals>.<lambda>  s    qz'?R r!   rating)r   formatsr   r   r   r   r   uploader_urlr   r   
thumbnails	subtitlesr   )	_match_idrU   ri   r
   r   r   rP   dictru   r0   rz   keys_download_webpage_search_regexreplace_extract_mpd_formatsr	   r   )r   rS   videor   r   container_titlescontainer_titlethumbnail_id	thumbnailr   rT   r   mpd_urlmpd_contentr   r   rQ   s   `              @@r   _real_extractzVikiIE._real_extract   s   >>#&
%8(D\dfg5!:C@$UYYx%895:YYv5F)5SL>1Y^YbYbcgYhYtltE&u.PRVW][]"112BDIO!0%8E
 +0))H*=*C)J)J)Lf &lIPYP]P]^cPd U#
 f
 f
 ~~@H$//Z688>@@AC D"QR	 d 4999=S3T3ZXZ2`2`2b	d d	 u+,,WhEg,h$$);PW % Yw&6+@oog|<G++GX> ..uyy/LdS#EIIj$9:&uyy'>?		(+!IIl3%ge5R&ST(8)<=$",
 	
5fs   0#JN)
rv   rw   rx   rX   r   ry   
_VALID_URLr:   _TESTSr   r(   r!   r   r   r   r   s   G7*:T:TTJ<Z=#%
 F)*#% 

 $  a1EA#%$
 ?!$ B##%

 $  O14A#% 
	& R19#%"%
 "#& 3
 B10%#A$	
	mF^5
r!   r   c                       e Zd ZdZdej
                  z  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gZdZd Z	d Z
y)VikiChannelIEzviki:channelz,%s(?:tv|news|movies|artists)/(?P<id>[0-9]+c)z,http://www.viki.com/tv/50c-boys-over-flowers50czBoys Over Flowersz$md5:804ce6e7837e1fd527ad2f25420f4d59)r   r   r   3   )rS   r   playlist_mincountz1http://www.viki.com/tv/1354c-poor-nastya-complete1354czPoor Nastya [COMPLETE]z$md5:05bf5471385aa8b21c18ad450e350525   zPage not found)rS   r   playlist_countr   z-http://www.viki.com/news/24569c-showbiz-koreaTr   z:http://www.viki.com/movies/22047c-pride-and-prejudice-2005z(http://www.viki.com/artists/2141c-shinee)episodesmoviesclipstrailersc           
   #     K   | j                   | j                  ddddd}| j                  d      xs | j                  }|D ]  }|| j                  vr| j	                  d|        d}	 |d	z  }||d
<   | j                  d| d| d||dd|j                         |fz        }|j                  d      xs g D ],  }| j                  d| t        j                         |       . |j                  d      s y w)Ntrueascr      )apprm   only_ids	directionsortper_pagevideo_typeszUnknown video_type: r   r   pagezcontainers/r%   r   FzDownloading %s JSON page %d)r4   rG   rR   responsezhttps://www.viki.com/videos/more)r-   r.   _configuration_arg_video_typesrY   rU   r   rP   
url_resultr   ie_key)r   
channel_idparamsr   
video_typepage_numresrQ   s           r   _entrieszVikiChannelIE._entries=  s+    99t{{b
 --m<Q@Q@Q% 	J!2!22##&::,$GHHA!)vnn!*Qzl%@*TZbg6*:J:J:Lh9WW % Y !$
 3 9r pH//,H
*SU[UbUbUdfnoopwwv 		s   C:C<c           	         | j                  |      }| j                  d|z  |d      }| j                  |       | j                  | j	                  |      || j                  |d   d      | j                  |d   d            S )Nzcontainers/%s.jsonzDownloading channel JSONr   r   r   )r   rU   ri   playlist_resultr  ru   )r   rS   r   channels       r   r   zVikiChannelIE._real_extractS  s    ^^C(
..!5
!BJPjk7###MM*%z 148 7>@ 	@r!   N)rv   rw   rx   rX   r   ry   r   r   r   r  r   r(   r!   r   r   r     s    G@:C]C]]J=(A

   C-A

  	 ? L :/F8 ?L,@r!   r   )r@   r<   rM   r;   commonr   utilsr   r   r   r	   r
   r   r   r   r(   r!   r   <module>r	     sL        ! _D _DDg
Z g
T>@J >@r!   