U
    g4                     @   s|   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 deZG dd	 d	eZG d
d deZdS )    N   )InfoExtractor   )ExtractorErrorint_or_noneparse_age_limitparse_iso8601try_getc                   @   s   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d Zd!ddZdd Zd"ddZd#ddZdd Zdd Zedd  Zd	S )$
VikiBaseIEz.https?://(?:www\.)?viki\.(?:com|net|mx|jp|fr)/zhttps://api.viki.io%sZ
112395910dZ100005az6.11.3ZFd96704b180208dbb2efa30fe44c48bd8690441af9f567ba8fd710a72badc85198f7472F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)geoZupcomingpaywallc              
   C   s"   ddddddt |t || jd	S )NZvivoz	vivo 1606z6.0.1Z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   sig r   9/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/viki.py_stream_headers$   s    zVikiBaseIE._stream_headers   c                 K   s^   |d|krdnd7 }d| d| d| j  }| jrB|d| j 7 }|ddd	 | D  S )
N?&z/v/zapp=z&token=r   c                 s   s"   | ]\}}d | d| V  qdS )r   =Nr   ).0namevalr   r   r   	<genexpr>6   s     z(VikiBaseIE._api_query.<locals>.<genexpr>)_APP_tokenjoinitems)r   pathversionkwargsqueryr   r   r   
_api_query1   s
    zVikiBaseIE._api_queryc                 C   sV   t t }| j|dd}t| jd| d| dtj	 }||| j
| fS )N   r'   asciiz&t=)inttimer*   hmacnew_APP_SECRETencodehashlibsha1	hexdigest_API_URL_TEMPLATE)r   r&   r   r)   r   r   r   r   _sign_query8   s    
  zVikiBaseIE._sign_queryDownloading JSON metadataTc                 C   s   |d kr|  |\}}}	n| j| j|dd }	| j|	|||||rNt| nd |r^d| jin|d krr| ||nd ddp~i }
| 	|

d| |
S )Nr   r,   r   i  )fatalr)   dataheadersZexpected_statuserror)r8   r7   r*   Z_download_jsonjsondumpsr3   r   r   _raise_errorget)r   r&   video_idnoter;   r)   r:   r   r   urlrespr   r   r   	_call_api?   s&         zVikiBaseIE._call_apic                 C   s<   |d krd S | j  d| }|r.t|ddn
| | d S )Nz said: T)expected)IE_NAMEr   report_warning)r   r=   r:   msgr   r   r   r@   O   s    zVikiBaseIE._raise_errorc                 C   s   | dpi  D ]j\}}|r|| jkr| j| }|dkrH| j|d n*|dkrrt|dd rh| d | | | | qd S )Nblockingr   )rJ   r   c                 S   s   | d d S )NZpaywallableZtvodr   xr   r   r   <lambda>_       z*VikiBaseIE._check_errors.<locals>.<lambda>zCThis video is for rent only or TVOD (Transactional Video On demand))rA   r%   _ERRORSZraise_geo_restrictedr	   r@   Zraise_login_required)r   r;   reasonstatusmessager   r   r   _check_errorsX   s    


zVikiBaseIE._check_errorsc                 C   s6   | j dd dd||ddd| _| js2| d d S )Nzsessions.jsonz
Logging inF)usernamepassword)r:   r;   tokenz)Login Failed: Unable to get session token)rF   rA   r#   rI   )r   rU   rV   r   r   r   _perform_logind   s       zVikiBaseIE._perform_loginc                 C   s,   || kr| | S t td |  p&d gd S )Nr   )listfiltervalues)dict_objZpreferred_keyr   r   r   dict_selectionk   s    zVikiBaseIE.dict_selection)r   )r9   NNT)T)__name__
__module____qualname___VALID_URL_BASEr7   
_DEVICE_IDr"   r   r2   Z_GEO_BYPASSZ_NETRC_MACHINEr#   rP   r   r*   r8   rF   r@   rT   rX   staticmethodr]   r   r   r   r   r
      s4   
       

	r
   c                   @   s
  e Zd ZdZej 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!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dRdS Z	dTS )UVikiIEr   z!(?: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-1Z1175236vZmp4z&Choosing Spouse by Lottery - Episode 1i_   ZFCCZ20201127)idexttitler   	age_limituploaderupload_date)rC   rD   	info_dictz4http://www.viki.com/videos/1023585v-heirs-episode-14Z1023585vzHeirs - Episode 14zSBS Contents HubiK&RZ20131121i     )	rf   rg   rh   rj   r   rk   ri   durationepisode_numberzBlocked in the US)rD   rl   skipzOhttp://www.viki.com/videos/1067139v-the-avengers-age-of-ultron-press-conferenceZ 86c0b5dbd4d83a6611a79987cc7a1989Z1067139vz.'The Avengers: Age of Ultron' Press Conferencez$md5:d70b2f9428f5488321bfe1db10d612eai`  iAUZ20150430z
Arirang TVr   )
rf   rg   rh   descriptionrn   r   rk   rj   
like_countri   z,Sorry. There was an error loading this video)rD   md5rl   rp   z0http://www.viki.com/videos/1048879v-ankhon-dekhiZ1048879vzAnkhon Dekhiip  iSZ20140820ZSpuul)	rf   rg   rh   rn   r   rk   rj   rr   ri   z=http://www.viki.com/videos/44699v-boys-over-flowers-episode-1Z 0a53dc252e6e690feccd756861495a8cZ44699vzBoys Over Flowers - Episode 1z$md5:b89cf50038b480b88b5b3c93589a9076iL  i=KZ20100405Zgroup8r   )rf   rg   rh   rq   rn   r   rk   rj   rr   ri   ro   )rD   rs   rl   z@http://www.viki.com/videos/50562v-poor-nastya-complete-episode-1Z 63f8600c1da6f01b7640eee7eca4f1daZ50562vZwebmz"Poor Nastya [COMPLETE] - Episode 1r   i^  i/KZ20101213Zad14065n)rf   rg   rh   rq   rn   r   rk   rj   Zuploader_idrr   ri   zPage not found!z!http://www.viki.com/player/44699vTrD   Zonly_matchingz0http://www.viki.com/videos/158036v-love-in-magicZ 41faaba0de90483fb4848952af7c7d0dZ158036vzI Planet EntertainmentZ20111122iNz$md5:44b1e46619df3a072294645c770cef36zLove In Magic)rf   rg   rj   rk   r   rq   rh   ri   c                    s    | jd ddi d} | t|dd t}t|d}|s|dd	krhd
| n|dpt}t|dd tpi } |d}| d| }dd |dpi 	 D } d d j
 dd d }t|dd t fdd|dpi D }	|d }
 j|
dd} jd|d|
d }
d!|
krbd"|
krb|
d#d!}
 |
}|| |d$i dt|d%t|d&|d'|d(tt|d)d t|d*||	|d+S ),Nvideos/.jsonzDownloading video JSON)r)   c                 S   s   | d d S )Ntitlesenr   rL   r   r   r   rN      rO   z&VikiIE._real_extract.<locals>.<lambda>numbertypeZepisodezEpisode rf   c                 S   s   | d d S )N	containerrw   r   rL   r   r   r   rN      rO   rx   z - c                 S   s(   g | ] \}}| d r||d  dqS )rD   )rf   rD   )rA   )r   Zthumbnail_idZ	thumbnailr   r   r   
<listcomp>   s
    
z(VikiIE._real_extract.<locals>.<listcomp>Zimageszplayback_streams/z.json?drms=dt3&device_id=zDownloading video streams JSONmainr   c                 S   s   | d d d S )NZ
propertiestrack	stream_idr   rL   r   r   r   rN      rO   c                 3   s*   | ]"   fd ddD fV  qdS )c                    s8   g | ]0}|j jd  d  d| d dqS )ru   z/auth_subtitles/.)r   )rg   rD   )r7   r*   )r   rg   )langr   r   rB   r   r   r|      s    z2VikiIE._real_extract.<locals>.<genexpr>.<listcomp>)ZsrtZvttNr   )r   r   r   rB   )r   r   r!      s   z'VikiIE._real_extract.<locals>.<genexpr>Zsubtitle_completionsrD   z Downloading initial MPD manifest)rC   z(?mi)<BaseURL>(http.+.mpd)znew manifest)defaultZ
mpdhd_highzsig=Zmpdhddescriptionsrn   Z
created_atauthorZ
author_urlc                 S   s   | d d S )NZlikescountr   rL   r   r   r   rN     rO   Zrating)rf   formatsrh   rq   rn   r   rj   Zuploader_urlrr   ri   
thumbnails	subtitlesro   )	_match_idrF   rT   r	   r   r   rA   dictr]   r%   rb   Z_download_webpageZ_search_regexreplaceZ_extract_mpd_formatsr   r   )r   rD   videorh   ro   Zcontainer_titlesZcontainer_titler   rE   r   Zmpd_urlZmpd_contentr   r   r   r   _real_extract   sf    

&    zVikiIE._real_extractN)
r^   r_   r`   rH   r
   ra   
_VALID_URLr.   _TESTSr   r   r   r   r   rd   r   s   ord   c                   @   sr   e Zd ZdZej 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gZdZdd Z	dd Z
dS )VikiChannelIEzviki:channelz*(?:tv|news|movies|artists)/(?P<id>[0-9]+c)z,http://www.viki.com/tv/50c-boys-over-flowersZ50czBoys Over Flowersz$md5:804ce6e7837e1fd527ad2f25420f4d59)rf   rh   rq   3   )rD   rl   Zplaylist_mincountz1http://www.viki.com/tv/1354c-poor-nastya-completeZ1354czPoor Nastya [COMPLETE]z$md5:05bf5471385aa8b21c18ad450e350525   zPage not found)rD   rl   Zplaylist_countrp   z-http://www.viki.com/news/24569c-showbiz-koreaTrt   z:http://www.viki.com/movies/22047c-pride-and-prejudice-2005z(http://www.viki.com/artists/2141c-shinee)ZepisodesZmoviesZclipsZtrailersc              
   c   s   | j | jddddd}| dp$| j}|D ]}|| jkrH| d|  d}|d	7 }||d
< | jd| d| d||dd|  d| d}|dpg D ]}| d| t	
 |V  q|dsLq*qLq*d S )NtrueZascry      )ZapprW   Zonly_ids	directionsortZper_pagevideo_typeszUnknown video_type: r   r   pagecontainers/r   rv   FzDownloading z JSON page )r)   r:   rC   responsezhttps://www.viki.com/videos/Zmore)r"   r#   Z_configuration_arg_video_typesrI   rF   rh   rA   Z
url_resultrd   Zie_key)r   
channel_idparamsr   Z
video_typeZpage_numresrB   r   r   r   _entries=  s2        
   
zVikiChannelIE._entriesc              	   C   sX   |  |}| d| d|d}| | | | ||| |d d| |d dS )Nr   rv   zDownloading channel JSONrw   rx   r   )r   rF   rT   Zplaylist_resultr   r]   )r   rD   r   Zchannelr   r   r   r   S  s    

 zVikiChannelIE._real_extractN)r^   r_   r`   rH   r
   ra   r   r   r   r   r   r   r   r   r   r     s<   	
r   )r4   r0   r>   r/   commonr   utilsr   r   r   r   r	   r
   rd   r   r   r   r   r   <module>   s   	b +