U
    g                     @   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 ddlmZ G dd deZG d	d
 d
eZdS )    N   )InfoExtractor   )	ExtractorErrorint_or_noneparse_durationstr_or_nonetry_getunescapeHTMLunified_strdate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:livezhuya.comz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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-q5ljy6pj/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_listr0   stream_infoZ
stream_urlstream_nameZ	re_secretr   fmsssiZdisplay_nameZbitrateZrater   r   r    _real_extract;   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trF   r(   r   r   |rM   ctyperP   )r   r3   random
startswithstrupdater   base64	b64decodedecodesplitr>   r?   r@   )rC   r   rD   rE   ctZpresenter_uiduidu1u2u3r)   rF   rG   r   r   r    r8   v   s&    "zHuyaLiveIE.encryptN)__name__
__module____qualname__
_VALID_URLIE_NAMEIE_DESCrU   r=   ZTESTSrB   rI   r8   r   r   r   r    r      s>   	 ;r   c                   @   sj   e Zd ZdZdZdZdddddd	d
ddeeedddddddddddee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
1002412640Zmp4u   8月3日zre:https?://.*\.jpg   u   虎牙-ATS欧卡车队青木Z
1564376151Z20240803)r   r   r   r1   durationuploaderuploader_idupload_dater   comment_count
like_count)r   r   z.https://www.huya.com/video/play/556054543.htmlZ	556054543u   我不挑事 也不怕事iH  u   卡尔Z	367138632Z20210811)r   c                 C   s   |  |}| jd|d|idd d d }g }t|ddd	 fD ]B}|d
|d
 it|dthfdthfdthfdthfd q@||dt|dthfdthfdthfdthfdthfdt	hfdthfdthfdthfd	S )Nz0https://liveapi.huya.com/moment/getMomentContentZvideoIdr-   r   ZmomentZ	videoInfoZdefinitionsc                 S   s   t |d S )Nr   )r   )r(   vr   r   r    r!      r"   z+HuyaVideoIE._real_extract.<locals>.<lambda>r   ZdefNamer   r   size)r/   r   r   filesize)r   r0   Z
videoTitleZ
videoCoverZvideoDurationZnickNamer\   ZvideoUploadTimeZvideoPlayNumZvideoCommentNumZ
favorCount)	r   r1   rh   ri   rj   rk   r   rl   rm   )
r2   Z_download_jsonr   rA   rU   r   r   r   r   r   )rC   r   r   Z
video_datar0   Z
definitionr   r   r    rI      sP    
  zHuyaVideoIE._real_extractN)
r`   ra   rb   rc   rd   re   r=   Z_TESTSrU   rI   r   r   r   r    rf      sB   !rf   )rW   r>   rS   r9   urllib.parser5   commonr   utilsr   r   r   r   r	   r
   r   r   r   Zutils.traversalr   r   rf   r   r   r   r    <module>   s   ,w