3
b`,                 @   sx   d dl m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 G dd deZG d	d
 d
eZdS )    )unicode_literalsN   )InfoExtractor   )ExtractorErrorget_element_by_class
js_to_jsonstr_or_nonestrip_jsonpc               @   s   e Zd ZdZdZdZdddddd	d
dde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 ed	dd!d"d#dd$d%d	d&d'd(ed	d)d*id+d,d-dd.d/d	d0d1d2ed	dd3d4dd5d6d	d7d8d9ed	dd:ddgZed;d< Z	d=d> Z
d?d@ ZdAS )BYoukuIEyoukuu   优酷z(?x)
        (?:
            https?://(
                (?:v|player)\.youku\.com/(?:v_show/id_|player\.php/sid/)|
                video\.tudou\.com/v/)|
            youku:)
        (?P<id>[A-Za-z0-9]+)(?:\.html|/v\.swf|)
    z/http://v.youku.com/v_show/id_XMTc1ODE5Njcy.htmlZXMTc1ODE5Njcyu,   ★Smile﹗♡ Git Fresh -Booty Music舞蹈.mp4gQR@zre:^https?://.*u   。躲猫猫、Z36017967z"http://i.youku.com/u/UMTQ0MDcxODY4)	idtitleextduration	thumbnailuploaderuploader_iduploader_urltags)url	info_dictz:http://player.youku.com/player.php/sid/XNDgyMDQ2NTQw/v.swfT)r   only_matchingz4http://v.youku.com/v_show/id_XODgxNjg1Mzk2_ev_1.htmlZXODgxNjg1Mzk2u   武媚娘传奇 85g=
ףp>@u   疯狂豆花Z62583473z"http://i.youku.com/u/UMjUwMzMzODky)	r   r   r   r   r   r   r   r   r   z3http://v.youku.com/v_show/id_XMTI1OTczNDM5Mg==.htmlZXMTI1OTczNDM5Mgu   花千骨 04i;	  u   放剧场-花千骨Z	772849359z&http://i.youku.com/u/UMzA5MTM5NzQzNg==z/http://v.youku.com/v_show/id_XNjA1NzA2Njgw.htmlzVideo protected with passwordZXNjA1NzA2NjgwuH   邢義田复旦讲座之想象中的胡人—从“左衽孔子”说起g    `@Z
FoxJin1006Z	322014285z&http://i.youku.com/u/UMTI4ODA1NzE0MA==videopasswordZ100600)r   noter   paramsz/http://v.youku.com/v_show/id_XOTUxMzg4NDMy.htmlZXOTUxMzg4NDMyuB   我的世界☆明月庄主☆车震猎杀☆杀人艺术Minecraftgq=
ף@u   明月庄主moonZ38465621z"http://i.youku.com/u/UMTUzODYyNDg0z:http://video.tudou.com/v/XMjIyNzAzMTQ4NA==.html?f=46177805ZXMjIyNzAzMTQ4NAu*   卡马乔国足开大脚长传冲吊集锦i!  u   阿卜杜拉之星Z2382249z"http://i.youku.com/u/UOTUyODk5Ng==z/http://video.tudou.com/v/XMjE4ODI3OTg2MA==.htmlc               C   s(   dt tj djdd tdD f S )Nz%d%s c             S   s   g | ]}t jtjqS  )randomchoicestringascii_letters).0ir   r   FC:\Users\Broad\Desktop\All-Down\binaries\youtube_dl\extractor\youku.py
<listcomp>~   s    z%YoukuIE.get_ysuid.<locals>.<listcomp>   )inttimejoinranger   r   r   r%   	get_ysuid{   s    zYoukuIE.get_ysuidc             C   s$   ddddddddddd
}|j |S )NZh6Zh5Zh4Zh3Zh2h1)
3gpZ3gphdflvZflvhdr   Zmp4hdZmp4hd2Zmp4hd3Zhd2Zhd3)get)selffmZ_dictr   r   r%   get_format_name   s    zYoukuIE.get_format_namec          
      s   j |} jdd j   jddd  jd|d\}}|jd dd, }|d	d
|tj d d} jjjd}|r||d< d|i}|j	 j
   jd|d||dd }	|	jd}
|
r.|
jd}|d k	rd|krtdddnH|od|krtdddn,d|
jd }|d k	r&|d| 7 }t||	d }|d  } fd!d"|	d# D } j| ||||jd$|jd%|jd&t|jd'|	jd(i jd)|jd*d+	S )-Nz	youku.comZ__ysuidZ	xreferrerzhttp://www.youku.comzhttps://log.mmstat.com/eg.jszRetrieving cna infoZetagr   Z0590z192.168.1.1i  )vidZccodeZ	client_ipZutidZ	client_tsr   passwordRefererz"https://ups.youku.com/ups/get.jsonzDownloading JSON metadata)queryheadersdataerrorr   u$   因版权原因无法观看此视频z8Youku said: Sorry, this video is available in China onlyT)expectedu   该视频被设为私密z(Youku said: Sorry, this video is privatezYouku server reported error %icodez: videor   c          
      sT   g | ]L}|j d dkr|d  j|j dddt|j d|j d|j dd	qS )
Zchannel_typetailm3u8_urlstream_typer   m3u8_nativesizewidthheight)r   	format_idr   protocolfilesizerC   rD   )r0   r3   r(   )r#   stream)r1   r   r%   r&      s   z)YoukuIE._real_extract.<locals>.<listcomp>rH   secondslogousernameuseridr   Zhomepager   )	r   r   formatsr   r   r   r   r   r   )	_match_id_set_cookier,   _download_webpage_handler8   r)   _downloaderr   r0   updategeo_verification_headers_download_jsonr   _sort_formatsr	   )r1   r   video_id_urlhZcnaZbasic_data_paramsvideo_passwordr8   r9   r:   Z
error_notemsg
video_datar   rM   r   )r1   r%   _real_extract   s^    





zYoukuIE._real_extractN)__name__
__module____qualname__IE_NAMEIE_DESC
_VALID_URLlist_TESTSstaticmethodr,   r3   r]   r   r   r   r%   r      s   






r   c               @   sd   e 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gZdd Zdd ZdS )YoukuShowIEz9https?://list\.youku\.com/show/id_(?P<id>[0-9a-z]+)\.htmlz
youku:showz8http://list.youku.com/show/id_zc7c670be07ff11e48b3f.htmlZzc7c670be07ff11e48b3fu   花千骨 DVD版z$md5:a1ae6f5618571bbeb5c9821f9c81b558)r   r   description2   )r   r   playlist_countz8http://list.youku.com/show/id_zefbfbd70efbfbd780bef.htmlZzefbfbd70efbfbd780befu   超级飞侠3z$md5:275715156abebe5ccc2a1992e9d56b98   z8http://list.youku.com/show/id_za7c275ecd7b411e1a19e.htmlT)r   r   z8http://list.youku.com/show/id_zefbfbd61237fefbfbdef.htmlz8http://list.youku.com/show/id_z20eb4acaf5c211e3b2ad.htmlc                s|   d|d<  j ||||dd djd}|d kr6d d gS td|pHtd|}|d krZtd	tjd
|}| fdd|D fS )Ncbcallbackc             S   s   t t| S )N)r   r
   )sr   r   r%   <lambda>  s    z.YoukuShowIE._extract_entries.<locals>.<lambda>)r7   r   transform_sourcehtmlzp-drama-gridzp-drama-half-rowzNo episodes foundz<a[^>]+href="([^"]+)"c                s$   g | ]} j  j|d tj qS )zhttp:)
url_result_proto_relative_urlr   ie_key)r#   	video_url)r1   r   r%   r&     s   z0YoukuShowIE._extract_entries.<locals>.<listcomp>)rU   r0   r   r   refindall)r1   Zplaylist_data_urlshow_idr   r7   playlist_dataZ
drama_list
video_urlsr   )r1   r%   _extract_entries   s    


zYoukuShowIE._extract_entriesc             C   s&  | j |}| j||}g }| j| jd|d|td}| jd|d|d ddd	\}}| jd
|d}tjd|}	|j	| xXt
|	D ]L\}
}||krq| jd|d|
d  |d |dd	\}}|d k	r|j	| qW | jd|dd}|r|jdd nd }td|}|rtd|nd }| j||||S )Nzvar\s+PageConfig\s*=\s*({.+});zpage config)rp   z!http://list.youku.com/show/modulez&Downloading initial playlist data pageshowidZshowInfo)r   tab)r   r7   z<div[^>]+id="(reload_\d+)zfirst page reload idz<li[^>]+data-id="([^"]+)">z"http://list.youku.com/show/episodez!Downloading playlist data page %dr   )r   stagerh   F)fatal,r   zp-introz
intro-more)rO   _download_webpage_parse_json_search_regexr   r{   _html_search_regexrv   rw   extend	enumerate_html_search_metasplitr   playlist_result)r1   r   rx   webpageentriespage_configZ
first_pageZinitial_entriesZfirst_page_reload_idZ
reload_idsidxZ	reload_idrX   Znew_entriesdescplaylist_titleZ	detail_liplaylist_descriptionr   r   r%   r]     s>    





zYoukuShowIE._real_extractN)r^   r_   r`   rc   ra   re   r{   r]   r   r   r   r%   rg      s(   
rg   )
__future__r   r   rv   r!   r)   commonr   utilsr   r   r   r	   r
   r   rg   r   r   r   r%   <module>   s   	 I