
    VGh                         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e      Z G d	 d
e      Zy)    N   )InfoExtractor   )	ExtractorErrorint_or_noneparse_durationstr_or_nonetry_getunescapeHTMLunified_strdate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:livezhuya.comz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    ^/var/www/it7/html/youtubeDownloader/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) r8   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_listrO   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 )Nr@      lPresenterUidg    cAg    .Al    l        i    r5   r=   1100)r?   seqidveruuidtrq   r>   r   r   |r~   ctyper   )r   rU   random
startswithstrupdater	   base64	b64decodedecodesplitra   rb   rc   )rf   r   rm   ro   ctpresenter_uiduidu1u2u3r?   rq   rr   s                r*   r[   zHuyaLiveIE.encryptv   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   r`   TESTSre   rw   r[   r(   r,   r*   r   r      s    `JGG,
 T
 1E( 

 

 
K9
vr,   r   c                   h    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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日zre:https?://.*\.jpg   u   虎牙-ATS欧卡车队青木
156437615120240803)r   r   r   rP   durationuploaderuploader_idupload_dater   comment_count
like_count)r   r   z.https://www.huya.com/video/play/556054543.html	556054543u   我不挑事 也不怕事iH  u   卡尔	36713863220210811r   c                    | j                  |      }| j                  d|d|i      d   d   d   }g }t        |dd f      D ]E  }|j                  d	|d	   it        |d
t        hfdt
        hfdt
        hfdt
        hfd             G ||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/getMomentContentvideoIdrF   r&   moment	videoInfodefinitionsc                     t        |d         S )Nr   )r   )r>   vs     r*   r+   z+HuyaVideoIE._real_extract.<locals>.<lambda>   s    P[\]^c\dPe r,   r   defNamer   r    size)rH   r   r    filesize)r   rO   
videoTitle
videoCovervideoDurationnickNamer   videoUploadTimevideoPlayNumvideoCommentNum
favorCount)	r   rP   r   r   r   r   r   r   r   )
rR   _download_jsonr   rd   r   r   r   r   r	   r   )rf   r   r"   
video_datarO   
definitions         r*   rw   zHuyaVideoIE._real_extract   sI   >>#&((>h' ) ))/119;;FH
 &zMCe3fg 		JNNz%(z"+cU!3%}5'+7!'+ 7	,  		 
 :&.*[M:,~.>?'#/ %}5 1O3DE-}="3k]!C+k];
( 

 	
r,   N)
r   r   r   r   r   r   r`   _TESTSr   rw   r(   r,   r*   r   r      s    MJGG A/6'% 
" @0/ &% 
	!FB 
  
r,   r   )r   ra   r   r\   urllib.parserX   commonr   utilsr   r   r   r	   r
   r   r   r   r   utils.traversalr   r   r   r(   r,   r*   <module>r      sH       	  !
 
 
 +t tnF
- F
r,   