o
    i.                     @   s   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 deZG d	d
 d
eZG dd deZdS )    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                   @   s.   e Zd Zdd Zdd Zdd Zddd	Zd
S )DouyuBaseIEc                 C   s@   dD ]}| j ||ddd}|r| jdd| |  S q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_code r   L/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/douyutv.py_download_cryptojs_md5   s   z"DouyuBaseIE._download_cryptojs_md5c                 C   s   | j jddddp| |S )Nr   r   z
2024.07.04)min_ver)r   loadr    )r   r   r   r   r   _get_cryptojs_md5&   s
   zDouyuBaseIE._get_cryptojs_md5c           	   
   C   st   t  j}tt }| | d| d| d| d| d
}t| }|j||dd }dd t	j
| D S )	N;z;console.log(ub98484234("z","z"))zExecuting JS signing scriptr   c                 S   s   i | ]	\}}||d  qS )r   r   ).0ivr   r   r   
<dictcomp>1   s    z*DouyuBaseIE._calc_sign.<locals>.<dictcomp>)uuiduuid4hexroundtimer#   r   executestripurllibparseparse_qsitems)	r   	sign_funcr   abc	js_scriptphantomresultr   r   r   
_calc_sign*   s   
(zDouyuBaseIE._calc_signTc                 C   s   | j d|d|dS )Nz6(?:<script.*)?<script[^>]*>(.*?ub98484234.*?)</script>zJS sign funcr   )_search_regex)r   webpager   r   r   r   _search_js_sign_func3   s   z DouyuBaseIE._search_js_sign_funcN)T)__name__
__module____qualname__r    r#   r<   r@   r   r   r   r   r      s
    	r   c                   @   s   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&d' Zd(d) Zd*d+ Z	d,S )-	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uploaderrH   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小漠)rI   rJ   rK   rL   rM   rN   rO   rH   zRoom not found)r   rR   rS   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)rI   rJ   rK   rL   rM   rN   rO   rP   zhttp://www.douyu.com/xiaocangr   only_matchingzhttp://www.douyu.com/t/lplc                 C   s$   | j d| |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   r   r   r   _get_sign_func   s   
zDouyuTVIE._get_sign_funcc              	      s   g }t |dD ]W}tt |dt |d}|r^t |dthf t |d fddfdd	}t|}||t |d
kr;dn||d
krBdnd d urK d nd dt |dthfdthfd q|S )N).r[   rtmp_url	rtmp_liverate
multiratesc                    s   |d  kS )Nrb   r   )_r(   rate_idr   r   <lambda>       z3DouyuTVIE._extract_stream_formats.<locals>.<lambda>F)get_allm3u8rG   m3u8_nativehttpsi)r   	format_idrK   protocolqualitynamebit)formattbr)r   r   r	   r   appendr   )r   stream_formatsformatsstream_info
stream_url	rate_inforK   r   re   r   _extract_stream_formats   s.   z!DouyuTVIE._extract_stream_formatsc              	   C   s  |  |}| ||}| d|d}| jd|ddddkr#td|d	| jd
|ddddkr3t|d	ddtt d}td| dtj	
| d  |d< t| jd| |d|ddd}t|ddkrot|d	| j|ddp{| ||}ddi| |||}| jd| |dt|dg}	t|	d dD ]#}
|
t|	d d kr|
|d< |	| jd| |d!|
 t|d q|| |	d"d#t|d$thd%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   r[   show_statusr=   rb   r   z*https://www.douyu.com/lapi/live/getH5Play/zDownloading livestream format)r   r[   )r[   rc   .rb   )r[   rb   zDownloading livestream format T)rI   rv   rH   r   c                 S   s   | dd  S )Nr   r   )r'   r   r   r   rg      rh   z)DouyuTVIE._real_extract.<locals>.<lambda>	room_nameshow_detailsnicknameroom_src)rJ   rL   rM   rO   rN   )	_match_idr   r>   r   intr.   hashlibmd5r1   r2   	urlencodeencode	hexdigestr   r]   r@   r_   r<   r   rt   rz   strr   r   )r   r   r   r?   r^   rS   r\   js_sign_func	form_dataru   rf   r   r   r   _real_extract   sn   





zDouyuTVIE._real_extractN)
rA   rB   rC   IE_DESC
_VALID_URLr   _TESTSr_   rz   r   r   r   r   r   rD   9   s    GrD   c                   @   sl   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d Z
dS )DouyuShowIEz;https?://v(?:mobile)?\.douyu\.com/show/(?P<id>[0-9a-zA-Z]+)z)https://v.douyu.com/show/mPyq7oVNe5Yv1gLYmPyq7oVNe5Yv1gLYrG   uW   四川人小时候的味道“蒜苗回锅肉”，传统菜不能丢，要常做来吃iy  u   美食作家王刚VOVAO4NVx1m7Qic20220830u   美食u   美食综合)rI   rK   rL   durationrN   rO   uploader_id	timestampupload_date
view_counttags)r   rR   z/https://vmobile.douyu.com/show/rjNBdvnVXNzvE2ywTrY   u   原画u   超清u   高清)superhighnormal	1920x10801280x720852x480c                 C   s  | dd}| |}| ||}| jd|d|td}| |}d|i| |||d d }| jd	|t|d
d}g }t	|ddt
jhdfD ]M\}	}t	|dthf}
|
rt|
}|| j|	|	|
| j|	|dkrmdn||dkrtdnddt| j|	 qG| d| j|	|	 d|    qG||dt	|dddthfddthfddthfddthfddthfddthfdd t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)r[   r   r[   thumb_video.r   rj   rG   rk   rl   )rr   rm   r   ro   rK   rn   "z!" format may require logging in. )rI   rv   DATAcontentrL   authorup_idvideo_duration	video_piccreate_timeview_numvideoTagtagName)rL   rO   r   r   rN   r   r   r   )replacer   r   _search_jsonr
   r@   r<   r]   r   r   dictr4   r   r   rt   _FORMATSget
_QUALITIESr   _RESOLUTIONS	to_screen_login_hintr   r   r	   )r   r   r   r?   
video_infor   r   url_inforv   rp   	video_urlrK   r   r   r   r     s`   











zDouyuShowIE._real_extractN)rA   rB   rC   r   r   r   r   r   r   r   r   r   r   r   r   r      sB    r   )r   r.   r1   r*   commonr   openloadr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   rD   r   r   r   r   r   <module>   s    8! !