
    VGh.                         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 ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZ  G d de      Z G d	 d
e      Z G d de      Zy)    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                   &    e Zd Zd Zd Zd ZddZy)DouyuBaseIEc                     dD ]:  }| j                  ||dd      }|s| j                  j                  dd|       |c S  t        d      )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       a/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/douyutv.py_download_cryptojs_md5z"DouyuBaseIE._download_cryptojs_md5   sa    
 		C
 ,,X$DE - SG

  /7C		 OPP    c                 d    | j                   j                  ddd      xs | j                  |      S )Nr   r   z
2024.07.04)min_ver)r   loadr"   )r   r   s     r!   _get_cryptojs_md5zDouyuBaseIE._get_cryptojs_md5&   s9    zz_l  < e?C?Z?Z[c?d	er#   c           
         t        j                         j                  }t        t	        j                               }| j                  |       d| d| d| d| d
}t        |       }|j                  ||d      j                         }t        j                  j                  |      j                         D 	
ci c]  \  }	}
|	|
d    c}
}	S c c}
}	w )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_signzDouyuBaseIE._calc_sign*   s    JJL$))+--h78)D]^_]``cdecffijkillop	"4(H&C ! EEJUW 	$*LL$9$9&$A$G$G$IJDAq1Q4JJJs   9Cc                 ,    | j                  d|d|      S )Nz6(?:<script.*)?<script[^>]*>(.*?ub98484234.*?)</script>zJS sign funcr   )_search_regex)r   webpager   s      r!   _search_js_sign_funcz DouyuBaseIE._search_js_sign_func3   s'    !!EwP^fk " m 	mr#   N)T)__name__
__module____qualname__r"   r'   r?   rD    r#   r!   r   r      s    QeKmr#   r   c                       e Zd ZdZdZddddddedd	d
d	dd	idddddddddd	ddd	iddddddddddd	ddd	iddddddd dd!d
d"dd	idd#d	d$d%d	d$gZd& Zd' Zd( Z	y))*	DouyuTVIEu   斗鱼直播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uploaderrN   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小漠)rO   rP   rQ   rR   rS   rT   rU   rN   zRoom not found)r   rX   rY   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)rO   rP   rQ   rR   rS   rT   rU   rV   zhttp://www.douyu.com/xiaocangr   only_matchingzhttp://www.douyu.com/t/lplc                 B    | j                  d| |d      d   d|    S )Nz-https://www.douyu.com/swf_api/homeH5Enc?rids=zGetting signing scriptr*   dataroom)_download_json)r   room_idr   s      r!   _get_sign_funczDouyuTVIE._get_sign_func   sB    "";G9Ex) # ++1359'3CE 	Er#   c           
      z   g }t        |d      D ]  }t        t        |d      t        |d            }|s&t        |dt        hf      t        |dfdfd      }t        |      }|j	                  |t              |d	k(  rd
n||d	k(  rdnddz  nd dt        |dt
        hfdt        hfd              |S )N).rb   rtmp_url	rtmp_liverate
multiratesc                     |d   k(  S )Nrj   rH   )_r>   rate_ids     r!   <lambda>z3DouyuTVIE._extract_stream_formats.<locals>.<lambda>   s    RSTZR[_fRf r#   F)get_allm3u8rM   m3u8_nativehttpsi)r   	format_idrQ   protocolqualitynamebit)formattbr)r   r   r
   r	   appendr   )r   stream_formatsformatsstream_info
stream_url	rate_inforQ   rn   s          @r!   _extract_stream_formatsz!DouyuTVIE._extract_stream_formats   s    'F 	K [*5|KQ\7]_J&{Vk]4KL(|Ef6gqvw	#J/%!,W!5$'6M5s14G3:3Fw/D
  #9#)K="9 %}5/ 
  
	$ r#   c                    | j                  |      }| j                  ||      }| j                  d|d      }| j                  d|dd      dk(  rt        d|	      | j                  d
|dd      dk(  rt        |	      ddt	        t        j
                               d}t        j                  d| dt        j                  j                  |       dj                               j                         |d<   t        | j                  d| |d|d      d      }t        |d      dk(  rt        |	      | j                  |d      xs | j!                  ||      }ddi| j#                  |||      }| j                  d| |dt%        |            g}	t        |	d   d      D ]M  }
|
t        |	d   d       k7  s|
|d<   |	j'                  | j                  d| |d!|
 t%        |                   O || j)                  |	      d"d#t        |d$t*        hd% hfd&t*        ht,        hfd't*        hfd(t*        hfd)t.        hfd*      S )+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_sysr/   zroom/?zNzMV1y4EMxOHS6I5WKmauthz#http://www.douyutv.com/api/v1/room/zDownloading room infoF)r   queryr   rb   show_statusrA   rj   r   z*https://www.douyu.com/lapi/live/getH5Play/zDownloading livestream format)r   rb   )rb   rk   .rj   )rb   rj   zDownloading livestream format T)rO   r}   rN   r   c                     | dd  S )Nr   rH   )r=   s    r!   ro   z)DouyuTVIE._real_extract.<locals>.<lambda>   s    !" r#   	room_nameshow_detailsnicknameroom_src)rP   rR   rS   rU   rT   )	_match_idr   rB   r   intr/   hashlibmd5r2   r3   	urlencodeencode	hexdigestr   rd   rD   rf   r?   r   r{   r   strr   r   )r   r   r   rC   re   rY   rc   js_sign_func	form_datar|   rn   s              r!   _real_extractzDouyuTVIE._real_extract   s   >>#&((h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]^egoJpA
oolHg>
	 --8	B:#I. . 0 1
 $N1$57Z[ 	9G,~a'8:JKK$+	&!%%d&9&9@	J%CG9#M+I6 ': '8 9	9 33NC
 4$seo->?%u|n= .6'#/(;-8" 	
 	
r#   N)
rE   rF   rG   IE_DESC
_VALID_URLr   _TESTSrf   r   r   rH   r#   r!   rJ   rJ   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#   rJ   c                   j    e Zd ZdZdddddeddd	d
eddgdddddgZddddZddddZddddZ	d Z
y)DouyuShowIEz;https?://v(?:mobile)?\.douyu\.com/show/(?P<id>[0-9a-zA-Z]+)z)https://v.douyu.com/show/mPyq7oVNe5Yv1gLYmPyq7oVNe5Yv1gLYrM   uW   四川人小时候的味道“蒜苗回锅肉”，传统菜不能丢，要常做来吃iy  u   美食作家王刚VOVAO4NVx1m7Qic20220830u   美食u   美食综合)rO   rQ   rR   durationrT   rU   uploader_id	timestampupload_date
view_counttags)r   rX   z/https://vmobile.douyu.com/show/rjNBdvnVXNzvE2ywTr_   u   原画u   超清u   高清)superhighnormal	1920x10801280x720852x480c                    |j                  dd      }| j                  |      }| j                  ||      }| j                  d|d|t              }| j                  |      }d|i| j                  |||d   d         }| j                  d	|t        |      d
      }g }t        |ddt        j                  hdf      D ]  \  }	}t        |dt        hf      }
|
rt        |
      }|j                  | j                  j!                  |	      |	|
| j"                  j!                  |	      |dk(  rdn||dk(  rdnddt%        | j&                  j!                  |	                   | j)                  d| j                  j!                  |	|	       d| j+                                  ||dt        |dddt,        hfddt,        hfddt.        hfddt0        hfddt        hfddt0        hfdd t0        hfd!dd"t,        hfd#f      S )$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)rb   r   rb   thumb_video.r   rq   rM   rr   rs   )ry   rt   r   rv   rQ   ru   "z!" format may require logging in. )rO   r}   DATAcontentrR   authorup_idvideo_duration	video_piccreate_timeview_numvideoTagtagName)rR   rU   r   r   rT   r   r   r   )replacer   r   _search_jsonr   rD   r?   rd   r   r   dictr5   r   r	   r{   _FORMATSget
_QUALITIESr   _RESOLUTIONS	to_screen_login_hintr   r   r
   )r   r   r   rC   
video_infor   r   url_infor}   rw   	video_urlrQ   s               r!   r   zDouyuShowIE._real_extract  sL   kk*d+>>#&((h7&&,g(Z ' A
 0098
oolHj6H6TU
	 &&98#I.5P ' R %hVY0Z[ 	nID#$S5;-*@AI#I."mm//5!%$#2248$'6M5s14G  't'8'8'<'<T'BC   ))$566WX\XhXhXjWkln	n$ 
 :#Wse4&3%8 )7[MB&(8;-H'{mD'F(*{mD#S)cU;	1 	( 	
 	
r#   N)rE   rF   rG   r   r   r   r   r   r   r   r   rH   r#   r!   r   r      s    OJ ;$n-)#%~.
  AF* H J L2
r#   r   )r   r/   r2   r+   commonr   openloadr   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   rJ   r   rH   r#   r!   <module>r      sW        ! &    m- mB]
 ]
@[
+ [
r#   