3
b`3$                 @   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
	| j d}|j d | _d S )Nz,https://www.viu.com/api/apps/v2/authenticatezRequesting Viu authtestviu_desktopjsonZguestdefaultdesktopz1.0)	ZacctappidfmtZiidZ
languageidplatformuseridZ
useridtypever)queryheadersz
X-VIU-AUTH)_request_webpagegeo_verification_headersinfo_auth_token)selfZviu_auth_res r   DC:\Users\Broad\Desktop\All-Down\binaries\youtube_dl\extractor\viu.py_real_initialize   s    zViuBaseIE._real_initializec             O   s|   | j  }|jd| ji |j|jdi  ||d< | jd| f|t|d }|jddkrxtd| j|d f d	d
|S )Nz
X-VIU-AUTHr   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"   s    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_downloadzm3u8 downloadzGeo-restricted to India)url	info_dictparamsskipz'https://www.viu.com/en/media/1130599965Z
1130599965zJealousy Incarnate - Episode 1z$md5:d3d82375cab969415d2720b6894361e9zGeo-restricted to Indonesiaz)https://india.viu.com/en/media/1126286865T)r6   only_matchingc          
   C   s$  | j |}| jd|ddd|ddd d }|d	 }d }|jd
pJ|jd}|jd}|jd}|r||r||r|d|||f }n|d }| j||d}	| j|	 i }
xJ|j D ]>\}}tjd|}|sq|
j|j	dg j
||j	dd qW |||jd|jd|t|jdt|jd|	|
d	S )Nz	clip/loadzDownloading video datar   r   )r   r   r1   )r   itemr   r3   ZurlpathdZurlpathtdirforwholeZ	jwhlsfilez%s/%s/%shrefr0   z,^subtitle_(?P<lang>[^_]+)_(?P<ext>(vtt|srt))langr2   )r6   r2   r4   ZmoviealbumshownameZ	episodenoduration)	r1   r3   r4   seriesepisodeepisode_numberr?   formats	subtitles)	_match_idr+   r%   _extract_m3u8_formats_sort_formatsitemsrematch
setdefaultgroupappendr	   )r   r6   video_id
video_datar3   m3u8_urlZurl_pathr<   Zhls_filerC   rD   keyvaluemobjr   r   r   _real_extractQ   sD    





zViuIE._real_extractN)r,   r-   r.   
_VALID_URL_TESTSrT   r   r   r   r   r/   2   s$   
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)r1   r3      zGeo-restricted to Indonesia)r6   r7   playlist_countr9   c             C   s   | j |}| jd|dddd| ddd }g }xD|jd	g D ]4}|jd
}|sRq>t|}|j| jd| d| q>W | j|||jdS )Nzcontainer/loadzDownloading playlist infor   r   z	playlist-)r   r   r1   )r   	containerr;   r1   zviu:ZViur3   )rE   r+   r%   r   rM   
url_resultplaylist_result)r   r6   playlist_idplaylist_dataentriesr;   item_idr   r   r   rT      s$    

zViuPlaylistIE._real_extractN)r,   r-   r.   r'   rU   _TESTrT   r   r   r   r   rW      s   rW   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:1e7486a619b6399b25ba6a41c0fe5b2c)r1   r2   r3   r4   r5   zm3u8 downloadzGeo-restricted to Singapore)r6   r7   r8   r9   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         )HKSGTHPHc             C   s  t j| j|j \}}dd|d}| jj|j }|r>||d< | jd| |d|dd }|jd	}|srtd
dd| jd| |dd|d i|t j	d|j
dddd d }|jdi }	g }
xR|jdi j D ]>\}}t| jd|dd d}|
j|||dt|	j|d qW | j|
 i }xH|jdg D ]8}|jd}|sFq.|j|jdg j|dd q.W |d  j }|||jd!|jd"i jd|t|jd#t|jd$|jd%|
|d&
S )'Nzvod/ajax-detailweb)rZplatform_flag_label
product_idarea_idz#http://www.viu.com/ott/%s/index.phpzDownloading video info)r   dataZcurrent_productz+This video is not available in your region.T)r#   z;https://d1k2us671qcoau.cloudfront.net/distribute_web_%s.phpzDownloading stream infoZccs_product_idzhttps?://[^/]+r   )RefererOrigin)r   r   streamsizer6   zs(\d+)pheight)r   r0   )	format_idr6   rr   r2   filesizesubtitlenamesrt)r6   r2   synopsisr4   r@   numberr?   Zcover_image_url)
r1   r3   r4   r@   rA   rB   r?   	thumbnailrC   rD   )rI   rJ   rU   groups_AREA_IDr%   upperr&   r   searchrL   rH   r	   _search_regexrM   rG   rK   strip)r   r6   country_coderN   r   rl   Zproduct_datarO   stream_dataZstream_sizesrC   
vid_format
stream_urlrr   rD   subsub_urlr3   r   r   r   rT      sf    




zViuOTTIE._real_extractN)r,   r-   r.   r'   rU   rV   r|   rT   r   r   r   r   rb      s*   
rb   )
__future__r   rI   commonr   compatr   r   utilsr   r	   r
   r/   rW   rb   r   r   r   r   <module>   s   !S$