a
    hC#                     @   s   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mZmZmZmZ ddlmZ G dd deZG d	d
 d
eZdS )    N   )InfoExtractor   )
ExtractorError
clean_htmlint_or_noneparse_durationstr_or_nonetry_getunescapeHTML
update_urlupdate_url_queryurl_or_none)traverse_objc                   @   sn   e Zd ZdZdZdZdded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 )
HuyaLiveIEzLhttps?://(?:www\.|m\.)?huya\.com/(?!(?:video/play/))(?P<id>[^/#?&]+)(?:\D|$)z	huya:liveu   虎牙直播zhttps://www.huya.com/572329Z572329ZflvT)idtitleextdescriptionZis_live
view_countZskip_download)url	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v }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   J/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/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)r   	format_idZtbrr   Z
totalCountZ
screenshotZcontentIntrozhttps://www.huya.comzhttps://www.huya.com/)ZOriginZReferer)r   r   formatsr   	thumbnailr   Zhttp_headers)	_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_listr1   stream_infoZ
stream_urlstream_nameZ	re_secretr   fmsssiZdisplay_nameZbitrateZrater   r   r!   _real_extract<   sr    









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trG   r)   r   r   |rN   ctyperQ   )r   r4   random
startswithstrupdater	   base64	b64decodedecodesplitr?   r@   rA   )rD   r   rE   rF   ctZpresenter_uiduidu1u2u3r*   rG   rH   r   r   r!   r9   w   s&    "zHuyaLiveIE.encryptN)__name__
__module____qualname__
_VALID_URLIE_NAMEIE_DESCrV   r>   _TESTSrC   rJ   r9   r   r   r   r!   r      s<   	;r   c                   @   s   e Zd ZdZdZdZdddddgd	d
ddeeedddddddddgdddddeeeddddddddddged edd!d"d#d$ed%dgZed&d'd(Z	d)S )*HuyaVideoIEz9https?://(?:www\.)?huya\.com/video/play/(?P<id>\d+)\.htmlz
huya:videou   虎牙视频z/https://www.huya.com/video/play/1002412640.htmlZ
1002412640mp4u   8月3日u   主机游戏g      ,@u   虎牙-ATS欧卡车队青木Z
1564376151Z20240803zre:https?://.+\.jpgif)r   r   r   
categoriesdurationuploaderuploader_idupload_dater   comment_count
like_countr2   	timestamp)r   r   z.https://www.huya.com/video/play/556054543.htmlZ	556054543u   我不挑事 也不怕事u   英雄联盟z$md5:58184869687d18ce62dc7b4b2ad21201g      @u   卡尔Z	367138632Z20210811zcount:4ina)r   r   r   rj   r   rk   rl   rm   rn   r   ro   rp   tagsr2   rq   z/https://www.huya.com/video/play/1063345618.htmlZ
1063345618u6   峡谷第一中！黑铁上钻石顶级教学对抗elog    @iIhZ20250611u   北枫CCZ
2183525275)r   r   r   rj   ro   rk   rp   r2   rq   rn   rl   rm   r   )r   c                 C   sP  |  |}| jd|d|idd d }g }t|dddd	 fD ]n}| j|d
 |ddd}|D ]D}|jf i t|dthfdthfdthfdthfdthfd q\|| q>||dt|dthfdtht	fdthfdthfdt|ddthfdtht	t
t	fdthfddtht	t
t	fdthtd dhtfd thfd!thfd"thfd#fS )$Nz0https://liveapi.huya.com/moment/getMomentContentZvideoIdr.   r   momentZ	videoInfoZdefinitionsc                 S   s   t |d S )Nm3u8)r   )r)   vr   r   r!   r"      r#   z+HuyaVideoIE._real_extract.<locals>.<lambda>rt   ri   F)fatalsizeZdefNamer   
definitionr   )filesizer0   r   Zqualityr   )r   r1   ZcommentCountcontentZ
favorCountZcTime)ro   r   rp   rq   Z
videoTitlecategoryZvideoDurationrr   .)ZvideoBigCoverZ
videoCoverZnickNamer]   ZvideoPlayNum)r   rj   rk   rr   r2   rl   rm   r   )r3   Z_download_jsonr   Z_extract_m3u8_formatsrW   r   rV   extendr   filterallr   r   r   anyr	   )rD   r   r   rs   r1   rx   Zfmtsfmtr   r   r!   rJ      sX    



	zHuyaVideoIE._real_extractN)
ra   rb   rc   rd   re   rf   r>   rg   rV   rJ   r   r   r   r!   rh      sn   8rh   )rX   r?   rT   r:   urllib.parser6   commonr   utilsr   r   r   r   r	   r
   r   r   r   r   Zutils.traversalr   r   rh   r   r   r   r!   <module>   s   0w