o
    ie2                     @   s   d dl Z d dl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 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 )    N   )InfoExtractor   )
compat_ord)	ExtractorErrordetermine_extencode_data_uri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.html edadcfe5406976f42f9f266057ee5e40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.html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.html 2424c74948a62e5f31988438979c5ad1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   s6   d}||k rt |d|d@ d>  }|d7 }||k s|S )Nr   r      )r   )selfparam1param2_loc3_ r(   J/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/leeco.pyrorM   s   zLeIE.rorc                 C   s   d}|  ||d |A S )NiC   )r*   )r$   r%   _loc2_r(   r(   r)   calc_time_keyT   s   zLeIE.calc_time_keyc                 C   s   | d d  d dkr| S | dd  } tdt|  }t| D ]\}}t|}|d |d| < |d |d| d < q!t|d }||d  |d |  }tt| }tt| D ]}|d|  d |d| d   ||< qZt|S )N   utf-8vc_01r      r      )decodelower	bytearraylen	enumerater   rangebytes)encrypted_data_loc4_idxvalb_loc7_ir(   r(   r)   decrypt_m3u8Y   s   &zLeIE.decrypt_m3u8c                 C   sH   |d d }|d dkr"|d }|dkr|    d S td| dd	d S )
Nmsgs
playstatusstatusr   flagr   zGeneric error. flag = %dTexpected)raise_geo_restrictedr   )r$   	play_jsonrC   rE   r(   r(   r)   _check_errorsl   s   zLeIE._check_errorsc                    s   | | }jd d ddddtt ddd d	}|  fd
d}g }g }|d d }|d d }|dg 	 D ]P\}	}
|	|v rTqK|
|	 ||
d  }|||		 D ]4\}}|t|
d | d|	 |dkr|dndt|	d}|	dd  dkrt|	d d |d< |
| qfqKtjd|dd ddtjddd}jd |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.comcn)r   platidsplatidformatsourcetkeydomainregion)queryheadersc              	      s`   j |  d| dddddd}j|d d d	  d
| d}| }dt|diS )Nz"Download JSON metadata for format r      ios)m3vrO   expecttss)rT   nodelistr   locationz(Downloading m3u8 information for format )r    hlszapplication/vnd.apple.mpegurl)_download_json_request_webpagerA   readr   )	media_url	format_id
nodes_datareq	m3u8_datamedia_idr$   r(   r)   get_flash_urls   s    

z*LeIE._real_extract.<locals>.get_flash_urlsrB   playurlrR   r   dispatch-r]   m3u8_nativehttp)r   r   rb   protocolqualitypheightu   发布时间&nbsp;([^<>]+) zpublish time)default    )hours)	delimitertimezoner   Ffatalr   pic)resro   )r   formatsr   	thumbnailr   	timestamp_format_sort_fields)	_match_id_download_webpager^   r-   inttimegeo_verification_headersrJ   getitemsappendr   r	   r   _html_search_regexdt	timedelta_html_search_meta)r$   r   pageplay_json_flashrh   extracted_formatsr}   ri   play_domainrb   format_datara   rn   
format_urlfpublish_timer   r(   rf   r)   _real_extractv   sh   




zLeIE._real_extractN)__name__
__module____qualname__IE_DESC
_VALID_URL_GEO_COUNTRIES_URL_TEMPLATE_TESTSr*   r-   staticmethodrA   rJ   r   r(   r(   r(   r)   r      sf    0

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.html46177u   美人天下z$md5:395666ff41b44080396e59570dbac01c)r   r   r   #   )r   r   playlist_countz(http://tv.le.com/izt/wuzetian/index.htmlwuzetianu   武媚娘传奇z$md5:e12499475ab3d50219e5bba00b3cb248`   )r   r   playlist_mincountz)http://tv.le.com/pzt/lswjzzjc/index.shtmlTr!   z"http://www.le.com/comic/92063.htmlz5http://list.le.com/listn/c1009_sc532002_d2_p1_o1.htmlc                    s   t |rdS t |S )NF)r   suitablesuper)clsr   	__class__r(   r)   r      s   zLePlaylistIE.suitablec                    st     |} ||}ttd|} fdd|D } jd|dd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 )Le)ie)
url_resultr   r   ).0rg   r$   r(   r)   
<listcomp>   s    z.LePlaylistIE._real_extract.<locals>.<listcomp>keywordsFry   u   ，r   r   )playlist_titleplaylist_description)r   r   r
   refindallr   splitplaylist_result)r$   r   playlist_idr   	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=467623dedf 26450599afd64c513bc77030ad15db44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=360 e03d9cc8d9c13191e1caf277e42dbd31p7jnfw5hw9_ec93197892zVideo p7jnfw5hw9_ec93197892z=http://yuntv.letv.com/bcloud.html?uu=p7jnfw5hw9&vu=187060b6fd cb988699a776b22d4a41b9d43acfb3acp7jnfw5hw9_187060b6fdzVideo p7jnfw5hw9_187060b6fdc                    sh    d dkrd}g d}n d dkrd}g d}d  fd	d
|D | }t|   d< d S )Ncfflash 2f9d6924b33a165a6d8b5d3d42f4f987)r   rO   ranuuvervuhtml5fbeh5player12c43eccf2bec3300344)r   r   r   bverr    c                    s   g | ]}| |  qS r(   r(   )r   itemobjr(   r)   r   %  s    z)LetvCloudIE.sign_data.<locals>.<listcomp>sign)joinhashlibr   encode	hexdigest)r   saltr   
input_datar(   r   r)   	sign_data  s   
zLetvCloudIE.sign_datac                    s   fdd}||t   }|ddkr|||d }|dsF|dr3td|d d	d
|drBtd|d  d	d
tddd }g }|d d d  D ]4}	|	d }
||
d }|t|}||t|t|
dt|
dt	|
dt	|
dd qV|S )Nc                    sB   | dddt |d}| dtj|  d|  S )Nz2.2zfirefox44.0json)r   r   r   rO   r   r   r   z!http://api.letvcloud.com/gpc.php?z#Downloading playJson data for type )strr   r^   urllibparse	urlencode)r   r   datarg   r$   r   r   r(   r)   get_play_json)  s   
	
z/LetvCloudIE._get_formats.<locals>.get_play_jsoncodeiW'  r   r   messagezLetv cloud said: {}TrF   zLetv cloud returned error %dz$Letv cloud returned an unknown errorc                 S   s   t | dS )Nr/   )base64	b64decoder3   )sr(   r(   r)   r   E  s   z+LetvCloudIE._get_formats.<locals>.b64decode
video_infomediaplay_urlmain_urlvtype
definitionvwidthvheight)r   r   rb   format_notewidthrr   )
r   r   r   rO   valuesr   r   r   r   r	   )r$   r   r   r   rg   r   rI   r   r}   r   r   r   decoded_urlr(   r   r)   _get_formats(  s2   



	zLetvCloudIE._get_formatsc                 C   s   t d|}t d|}|r|std| dd|d}|d}|d | }| d|||| d	||| }|d
| |dS )Nz
uu=([\w]+)z
vu=([\w]+)zInvalid URL: TrF   r   _r   r   zVideo )r   r   r}   )r   searchr   groupr   )r$   r   uu_mobjvu_mobjr   r   rg   r}   r(   r(   r)   r   X  s   

 zLetvCloudIE._real_extractN)
r   r   r   r   r   r   r   r   r   r   r(   r(   r(   r)   r      s:    		

0r   )r   datetimer   r   r   r   urllib.parser   commonr   compatr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r(   r(   r(   r)   <module>   s    , 16