Ë
    š„jC#  ã                   ó    — 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    úL/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/huya.pyú<lambda>z*HuyaLiveIE._real_extract.<locals>.<lambda>@   s   € °1°V±9¸Q±<ÀÑ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Ð(Ó@ˆØ×'Ñ'¨°g¸xÐRZÐdhÐ'ÓiˆÜ˜KÑ)OÓPˆ	ÙÜ Ð!@È4ÔPÐPØ—‘˜jÓ)Òo¨Y¯]©]¸>Ó-JÒoÈd×NfÑNfÐgnÓNoˆØ—m‘m LÓ1ˆØ$Ÿ=™=Ð)9Ó:ÐØ& vÑ.¨qÑ1Ð2FÑGÐÙÜ Ð!3¸dÔCÐCØˆØ+ó 	ˆKØ$Ÿ™¨Ó3ˆJÙØØ%Ÿ/™/¨-Ó8ˆKØ'˜ÒJÐ,<À
Ð,JˆIÜœ&Ÿ,™,×0Ñ0´¸kÈ.Ñ>YÓ1ZÓ[Ó\ˆFØ‰FˆB�ÙØŸ™ f¨k¸;ÓG‘��BØ!—o‘oÐ&8Ó9ó �Ü(*¯©Ø'¨¯©°Ó)?ó)AßAGÁÃñ &�˜gà—v‘v˜jÓ)�ÙØ&*�F˜7’Oà—J‘J˜w¨Ô-ÙÜ" 7›|¨dÑ2˜ÙÜ)0¯©ØŸ™ " f¨S¡k°;ÀÀFÈ8ÑDTÐ!UÓVó*X�F˜:Ñ&à—‘Ø&Ÿ?™?¨?Ó;Ü!,¨[¯_©_¸\Ó-JÓ!KØÜ+¨z¨l¸!¸K¸=ÈÈ+Ï/É/ÐZiÓJjÐIkÐ,lØ28ô:ñ	 ð ×&Ñ&×*Ñ*¨<¸Ó<ð ö òð	ð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Ó2´V·]±]³_ÑDˆØ# OÑ4ˆØ×%Ñ%¤c¨-Ó&8Ô9Ø‰Cä˜b 3™h¨™n¨zÑ9Ó:ˆCØÐ%Ñ%ˆØ�:ÑˆØ�8‰^ˆØ��r‘‰M˜B !™GÑ#ˆØ�‰Ü˜Q“Ü ¤¨R°$©YÓ!7¸#Ñ!=Ó>ØÜ  S¡¨3¡°Ñ ;Ó<Øñ
ô 	ô ×Ñ˜f T™lÓ+×2Ñ2Ó4×:Ñ:¸3ÀÓBÀ1ÑEˆÜ�[‰[˜Ÿ™ 6¨'¡?°F¸7±OÀVÈCÁ[Ð"QÓRÓSˆØ�2ˆvˆ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?://.+\.jpgiéð­f)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    ÀÕ@iÃÓIhÚ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ð %ó 3à39ñ;à;CñEˆð ˆÜ& vØ˜Ñ(Kð0
ó ò 	!ˆJð ×-Ñ-¨j¸Ñ.@À(ÈEÐY^Ð-Ó_ˆDØò �Ø�—
‘
ñ œ\¨*Ø!'¬+¨Ð 7Ø"+¬c¨UÐ!3Ø'¬+¨Ð7Ø ,¬{¨mÐ<Ø%¬ }Ð5ñ7ó ó ðð �N‰N˜4Õ ð	!ð Øñ
ô ˜6Ø"0´;°-Ð!@Ø )¬J¨<¼Ð@Ø+¬k¨]Ð;Ø%¬ }Ð5ñ	$ó ð
ô ˜6 KØ&¬¨Ð.Ø)¬C¨5´&¼#¼vÐFØ,¬~Ð.>Ð?Ø ¤s e¬V´S¼&ÐAØ=Ä¸}ÌzÐ`dÔOeÐNfÔhkÐlØ'¬#¨Ð/Ø %¬ }Ð5Ø-´¨}Ð=ñ	2ð 	$ó 	ð
ð 	
r-   N)
r“   r”   r•   r–   r—   r˜   ra   r™   r‡   rx   r)   r-   r+   r›   r›   Ž   sÚ   „ ØM€JØ€GØ€Gð AàØØØ)Ð*ØØ6Ø'Ø%ØØ ØØ/Ø#ñ
ñð$ @àØØ0Ø)Ð*ØAØØ Ø&Ø%ØØ ØØØ/Ø#ñ
ñð* AàØØMØ)Ð*Ø ØØØ/Ø#Ø%Ø"Ø'Øñ
ñðI6€Fðp(
 ô (
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-   