U
    Mf                     @   sh   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	m
Z
mZmZmZmZ G dd deZdS )    N   )InfoExtractor   )ExtractorErrorint_or_nonestr_or_nonetry_getunescapeHTMLupdate_url_queryc                   @   sl   e Zd ZdZdZdZddeededddid	d
ddgZddddddddddZ	dd Z
dd ZdS )
HuyaLiveIEz9https?://(?:www\.|m\.)?huya\.com/(?P<id>[^/#?&]+)(?:\D|$)z	huya:livezhuya.comzhttps://www.huya.com/572329Z572329T)idtitledescriptionZis_live
view_countZskip_download)urlZ	info_dictparamszhttps://www.huya.com/xiaoyugame)r   Zonly_matchingi  i8  )widthheighti   i  i   i  )u   蓝光u   超清u   流畅c                 C   s  |  |}| j||d}| jd|d|d d}t|dd }|sJtddd	|d
pf|dpf| |}|d}|d}|d d d }	|	stddd	g }
|	D ]D}|d}|sq|d}| o|dk}ttj	
t|d }d\}}|r
| |||\}}|dD ]}td|d \}}|d}|rL||d< n|dd  |rjt|d }|rtd||d |||d g|d < |
|d!t|d"|t| d#| d$|d! |d%d&| j|i  qq|||
|d'|d(|d)d*d+d,d-S ).N)video_idz	stream:\sstream)r   defaultc                 S   s   | d d d S )Ndatar   ZgameLiveInfo )xr   r   9/tmp/pip-unpacked-wheel-zk9bgjdq/yt_dlp/extractor/huya.py<lambda>:       z*HuyaLiveIE._real_extract.<locals>.<lambda>zCan not extract the room infoT)expectedZroomNameZintroductionZ
screenTypeZliveSourceTyper   r   ZgameStreamInfoListzVideo is offlineZsFlvUrlZsStreamName)r         ZsFlvAntiCode) r    ZvMultiStreamInfoz(.+?)(?:(\d+)M)?ZsDisplayNameZiBitRateZratio  _uwsTimeZwsSecretZsFlvUrlSuffixZ
iLineIndex/.)query)extZ	format_idZtbrr   Z
totalCountZ
screenshotZcontentIntrozhttps://www.huya.comzhttps://www.huya.com/)ZOriginZReferer)r   r   formatsr   Z	thumbnailr   Zhttp_headers)Z	_match_idZ_download_webpageZ_search_jsonr   r   getZ_html_extract_titledicturllibparse	parse_qslr	   encryptre	fullmatchgroupspopinthashlibmd5joinappendr   r
   _RESOLUTION)selfr   r   ZwebpageZstream_dataZ	room_infor   Zscreen_typeZlive_source_typeZstream_info_listr)   stream_infoZ
stream_urlstream_nameZ	re_secretr   fmsssiZdisplay_nameZbitrateZrater   r   r   _real_extract6   st    





 


zHuyaLiveIE._real_extractc                 C   s   t |ddt  }|d }|t|s4|}nt |d d d }|d@ }|d@ }|d@ }	||d	? B |	d
> B }
|t|
tt |d | dt |d d d dd t|d 	 
ddd }td|d |d |d g}||fS )Nr$      ZlPresenterUidg    cAg    .Al    l        i    r   r!   1Z100)r#   seqidveruuidtr=   r"   r   r   |rD   ctyperG   )r   r*   random
startswithstrupdater   base64	b64decodedecodesplitr5   r6   r7   )r:   r   r;   r<   ctZpresenter_uiduidu1u2u3r#   r=   r>   r   r   r   r/   q   s&    "zHuyaLiveIE.encryptN)__name__
__module____qualname__Z
_VALID_URLZIE_NAMEZIE_DESCrL   r4   ZTESTSr9   r@   r/   r   r   r   r   r      s<    ;r   )rN   r5   rJ   r0   urllib.parser,   commonr   utilsr   r   r   r   r	   r
   r   r   r   r   r   <module>   s    
