3
b`/3                 @   s   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 ddlmZmZmZmZmZmZmZmZm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_b64decode
compat_ord
compat_strcompat_urllib_parse_urlencode)	determine_extencode_data_uriExtractorErrorint_or_none
orderedSetparse_iso8601str_or_noneurl_basenameurshiftc            
   @   s   e Zd ZdZdZdgZdZddddd	d
dddidddddddddidddddddddddiddddddddddgZdd  Zd!d" Z	e
d#d$ Zd%d& Zd'd( Zd)S )*LeIEu	   乐视网zlhttps?://(?:www\.le\.com/ptv/vplay|(?:sports\.le|(?:www\.)?lesports)\.com/(?:match|video))/(?P<id>\d+)\.htmlCNz#http://www.le.com/ptv/vplay/%s.htmlz)http://www.le.com/ptv/vplay/22005890.htmlZ edadcfe5406976f42f9f266057ee5e40Z22005890mp4uB   第87届奥斯卡颁奖礼完美落幕 《鸟人》成最大赢家z$md5:a9cb175fd753e2962176b7beca21a47c)idexttitledescriptionhls_prefer_nativeT)urlmd5	info_dictparamsz(http://www.le.com/ptv/vplay/1415246.htmlZ1415246u   美人天下01z$md5:28942e650e82ed4fcc8e4de919ee854d)r   r   r   zFThis video is available only in Mainland China, thus a proxy is neededz(http://www.le.com/ptv/vplay/1118082.htmlZ 2424c74948a62e5f31988438979c5ad1Z1118082u   与龙共舞 完整版z$md5:7506a5eeb1722bb9d4068f85024e3986)noter   r   r   r   z(http://sports.le.com/video/25737697.html)r   only_matchingz-http://www.lesports.com/match/1023203003.htmlz*http://sports.le.com/match/1023203003.htmlc             C   s4   d}x*||k r.t |d|d@ d>  }|d7 }qW |S )Nr   r      )r   )selfparam1param2Z_loc3_ r%   FC:\Users\Broad\Desktop\All-Down\binaries\youtube_dl\extractor\leeco.pyrorS   s
    
zLeIE.rorc             C   s   d}| j ||d |A S )NiC   )r'   )r"   r#   Z_loc2_r%   r%   r&   calc_time_keyZ   s    zLeIE.calc_time_keyc             C   s   | d d j dj dkr| S | dd  } tdt|  }x@t| D ]4\}}t|}|d |d| < |d |d| d < qDW t|d }||d  |d |  }tt| }x8tt| D ](}|d|  d |d| d   ||< qW t|S )N   zutf-8Zvc_01r      r      )decodelower	bytearraylen	enumerater   rangebytes)encrypted_dataZ_loc4_idxvalbZ_loc7_ir%   r%   r&   decrypt_m3u8_   s    (zLeIE.decrypt_m3u8c             C   sF   |d d }|d dkrB|d }|dkr2| j   ntd| dd	d S )
Nmsgs
playstatusstatusr   flagr   zGeneric error. flag = %dT)expected)raise_geo_restrictedr   )r"   	play_jsonr;   r=   r%   r%   r&   _check_errorsr   s    
zLeIE._check_errorsc                s  j | j| }jd d ddddjttj dddj d	}j|  fd
d}g }g }|d d }|d d }x|jdg j	 D ]\}	}
|	|krq|j
|	 ||
d  }xz|||	j	 D ]h\}}|t|
d d||	f |dkrdndt|	d}|	d'd  dkr.t|	d d( |d< |j
| qW qW j|d) tjd|dd ddtjddd }jd!|d"d#} ||d$ |d% ||d&S )*Nz.http://player-pc.le.com/mms/out/video/playJsonzDownloading flash playJson datar   i   i  z
www.le.comZcn)r   ZplatidZsplatidformatsourceZtkeydomainZregion)queryheadersc          	      s\   j |  d| dddddd}j|d d d	  d
| d}j|j }dt|diS )Nz$Download JSON metadata for format %sr      Zios)Zm3vrC   expecttss)rF   nodelistr   locationz*Downloading m3u8 information for format %s)r   hlszapplication/vnd.apple.mpegurl)_download_json_request_webpager9   readr   )	media_url	format_idZ
nodes_datareqZ	m3u8_data)media_idr"   r%   r&   get_flash_urls   s    z*LeIE._real_extract.<locals>.get_flash_urlsr:   playurlrE   r   dispatchz%s-%srM   m3u8_nativehttp)r   r   rR   protocolqualitypheightr[   rR   u   发布时间&nbsp;([^<>]+) zpublish time)default    )hours)	delimitertimezoner   F)fatalr   pic)r   formatsr   	thumbnailr   	timestampri   )r]   r[   rR   )	_match_id_download_webpagerN   r)   inttimegeo_verification_headersrA   getitemsappendr
   r   _sort_formatsr   _html_search_regexdatetime	timedelta_html_search_meta)r"   r   pageZplay_json_flashrU   Zextracted_formatsrf   rV   Zplay_domainrR   Zformat_datarQ   rZ   
format_urlfpublish_timer   r%   )rT   r"   r&   _real_extract|   sZ    




zLeIE._real_extractN)__name__
__module____qualname__IE_DESC
_VALID_URL_GEO_COUNTRIES_URL_TEMPLATE_TESTSr'   r)   staticmethodr9   rA   r{   r%   r%   r%   r&   r      sH   




r   c                   sl   e 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e fddZdd Z  ZS )LePlaylistIEz;https?://[a-z]+\.le\.com/(?!video)[a-z]+/(?P<id>[a-z0-9_]+)zhttp://www.le.com/tv/46177.htmlZ46177u   美人天下z$md5:395666ff41b44080396e59570dbac01c)r   r   r   #   )r   r   playlist_countz(http://tv.le.com/izt/wuzetian/index.htmlZwuzetianu   武媚娘传奇z$md5:e12499475ab3d50219e5bba00b3cb248`   )r   r   playlist_mincountz)http://tv.le.com/pzt/lswjzzjc/index.shtmlT)r   r    z"http://www.le.com/comic/92063.htmlz5http://list.le.com/listn/c1009_sc532002_d2_p1_o1.htmlc                s   t j|rdS tt| j|S )NF)r   suitablesuperr   )clsr   )	__class__r%   r&   r      s    zLePlaylistIE.suitablec                st    j |} j||}ttjd|} fdd|D } jd|ddjdd } jd	|dd} j||||d
S )Nz8<a[^>]+href="http://www\.letv\.com/ptv/vplay/(\d+)\.htmlc                s    g | ]} j tj| d dqS )ZLe)ie)
url_resultr   r   ).0rT   )r"   r%   r&   
<listcomp>   s   z.LePlaylistIE._real_extract.<locals>.<listcomp>keywordsF)rd   u   ，r   r   )playlist_titleplaylist_description)rj   rk   r   refindallrv   splitplaylist_result)r"   r   playlist_idrw   	media_idsentriesr   r   r%   )r"   r&   r{      s    



zLePlaylistIE._real_extract)	r|   r}   r~   r   r   classmethodr   r{   __classcell__r%   r%   )r   r&   r      s&   
r   c               @   sj   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	gZedd Zdd Zdd Z	dS )LetvCloudIEu	   乐视云z)https?://yuntv\.letv\.com/bcloud.html\?.+z=http://yuntv.letv.com/bcloud.html?uu=p7jnfw5hw9&vu=467623dedfZ 26450599afd64c513bc77030ad15db44Zp7jnfw5hw9_467623dedfr   zVideo p7jnfw5hw9_467623dedf)r   r   r   )r   r   r   zvhttp://yuntv.letv.com/bcloud.html?uu=p7jnfw5hw9&vu=ec93197892&pu=2c7cd40209&auto_play=1&gpcflag=1&width=640&height=360Z e03d9cc8d9c13191e1caf277e42dbd31Zp7jnfw5hw9_ec93197892zVideo p7jnfw5hw9_ec93197892z=http://yuntv.letv.com/bcloud.html?uu=p7jnfw5hw9&vu=187060b6fdZ cb988699a776b22d4a41b9d43acfb3acZp7jnfw5hw9_187060b6fdzVideo p7jnfw5hw9_187060b6fdc                sx    d dkr"d}ddddddg}n d d	kr@d
}dddddg}dj  fdd|D | }tj|jdj  d< d S )NcfflashZ 2f9d6924b33a165a6d8b5d3d42f4f987rC   ranuuvervuhtml5Zfbeh5player12c43eccf2bec3300344bver c                s   g | ]}| |  qS r%   r%   )r   item)objr%   r&   r   +  s    z)LetvCloudIE.sign_data.<locals>.<listcomp>zutf-8sign)joinhashlibr   encode	hexdigest)r   saltrp   
input_datar%   )r   r&   	sign_data#  s    zLetvCloudIE.sign_datac          
      s    fdd}||t j  }|jddkr<|||d }|jds|jdrftd|d  d	d
n(|jdrtd|d  d	d
ntddd }g }x|d d d j D ]h}	|	d }
||
d }|t|}|j|t|t|
jdt|
jdt|
jdt|
jdd qW |S )Nc                s<   | dddt |d}j| jdt|  d|  S )Nz2.2zfirefox44.0json)r   r   r   rC   r   r   r   z!http://api.letvcloud.com/gpc.php?z%Downloading playJson data for type %s)r   r   rN   r	   )r   rh   data)rT   r"   r   r   r%   r&   get_play_json/  s    

z/LetvCloudIE._get_formats.<locals>.get_play_jsoncodeiW'  rh   r   messagezLetv cloud said: %sT)r>   zLetv cloud returned error %dz$Letv cloud returned an unknown errorc             S   s   t | jdS )Nzutf-8)r   r-   )sr%   r%   r&   	b64decodeK  s    z+LetvCloudIE._get_formats.<locals>.b64decode
video_infomediaplay_urlZmain_urlvtype
definitionZvwidthZvheight)r   r   rR   format_notewidthr]   )	rm   ro   r   valuesr   rq   r
   r   r   )r"   r   r   r   rT   r   r@   r   rf   r   r   r   Zdecoded_urlr%   )rT   r"   r   r   r&   _get_formats.  s0    


zLetvCloudIE._get_formatsc             C   s   t jd|}t jd|}| s$| r4td| dd|jd}|jd}|d | }| jd|||| jd	||| }| j| |d
| |dS )Nz
uu=([\w]+)z
vu=([\w]+)zInvalid URL: %sT)r>   r   _r   r   zVideo %s)r   r   rf   )r   searchr   groupr   rr   )r"   r   Zuu_mobjZvu_mobjr   r   rT   rf   r%   r%   r&   r{   ^  s    

 
zLetvCloudIE._real_extractN)
r|   r}   r~   r   r   r   r   r   r   r{   r%   r%   r%   r&   r     s(   

0r   )
__future__r   rt   r   r   rm   commonr   compatr   r   r   r	   utilsr
   r   r   r   r   r   r   r   r   r   r   r   r%   r%   r%   r&   <module>   s   , 16