
    ukiC#                         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e      Z G d	 d
e      Zy)    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                   j    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 Z
d Zy)
HuyaLiveIEzLhttps?://(?:www\.|m\.)?huya\.com/(?!(?:video/play/))(?P<id>[^/#?&]+)(?:\D|$)z	huya:liveu   虎牙直播zhttps://www.huya.com/572329572329flvT)idtitleextdescriptionis_live
view_countskip_download)url	info_dictparamszhttps://www.huya.com/xiaoyugame)r   only_matchingi  i8  )widthheighti   i  i   i  )u   蓝光u   超清u   流畅c                    | j                  |      }| j                  ||      }| j                  d|d|d       }t        |d       }|st	        dd      |j                  d	      xs$ |j                  d
      xs | j                  |      }|j                  d      }|j                  d      }|d   d   d   }	|	st	        dd      g }
|	D ]  }|j                  d      }|s|j                  d      }| xr |dv }t        t        j                  j                  t        |d                     }d\  }}|r| j                  |||      \  }}|j                  d      D ]#  }t        j                  d|j                  d            j                         \  }}|j                  d      }|r||d<   n"|j!                  dd        |rt#        |      dz  }|r2t%        j&                  dj)                  ||d   |||d   g            |d<   |
j+                  |j                  d       t-        |j                  d!            |t/        | d"| d#|j                  d        |$      d%| j0                  j                  |i              &  |||
|j                  d&      |j                  d'      |j                  d(      d)d*d+d,S )-N)video_idz	stream:\sstream)r#   defaultc                     | d   d   d   S )Ndatar   gameLiveInfo )xs    P/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/extractor/huya.py<lambda>z*HuyaLiveIE._real_extract.<locals>.<lambda>@   s    1V9Q<3O     zCan not extract the room infoT)expectedroomNameintroduction
screenTypeliveSourceTyper'   r   gameStreamInfoListzVideo is offlinesFlvUrlsStreamName)r         sFlvAntiCode) r9   vMultiStreamInfoz(.+?)(?:(\d+)M)?sDisplayNameiBitRateratio  _uwsTimewsSecretsFlvUrlSuffix
iLineIndex/.query)r   	format_idtbrr   
totalCount
screenshotcontentIntrozhttps://www.huya.comzhttps://www.huya.com/)OriginReferer)r   r   formatsr   	thumbnailr   http_headers)	_match_id_download_webpage_search_jsonr   r   get_html_extract_titledicturllibparse	parse_qslr   encryptre	fullmatchgroupspopinthashlibmd5joinappendr
   r   _RESOLUTION)selfr   r#   webpagestream_data	room_infor   screen_typelive_source_typestream_info_listrP   stream_info
stream_urlstream_name	re_secretr   fmsssidisplay_namebitraterates                         r+   _real_extractzHuyaLiveIE._real_extract<   s   >>#&((x(@''gxRZdh'iK)OP	 !@4PPj)oY]]>-JodNfNfgnNommL1$==)9:&v.q12FG !3dCC+ 	K$3J%//-8K'J,<
,JI&,,00k.>Y1Z[\FFBfk;GB!oo&89 (*')?)AAG &gvvj)&*F7OJJw-"7|d2)0"fSk;F8DT!UV*XF:&&???;!,[__\-J!K+zl!K=+//ZiJjIk,l28:	  &&**<<  	B #--5"|4$==802
 	
r-   c           	      v   t        |j                  d      d      t        j                         z   }|d   }|j                  t	        |            s|}nt        |dz  dz  dz        }|dz  }|dz  }|dz  }	||d	z	  z  |	d
z  z  }
|j                  t        |
      t        t        |dz        |z         dt        |dz  dz  dz        dd       t        j                  |d         j                         j                  dd      d   }t        j                  dj                  |d   |d   |d   g            }||fS )NrA      lPresenterUidg    cAg    .Al    l        i    r6   r>   1100)r@   seqidveruuidtrr   r?   r   r   |r   ctyper   )r   rV   random
startswithstrupdater
   base64	b64decodedecodesplitrb   rc   rd   )rg   r   rn   rp   ctpresenter_uiduidu1u2u3r@   rr   rs   s                r+   r\   zHuyaLiveIE.encryptw   s<   H-r2V]]_D#O4%%c-&89Cb3hnz9:C%%:8^rMB!G#Q R$Y!7#!=>S3 ;<
 	 fTl+224::3B1E[[6'?F7OVC["QRS2vr-   N)__name__
__module____qualname__
_VALID_URLIE_NAMEIE_DESCr   ra   _TESTSrf   rx   r\   r)   r-   r+   r   r      s    `JGG,
 T
 1F( 

 

 
K9
vr-   r   c                       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d&efd'Z	y())HuyaVideoIEz9https?://(?:www\.)?huya\.com/video/play/(?P<id>\d+)\.htmlz
huya:videou   虎牙视频z/https://www.huya.com/video/play/1002412640.html
1002412640mp4u   8月3日u   主机游戏g      ,@u   虎牙-ATS欧卡车队青木
156437615120240803zre:https?://.+\.jpgif)r   r   r   
categoriesdurationuploaderuploader_idupload_dater   comment_count
like_countrQ   	timestamp)r   r   z.https://www.huya.com/video/play/556054543.html	556054543u   我不挑事 也不怕事u   英雄联盟z$md5:58184869687d18ce62dc7b4b2ad21201g      @u   卡尔	36713863220210811zcount:4ina)r   r   r   r   r   r   r   r   r   r   r   r   tagsrQ   r   z/https://www.huya.com/video/play/1063345618.html
1063345618u6   峡谷第一中！黑铁上钻石顶级教学对抗elog    @iIh20250611u   北枫CC
2183525275)r   r   r   r   r   r   r   rQ   r   r   r   r   r   r   c                    | j                  |      }| j                  d|d|i      d   d   }g }t        |ddd f      D ]w  }| j                  |d	   |d
d      }|D ]G  } |j                  d#i t        |dt
        hfdt        hfdt
        hfdt
        hfdt
        hfd       I |j                  |       y ||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       ht        fdt        hfd t        hfd!t
        hfd"f      S )$Nz0https://liveapi.huya.com/moment/getMomentContentvideoIdrG   r'   moment	videoInfodefinitionsc                     t        |d         S )Nm3u8)r   )r?   vs     r+   r,   z+HuyaVideoIE._real_extract.<locals>.<lambda>   s    [65K r-   r   r   F)fatalsizedefNamer!   
definitionr    )filesizerI   r!   qualityr    )r   rP   commentCountcontent
favorCountcTime)r   r   r   r   
videoTitlecategoryvideoDurationr   .)videoBigCover
videoCovernickNamer   videoPlayNum)r   r   r   r   rQ   r   r   r   r)   )rS   _download_jsonr   _extract_m3u8_formatsr   r   r   extendr   filterallr	   r   r   anyr
   )rg   r   r#   r   rP   r   fmtsfmts           r+   rx   zHuyaVideoIE._real_extract   s   >>#&$$>Y1 % 339;;CE &v(K0
  	!J --j.@(EY^-_D 

 \*!'+ 7"+cU!3'+7 ,{m<%}57   NN4 	! 
 6"0;-!@ )J<@+k];%}5	$ 
 6K&.)C5&#vF,~.>?seVS&A=}z`dOeNfhkl'#/ %}5-}=	2 	$ 	
 	
r-   N)
r   r   r   r   r   r   ra   r   r   rx   r)   r-   r+   r   r      s    MJGG A)*6'% /#
$ @0)*A &% /#
* AM)* /#%"'
I6Fp(
 (
r-   r   )r   rb   r   r]   urllib.parserY   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   utils.traversalr   r   r   r)   r-   r+   <module>r      sH       	  !   +t tne
- e
r-   