o
    i*                     @   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 )<YoukuIE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urlonly_matchingz/http://v.youku.com/v_show/id_XNjA1NzA2Njgw.htmlzVideo protected with passwordXNjA1NzA2Njgwmp4uH   邢義田复旦讲座之想象中的胡人—从“左衽孔子”说起g    `@zre:^https?://.*
FoxJin1006	322014285z&http://i.youku.com/u/UMTI4ODA1NzE0MA==)	idexttitleduration	thumbnailuploaderuploader_iduploader_urltagsvideopassword100600404)r   note	info_dictparamsskipz/http://v.youku.com/v_show/id_XOTUxMzg4NDMy.htmlXOTUxMzg4NDMyuB   我的世界☆明月庄主☆车震猎杀☆杀人艺术Minecraftgq=
ף@u   明月庄主moon38465621z6https://www.youku.com/profile/index/?uid=UMTUzODYyNDg0)r   r!   z4https://v.youku.com/v_show/id_XNTA2NTA0MjA1Mg==.htmlXNTA2NTA0MjA1MguO   Minecraft我的世界：建造超大巨型航空飞机，菜鸟vs高手vs黑客gףp=
@u   波哥游戏解说	156688084z6https://www.youku.com/profile/index/?uid=UNjI2NzUyMzM2z4https://v.youku.com/v_show/id_XNTE1MzczOTg4MA==.htmlXNTE1MzczOTg4MAu   国产超A特工片gQv@u   陈晓娟说历史
1640913339z:https://www.youku.com/profile/index/?uid=UNjU2MzY1MzM1Ng==z8https://play.tudou.com/v_show/id_XNjAxNjI2OTU3Ng==.html?XNjAxNjI2OTU3Ngu3   阿斯塔意识到哈里杀了人，自己被骗了z4https://m.ykimg.com/0541010164F732752794D4D7B70331D1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 r7   r7   J/home/ubuntu/.local/lib/python3.10/site-packages/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)
3gp3gphdflvflvhdr   mp4hdmp4hd2mp4hd3hd2hd3)get)selffm_dictr7   r7   r8   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 urod|v rotddd|r{d|v r{tdddd|

d }|d u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.com__ysuid	xreferrerzhttp://www.youku.comzhttps://log.mmstat.com/eg.jszRetrieving cna infoetagr   0564z192.168.1.1i  )vidccode	client_iputid	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 | ]&}| d dkr|d  | dddt| d| d| dd	qS )
channel_typetailm3u8_urlstream_typer   m3u8_nativesizewidthheight)r   	format_idr   protocolfilesizerg   rh   )rI   rM   r0   ).0streamrJ   r7   r8   
<listcomp>   s    z)YoukuIE._real_extract.<locals>.<listcomp>rm   secondslogousernameuseridr   homepager   )	r   r   formatsr   r   r   r   r   r   )	_match_id_set_cookier9   _download_webpage_handler[   r1   	get_paramupdategeo_verification_headers_download_jsonrI   r   r   r	   )rJ   r   video_id_urlhcnabasic_data_paramsvideo_passwordr[   r\   r]   
error_notemsg
video_datar   ru   r7   rn   r8   _real_extract}   sp   





zYoukuIE._real_extractN)__name__
__module____qualname__IE_NAMEIE_DESC
_VALID_URLlist_TESTSstaticmethodr9   rM   r   r7   r7   r7   r8   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.htmlzc7c670be07ff11e48b3fu   花千骨 DVD版z$md5:a1ae6f5618571bbeb5c9821f9c81b558)r   r   description2   )r   r!   playlist_countz8http://list.youku.com/show/id_zefbfbd70efbfbd780bef.html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 u rd d gS td|p$td|}|d u r-td	td
|}| fdd|D fS )Ncbcallbackc                 S   s   t t| S )N)r   r
   )sr7   r7   r8   <lambda>   s    z.YoukuShowIE._extract_entries.<locals>.<lambda>)rZ   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:)
url_result_proto_relative_urlr   ie_key)rl   	video_urlrn   r7   r8   ro      s    z0YoukuShowIE._extract_entries.<locals>.<listcomp>)r|   rI   r   r   refindall)rJ   playlist_data_urlshow_idr    rZ   playlist_data
drama_list
video_urlsr7   rn   r8   _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 ]'\}
}||krIq@| jd|d|
d  |d |dd	\}}|d urg|	| q@| jd|dd}|ry|dd nd }td|}|rtd|nd }| ||||S )Nzvar\s+PageConfig\s*=\s*({.+});zpage config)r   z!http://list.youku.com/show/modulez&Downloading initial playlist data pageshowidshowInfo)r   tab)r    rZ   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   stager   F)fatal,r   zp-introz
intro-more)rv   _download_webpage_parse_json_search_regexr   r   _html_search_regexr   r   extend	enumerate_html_search_metasplitr   playlist_result)rJ   r   r   webpageentriespage_config
first_pageinitial_entriesfirst_page_reload_id
reload_idsidx	reload_idr~   new_entriesdescplaylist_title	detail_liplaylist_descriptionr7   r7   r8   r      sZ   





zYoukuShowIE._real_extractN)r   r   r   r   r   r   r   r   r7   r7   r7   r8   r      s:    
r   )r3   r   r5   r1   commonr   utilsr   r   r   r   r	   r
   r   r   r7   r7   r7   r8   <module>   s     
 8