U
    $Pf3$                     @   s   d dl mZ d dlZddlmZ ddlmZmZ ddlm	Z	m
Z
 G dd	 d	eZG d
d deZG dd deZG dd deZdS )    )unicode_literalsN   )InfoExtractor   )compat_kwargs
compat_str)ExtractorErrorint_or_nonec                   @   s   e Zd Zdd Zdd ZdS )	ViuBaseIEc                 C   s>   | j dd dddddddddd	d
	|  d}| d | _d S )Nz,https://www.viu.com/api/apps/v2/authenticatezRequesting Viu authtestviu_desktopjsonZguestdefaultZdesktopz1.0)	ZacctappidfmtZiidZ
languageidplatformZuseridZ
useridtypeverqueryheaders
X-VIU-AUTH)Z_request_webpagegeo_verification_headersinfo_auth_token)selfZviu_auth_res r   </tmp/pip-unpacked-wheel-7zdooeg3/youtube_dl/extractor/viu.py_real_initialize   s"     
zViuBaseIE._real_initializec                 O   s|   |   }|d| ji ||di  ||d< | jd| f|t|d }|ddkrxtd| j|d f d	d
|S )Nr   r   zhttps://www.viu.com/api/responsestatussuccessz%s said: %smessageTexpected)r   updater   get_download_jsonr   r   IE_NAME)r   pathargskwargsr   r   r   r   r   	_call_api"   s0      zViuBaseIE._call_apiN)__name__
__module____qualname__r   r+   r   r   r   r   r
      s   r
   c                   @   sX   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d ZdS )ViuIEz<(?:viu:|https?://[^/]+\.viu\.com/[a-z]{2}/media/)(?P<id>\d+)zEhttps://www.viu.com/en/media/1116705532?containerId=playlist-22168059Z
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/1130599965Z
1130599965zJealousy Incarnate - Episode 1z$md5:d3d82375cab969415d2720b6894361e9Geo-restricted to Indonesiaz)https://india.viu.com/en/media/1126286865T)r9   Zonly_matchingc              
   C   s   |  |}| jd|ddd|ddd d }|d	 }d }|d
pJ|d}|d}|d}|r||r||r|d|||f }n|d }| ||d}	| |	 i }
| D ]>\}}td|}|sq|
|	dg 
||	dd q|||d|d|t|dt|d|	|
d	S )Nz	clip/loadzDownloading video datar   r   r   r   r2   r   itemr   r4   ZurlpathdZurlpathtdirforwholeZ	jwhlsfilez%s/%s/%shrefr0   z,^subtitle_(?P<lang>[^_]+)_(?P<ext>(vtt|srt))langr3   r9   r3   r5   ZmoviealbumshownameZ	episodenoduration)	r2   r4   r5   seriesepisodeepisode_numberrE   formats	subtitles)	_match_idr+   r%   Z_extract_m3u8_formats_sort_formatsitemsrematch
setdefaultgroupappendr	   )r   r9   video_id
video_datar4   Zm3u8_urlZurl_pathrA   Zhls_filerI   rJ   keyvalueZmobjr   r   r   _real_extractQ   sV    
  



zViuIE._real_extractN)r,   r-   r.   
_VALID_URL_TESTSrW   r   r   r   r   r/   2   s8     r/   c                   @   s0   e Zd ZdZdZddddddd	Zd
d ZdS )ViuPlaylistIEzviu:playlistz9https?://www\.viu\.com/[^/]+/listing/playlist-(?P<id>\d+)z0https://www.viu.com/en/listing/playlist-22461380Z22461380zThe Good Wife)r2   r4      r=   )r9   r:   Zplaylist_countr<   c                 C   s   |  |}| jd|dddd| ddd }g }|d	g D ]4}|d
}|sPq<t|}|| d| d| q<| |||dS )Nzcontainer/loadzDownloading playlist infor   r   z	playlist-r>   r?   	containerr@   r2   zviu:ZViur4   )rK   r+   r%   r   rR   Z
url_resultZplaylist_result)r   r9   Zplaylist_idZplaylist_dataentriesr@   Zitem_idr   r   r   rW      s8    
 
    zViuPlaylistIE._real_extractN)r,   r-   r.   r'   rX   Z_TESTrW   r   r   r   r   rZ      s   
rZ   c                   @   sb   e Zd 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gZdddddZdd ZdS )ViuOTTIEzviu:ottz\https?://(?:www\.)?viu\.com/ott/(?P<country_code>[a-z]{2})/[a-z]{2}-[a-z]{2}/vod/(?P<id>\d+)zIhttp://www.viu.com/ott/sg/en-us/vod/3421/The%20Prime%20Minister%20and%20IZ3421r0   zA New Beginningz$md5:1e7486a619b6399b25ba6a41c0fe5b2cr1   r6   r7   zGeo-restricted to Singaporer8   zMhttp://www.viu.com/ott/hk/zh-hk/vod/7123/%E5%A4%A7%E4%BA%BA%E5%A5%B3%E5%AD%90Z7123u   這就是我的生活之道z$md5:4eb0d8b08cf04fcdc6bbbeb16043434fzGeo-restricted to Hong Kongr   r         )ZHKZSGZTHZPHc                 C   s  t | j| \}}dd|d}| j| }|r>||d< | jd| |d|dd }|d	}|srtd
dd| jd| |dd|d i|t 	d|
dddd d }|di }	g }
|di  D ]>\}}t| jd|dd d}|
|||dt|	|d q| |
 i }|dg D ]8}|d}|s@q(||dg |dd q(|d   }|||d!|d"i d|t|d#t|d$|d%|
|d&
S )'Nzvod/ajax-detailZweb)rZplatform_flag_labelZ
product_idarea_idz#http://www.viu.com/ott/%s/index.phpzDownloading video infor?   dataZcurrent_productz+This video is not available in your region.Tr"   z;https://d1k2us671qcoau.cloudfront.net/distribute_web_%s.phpzDownloading stream infoZccs_product_idzhttps?://[^/]+r   )ZRefererZOriginr   streamsizer9   zs(\d+)pheight)r   r0   )Z	format_idr9   rf   r3   filesizeZsubtitlenameZsrtrD   Zsynopsisr5   rF   numberrE   Zcover_image_url)
r2   r4   r5   rF   rG   rH   rE   Z	thumbnailrI   rJ   )rN   rO   rX   groups_AREA_IDr%   upperr&   r   searchrQ   rM   r	   Z_search_regexrR   rL   rP   strip)r   r9   Zcountry_coderS   r   rb   Zproduct_datarT   Zstream_dataZstream_sizesrI   Z
vid_formatZ
stream_urlrf   rJ   subZsub_urlr4   r   r   r   rW      s      
  	   


zViuOTTIE._real_extractN)r,   r-   r.   r'   rX   rY   rk   rW   r   r   r   r   r^      s>     r^   )
__future__r   rN   commonr   compatr   r   utilsr   r	   r
   r/   rZ   r^   r   r   r   r   <module>   s   !S$