
    V|h.                         S SK r S SKrS SKrS SKrSSKJr  SSKJr  SSKJ	r	J
r
JrJrJrJrJrJrJrJrJrJr   " S S\5      r " S	 S
\5      r " S S\5      rg)    N   )InfoExtractor)PhantomJSwrapper   )ExtractorErrorUserNotLivedetermine_extint_or_none
js_to_jsonparse_resolutionstr_or_nonetraverse_objunescapeHTMLurl_or_noneurlencode_postdataurljoinc                   0    \ rS rSrS rS rS rSS jrSrg)	DouyuBaseIE   c                     S H<  nU R                  X!SSS9nU(       d  M  U R                  R                  SSU5        Us  $    [        S5      e)N)zEhttps://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/md5.jsz2https://unpkg.com/cryptojslib@3.1.2/rollups/md5.jszDownloading signing dependencyF)notefataldouyucrypto-js-md5z0Unable to download JS dependency (crypto-js/md5))_download_webpagecachestorer   )selfvideo_idurljs_codes       R/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/douyutv.py_download_cryptojs_md5"DouyuBaseIE._download_cryptojs_md5   s\    
C
 ,,$DE - SGw

  /7C
 OPP    c                 h    U R                   R                  SSSS9=(       d    U R                  U5      $ )Nr   r   z
2024.07.04)min_ver)r   loadr#   )r   r   s     r"   _get_cryptojs_md5DouyuBaseIE._get_cryptojs_md5&   s9    zz_l  < e?C?Z?Z[c?d	er%   c           
         [         R                  " 5       R                  n[        [        R                  " 5       5      nU R                  U5       SU SU SU SU S3
n[        U 5      nUR                  XbSS9R                  5       n[        R                  R                  U5      R                  5        V	V
s0 s H
  u  pXS   _M     sn
n	$ s  sn
n	f )N;z;console.log(ub98484234("z","z"))zExecuting JS signing scriptr   r   )uuiduuid4hexroundtimer)   r   executestripurllibparseparse_qsitems)r   	sign_funcr   abc	js_scriptphantomresultivs              r"   
_calc_signDouyuBaseIE._calc_sign*   s    JJL$))+--h78)D]^_]``cdecffijkillop	"4(&C ! EEJUW 	$*LL$9$9&$A$G$G$IJ$IDAQ4$IJJJs   7Cc                 &    U R                  SUSUS9$ )Nz6(?:<script.*)?<script[^>]*>(.*?ub98484234.*?)</script>zJS sign funcr   )_search_regex)r   webpager   s      r"   _search_js_sign_func DouyuBaseIE._search_js_sign_func3   s'    !!EwP^fk " m 	mr%    N)T)	__name__
__module____qualname____firstlineno__r#   r)   rB   rH   __static_attributes__rJ   r%   r"   r   r      s    QeKmr%   r   c                       \ rS rSrSrSrSSSSSS	\SS
SS.	SS
0S.SSSSSSSSS
S.SS
0SS.SSSSSSSSS
S.SS
0S.SSSSS S!SS"SS#.SS
0S.S$S
S%.S&S
S%./rS' rS( r	S) r
S*rg+),	DouyuTVIE9   u   斗鱼直播zVhttps?://(?:www\.)?douyu(?:tv)?\.com/(topic/\w+\?rid=|(?:[^/]+/))*(?P<id>[A-Za-z0-9]+)zhttps://www.douyu.com/pigff24422pigffmp4u?   re:^【PIGFF】.* [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$u.   ≥15级牌子看鱼吧置顶帖进粉丝vx群Tis_live)	id
display_idexttitledescription	thumbnailuploaderrV   live_statusskip_download)r    	info_dictparamszhttp://www.douyutv.com/8598285982flvu^   re:^小漠从零单排记！——CSOL2躲猫猫 [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$z$md5:746a2f7a253966a06755a912f0acc0d2zre:^https?://.*\.pngu   douyu小漠)rW   rX   rY   rZ   r[   r\   r]   rV   zRoom not found)r    r`   ra   skipzhttp://www.douyutv.com/1773217732uV   re:^清晨醒脑！根本停不下来！ [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$zre:.*m7show@163\.com.*u   7师傅z,https://www.douyu.com/topic/ydxc?rid=65606036560603uV   re:^阿余：新年快乐恭喜发财！ [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$u   re:.*直播时间.*u   阿涛皎月Carry)rW   rX   rY   rZ   r[   r\   r]   r^   zhttp://www.douyu.com/xiaocangr    only_matchingzhttp://www.douyu.com/t/lplc                 <    U R                  SU 3USS9S   SU 3   $ )Nz-https://www.douyu.com/swf_api/homeH5Enc?rids=zGetting signing scriptr-   dataroom)_download_json)r   room_idr   s      r"   _get_sign_funcDouyuTVIE._get_sign_func   sB    "";G9Ex) # ++1359'3CE 	Er%   c           
        ^ / n[        US5       H  n[        [        US5      [        US5      5      nU(       d  M,  [        US[        145      m[        USU4S j4SS9n[        U5      nUR	                  U[        T5      US	:X  a  S
OUUS	:X  a  SOSTb  TS-  OS S.[        US[
        14S[        14S.5      E5        M     U$ )N).rj   rtmp_url	rtmp_liverate
multiratesc                    > US   T:H  $ )Nrs   rJ   )_rA   rate_ids     r"   <lambda>3DouyuTVIE._extract_stream_formats.<locals>.<lambda>   s    RSTZR[_fRfr%   F)get_allm3u8rU   m3u8_nativehttpsi)r    	format_idrY   protocolqualitynamebit)formattbr)r   r   r
   r	   appendr   )r   stream_formatsformatsstream_info
stream_url	rate_inforY   rw   s          @r"   _extract_stream_formats!DouyuTVIE._extract_stream_formats   s    'FK [*5|KQ\7]_Jz&{Vk]4KL(|Ef6gqvw	#J/%!,W!5$'6M5s14G3:3Fw/D
  #9#)K="9 %}5/ 
  
 G$ r%   c                 p   U R                  U5      nU R                  X5      nU R                  SUS5      nU R                  SUSSS9S:X  a
  [        SUS	9eU R                  S
USSS9S:X  a	  [        US	9eSS[	        [
        R
                  " 5       5      S.n[        R                  " SU S[        R                  R                  U5       S3R                  5       5      R                  5       US'   [        U R                  SU 3USUSS9S5      n[        US5      S:X  a	  [        US	9eU R                  USS9=(       d    U R!                  XB5      nSS0U R#                  XrU5      EnU R                  SU 3US[%        U5      S9/n	[        U	S   S5       HL  n
U
[        U	S   S 5      :w  d  M  XS'   U	R'                  U R                  SU 3US!U
 3[%        U5      S95        MN     UU R)                  U	5      S"S#.[        US$[*        1S% 14S&[*        1[,        14S'[*        14S([*        14S)[.        14S*.5      E$ )+Nz\$ROOM\.room_id\s*=\s*(\d+)zroom idz"videoLoop"\s*:\s*(\d+)loop )default1z The channel is auto-playing VODs)r   z\$ROOM\.show_status\s*=\s*(\d+)status2wp)aid
client_sysr2   zroom/?zNzMV1y4EMxOHS6I5WKmauthz#http://www.douyutv.com/api/v1/room/zDownloading room infoF)r   queryr   rj   show_statusrE   rs   r   z*https://www.douyu.com/lapi/live/getH5Play/zDownloading livestream format)r   rj   )rj   rt   .rs   )rj   rs   zDownloading livestream format T)rW   r   rV   r    c                     U SS  $ )Nr   rJ   )r@   s    r"   rx   )DouyuTVIE._real_extract.<locals>.<lambda>   s
    !"r%   	room_nameshow_detailsnicknameroom_src)rX   rZ   r[   r]   r\   )	_match_idr   rF   r   intr2   hashlibmd5r5   r6   	urlencodeencode	hexdigestr   rl   rH   rn   rB   r   r   r   strr   r   )r   r    r   rG   rm   ra   rk   js_sign_func	form_datar   rw   s              r"   _real_extractDouyuTVIE._real_extract   s   >>#&((7$$%CWiX8'6SUVZ]]@8TT@'8]_`dggx00 		$

 !G9Afll44V<==QRYY[]]f]f]h 	vD//1';X(e 0 EFLN
 m,3x00000Fp$J]J]^eJpA
oolg>
	 --8	B:#I. . 0 1
 $N1$57Z[G,~a'8:JKK$+&!%%d&9&9@	J%CG9#M+I6 ': '8 9 \ 33NC
 4$seo->?%u|n= .6'#/(;-8" 	
 	
r%   rJ   N)rK   rL   rM   rN   IE_DESC
_VALID_URLr   _TESTSrn   r   r   rO   rJ   r%   r"   rQ   rQ   9   s   GjJ,!VL$

 T
" .!uA0%	
 T
 !" .!m40!	
 T
  >#m00+$	
 T
  /
 ,CEFNE
,8
r%   rQ   c                   r    \ rS rSrSrSSSSS\SS	S
S\SS/S.S.SSS./rSSSS.rSSSS.r	SSSS.r
S rSrg) DouyuShowIE   z;https?://v(?:mobile)?\.douyu\.com/show/(?P<id>[0-9a-zA-Z]+)z)https://v.douyu.com/show/mPyq7oVNe5Yv1gLYmPyq7oVNe5Yv1gLYrU   uW   四川人小时候的味道“蒜苗回锅肉”，传统菜不能丢，要常做来吃iy  u   美食作家王刚VOVAO4NVx1m7Qic20220830u   美食u   美食综合)rW   rY   rZ   durationr\   r]   uploader_id	timestampupload_date
view_counttags)r    r`   z/https://vmobile.douyu.com/show/rjNBdvnVXNzvE2ywTrg   u   原画u   超清u   高清)superhighnormal	1920x10801280x720852x480c                    UR                  SS5      nU R                  U5      nU R                  X5      nU R                  SUSU[        S9nU R                  U5      nSU0U R                  XRUS   S   5      EnU R                  S	U[        U5      S
S9n/ n[        USS[        R                  1S45       H  u  p[        US[        145      n
U
(       a  [        U
5      nUR                  U R                  R!                  U	5      U	U
U R"                  R!                  U	5      US:X  a  SOUUS:X  a  SOSS.[%        U R&                  R!                  U	5      5      E5        M  U R)                  SU R                  R!                  X5       SU R+                  5        35        M     UUS.[        USSS[,        14SS[,        14SS[.        14SS[0        14SS[        14SS[0        14SS [0        14S!SS"[,        14S#.45      E$ )$Nzvmobile.zv.z<script>\s*window\.\$DATA\s*=z
video info)transform_sourcevidROOMpoint_idz+https://v.douyu.com/api/stream/getStreamUrlzDownloading video formats)rj   r   rj   thumb_video.r    r{   rU   r|   r}   )r   r~   r    r   rY   r   "z!" format may require logging in. )rW   r   DATAcontentrZ   authorup_idvideo_duration	video_piccreate_timeview_numvideoTagtagName)rZ   r]   r   r   r\   r   r   r   )replacer   r   _search_jsonr   rH   rB   rl   r   r   dictr8   r   r	   r   _FORMATSget
_QUALITIESr   _RESOLUTIONS	to_screen_login_hintr   r   r
   )r   r    r   rG   
video_infor   r   url_infor   r   	video_urlrY   s               r"   r   DouyuShowIE._real_extract  s>   kk*d+>>#&((7&&,g(Z ' A
 0098
oolj6H6TU
	 &&98#I.5P ' R %hVY0Z[ID$S5;-*@AI#I."mm//5!%$#2248$'6M5s14G  't'8'8'<'<T'BC   ))$566WX\XhXhXjWkln \$ 
 :#Wse4&3%8 )7[MB&(8;-H'{mD'F(*{mD#S)cU;	1 	( 	
 	
r%   rJ   N)rK   rL   rM   rN   r   r   r   r   r   r   r   r   rO   rJ   r%   r"   r   r      s    OJ ;$n-)#%~.
  AF* H J L2
r%   r   )r   r2   r5   r.   commonr   openloadr   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   rQ   r   rJ   r%   r"   <module>r      sW        ! &    m- mB]
 ]
@[
+ [
r%   