U
    g*                     @   sp   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mZ G dd deZG dd	 d	eZdS )
    N   )InfoExtractor   )ExtractorError
clean_html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dddded	ddi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+ed	dd,d-d
d.d/d0g d1d2d3d4	dgZed5d6 Z	d7d8 Z
d9d: Zd;S )<YoukuIEZyoukuu   优酷z(?x)
        (?:
            https?://(
                (?:v|play(?:er)?)\.(?:youku|tudou)\.com/(?:v_show/id_|player\.php/sid/)|
                video\.tudou\.com/v/)|
            youku:)
        (?P<id>[A-Za-z0-9]+)(?:\.html|/v\.swf|)
    z:http://player.youku.com/player.php/sid/XNDgyMDQ2NTQw/v.swfTurlZonly_matchingz/http://v.youku.com/v_show/id_XNjA1NzA2Njgw.htmlzVideo protected with passwordZXNjA1NzA2Njgwmp4uH   邢義田复旦讲座之想象中的胡人—从“左衽孔子”说起g    `@zre:^https?://.*Z
FoxJin1006Z	322014285z&http://i.youku.com/u/UMTI4ODA1NzE0MA==)	idexttitleduration	thumbnailuploaderuploader_iduploader_urltagsvideopasswordZ100600Z404)r   note	info_dictparamsskipz/http://v.youku.com/v_show/id_XOTUxMzg4NDMy.htmlZXOTUxMzg4NDMyuB   我的世界☆明月庄主☆车震猎杀☆杀人艺术Minecraftgq=
ף@u   明月庄主moonZ38465621z6https://www.youku.com/profile/index/?uid=UMTUzODYyNDg0)r   r   z4https://v.youku.com/v_show/id_XNTA2NTA0MjA1Mg==.htmlZXNTA2NTA0MjA1MguO   Minecraft我的世界：建造超大巨型航空飞机，菜鸟vs高手vs黑客gףp=
@u   波哥游戏解说Z	156688084z6https://www.youku.com/profile/index/?uid=UNjI2NzUyMzM2z4https://v.youku.com/v_show/id_XNTE1MzczOTg4MA==.htmlZXNTE1MzczOTg4MAu   国产超A特工片gQv@u   陈晓娟说历史Z
1640913339z:https://www.youku.com/profile/index/?uid=UNjU2MzY1MzM1Ng==z8https://play.tudou.com/v_show/id_XNjAxNjI2OTU3Ng==.html?ZXNjAxNjI2OTU3Ngu3   阿斯塔意识到哈里杀了人，自己被骗了z4https://m.ykimg.com/0541010164F732752794D4D7B70331D1Z88758207z6https://www.youku.com/profile/index/?uid=UMzU1MDMyODI4u   英美剧场g
ףp=:R@)	r   r   r   r   r   r   r   r   r   c                	   C   s&   d tt dtjtjddS )Nz{}{}    )k)formatinttimejoinrandomchoicesstringascii_letters r(   r(   :/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/youku.py	get_ysuidi   s    zYoukuIE.get_ysuidc                 C   s$   ddddddddddd
}| |S )Nh6h5h4h3h2h1)
Z3gpZ3gphdZflvZflvhdr   Zmp4hdZmp4hd2Zmp4hd3Zhd2Zhd3)get)selfZfm_dictr(   r(   r)   get_format_namen   s    zYoukuIE.get_format_namec                    s    |} dd    ddd  d|d\}}|jd dd	 }|d
d|t d d} d}|r|||d< d|i}|    j	d|d||dd }	|	
d}
|
r,|

d}|d k	rd|krtdddnJ|rd|krtdddn0d|

d }|d k	r$|dt| 7 }t||	d  }|d! } fd"d#|	d$ D }||||
d%|
d&|
d't|
d(|	
d)i 
d*|
d+d,	S )-Nz	youku.comZ__ysuidZ	xreferrerzhttp://www.youku.comzhttps://log.mmstat.com/eg.jszRetrieving cna infoetagr   Z0564z192.168.1.1i  )ZvidZccodeZ	client_ipZutidZ	client_tsr   passwordZ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}| d dkr|d  | dddt| d| d| dd	qS )
Zchannel_typetailZm3u8_urlZstream_typer   Zm3u8_nativesizewidthheight)r   Z	format_idr   protocolfilesizerA   rB   )r1   r4   r!   ).0streamr2   r(   r)   
<listcomp>   s    z)YoukuIE._real_extract.<locals>.<listcomp>rF   secondsZlogousernameZuseridr   Zhomepager   )	r   r   formatsr   r   r   r   r   r   )	_match_idZ_set_cookier*   Z_download_webpage_handler9   r"   	get_paramupdateZgeo_verification_headers_download_jsonr1   r   r   r	   )r2   r   Zvideo_id_ZurlhZcnaZbasic_data_paramsZvideo_passwordr9   r:   r;   Z
error_notemsgZ
video_datar   rK   r(   rG   r)   _real_extract}   s~    
  

   

  

zYoukuIE._real_extractN)__name__
__module____qualname__IE_NAMEZIE_DESC
_VALID_URLlist_TESTSstaticmethodr*   r4   rR   r(   r(   r(   r)   r      s   
 L
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   Zplaylist_countz8http://list.youku.com/show/id_zefbfbd70efbfbd780bef.htmlZzefbfbd70efbfbd780befu   超级飞侠3z$md5:275715156abebe5ccc2a1992e9d56b98   z8http://list.youku.com/show/id_za7c275ecd7b411e1a19e.htmlTr   z8http://list.youku.com/show/id_zefbfbd61237fefbfbdef.htmlz8http://list.youku.com/show/id_z20eb4acaf5c211e3b2ad.htmlc                    s|   d|d<  j ||||dd dd}|d kr6d d gS td|pHtd|}|d krZtd	td
|}| fdd|D fS )Ncbcallbackc                 S   s   t t| S )N)r   r
   )sr(   r(   r)   <lambda>       z.YoukuShowIE._extract_entries.<locals>.<lambda>)r8   r   transform_sourcehtmlzp-drama-gridzp-drama-half-rowzNo episodes foundz<a[^>]+href="([^"]+)"c                    s$   g | ]}   |d t qS )zhttp:)Z
url_resultZ_proto_relative_urlr   Zie_key)rE   Z	video_urlrG   r(   r)   rH      s   z0YoukuShowIE._extract_entries.<locals>.<listcomp>)rO   r1   r   r   refindall)r2   Zplaylist_data_urlshow_idr   r8   Zplaylist_dataZ
drama_listZ
video_urlsr(   rG   r)   _extract_entries   s*       
zYoukuShowIE._extract_entriesc                 C   s$  |  |}| ||}g }| j| d|d|td}| jd|d|d ddd	\}}| d
|d}td|}	|	| t
|	D ]N\}
}||krq| jd|d|
d  |d |dd	\}}|d k	r|	| q| jd|dd}|r|dd nd }td|}|rtd|nd }| ||||S )Nzvar\s+PageConfig\s*=\s*({.+});zpage config)rd   z!http://list.youku.com/show/modulez&Downloading initial playlist data pageZshowidZshowInfo)r   tab)r   r8   z<div[^>]+id="(reload_\d+)zfirst page reload idz<li[^>]+data-id="([^"]+)">z"http://list.youku.com/show/episodezDownloading playlist data page r   )r   Zstager\   F)fatal,r   zp-introz
intro-more)rL   Z_download_webpageZ_parse_jsonZ_search_regexr   ri   Z_html_search_regexrf   rg   extend	enumerateZ_html_search_metasplitr   Zplaylist_result)r2   r   rh   ZwebpageentriesZpage_configZ
first_pageZinitial_entriesZfirst_page_reload_idZ
reload_idsidxZ	reload_idrP   Znew_entriesdescZplaylist_titleZ	detail_liZplaylist_descriptionr(   r(   r)   rR      sn    
    
  
 

    zYoukuShowIE._real_extractN)rS   rT   rU   rW   rV   rY   ri   rR   r(   r(   r(   r)   r[      s8   
r[   )r$   rf   r&   r"   commonr   utilsr   r   r   r   r	   r
   r   r[   r(   r(   r(   r)   <module>   s    
 8