Ë
    š„jÇ.  ã                   ó¶   — 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       úO/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/douyutv.pyÚ_download_cryptojs_md5z"DouyuBaseIE._download_cryptojs_md5   sa   € ð
ò 		ˆCð
 ×,Ñ,Ø�XÐ$DÈEð -ó 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   € Ø�z‰z�‰Ø�_¨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Ä   € Ü�J‰J‹L×ÑˆÜ”$—)‘)“+ÓˆØ×-Ñ-¨hÓ7Ð8¸¸)¸ÐD]Ð^_Ð]`Ð`cÐdeÐcfÐfiÐjkÐilÐloÐpˆ	Ü" 4Ó(ˆØ—‘ ¨HØ&Cð !ó EßEJÁUÃWð 	ä$*§L¡L×$9Ñ$9¸&Ó$A×$GÑ$GÓ$I×J™D˜A˜q��1�Q‘4‘Ó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'   € à×!Ñ!ØEÀwÐP^Ð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   € Ø×"Ñ"Ø;¸G¸9ÐEÀxØ)ð #ó +à+1ñ3à59¸'¸Ð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   ø€ ÐRSÐTZÑR[Ð_fÑRf€ 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´|ÀKÐQ\Ó7]ó_ˆJâÜ& {°V¼k¸]Ð4KÓL�Ü(¨°|ÓEfÐ6gÐqvÔw�	Ü# JÓ/�Ø—‘Ø%Ü!,¨WÓ!5Ø$'¨6¢M™5°sØ14¸²¡ÀGØ3:Ð3F˜w¨Ò/È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ˆØ×$Ñ$Ð%CÀWÈiÓXˆà×ÑÐ8¸'À6ÐSUÐÓVÐZ]Ò]ÜÐ@È8ÔTÐTØ×ÑÐ@À'È8Ð]_ÐÓ`ÐdgÒgÜ xÔ0Ð0ð ØÜœŸ	™	›Ó$ñ
ˆô
 !Ÿ™Ø�G�9˜AœfŸl™l×4Ñ4°VÓ<Ð=Ð=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]Ð^eÐgoÓJpˆà�Að
à�o‰o˜l¨H°gÓ>ð
ˆ	ð ×-Ñ-Ø8¸¸	ÐBØÐ:Ü# IÓ.ð .ó 0ð 1ˆô
 $ N°1Ñ$5Ð7ZÓ[ò 	9ˆGØœ, ~°aÑ'8Ð:JÓKÓKØ$+�	˜&Ñ!Ø×%Ñ% d×&9Ñ&9Ø@ÀÀ	ÐJØÐ%CÀGÀ9Ð#MÜ+¨IÓ6ð ':ó '8õ 9ð	9ð Ø×3Ñ3°NÓCØñ
ô ˜4Ø$¤s e©oÐ->Ð?Ø%¬ u¬|¨nÐ=Ø .´°Ð6Ø'¬#¨Ð/Ø(¬;¨-Ð8ñ"ó ð	
ð 	
r#   N)
rE   rF   rG   ÚIE_DESCÚ
_VALID_URLr�   Ú_TESTSrf   r�   r    rH   r#   r!   rJ   rJ   9   s  „ Ø€GØj€Jà,àØ!ØØVØLØØØØ$ñ

ð ˜Tð
ñð" .àØ!ØØuØAØ0Ø%Øñ	
ð ˜Tð
ð !ñð" .àØ!ØØmØ4Ø0Ø!Øñ	
ð ˜Tð
ñð  >àØ#ØØmØ0Ø0Ø+Ø$ñ	
ð ˜Tð
ñð  /Øñð
 ,ØñðCE€FòN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«      }
|
rˆt        |
«      }|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  € Ø�k‰k˜* dÓ+ˆØ—>‘> #Ó&ˆà×(Ñ(¨¨hÓ7ˆà×&Ñ&Ø,¨gØ˜(´Zð 'ó Aˆ
ð ×0Ñ0°Ó9ˆà�8ð
à�o‰o˜l¨H°jÀÑ6HÈÑ6TÓUð
ˆ	ð ×&Ñ&Ø9¸8Ü# IÓ.Ð5Pð 'ó Rˆð ˆÜ% h°¸ÌÏÉÈÐVYÐ0ZÓ[ò 	n‰IˆD�#Ü$ S¨5´;°-Ð*@ÓAˆIÙÜ# IÓ.�Ø—‘Ø"Ÿm™m×/Ñ/°Ó5Ø!%Ø$Ø#Ÿ™×2Ñ2°4Ó8Ø$'¨6¢M™5°sØ14¸²¡ÀGñ ô ' t×'8Ñ'8×'<Ñ'<¸TÓ'BÓCð õ ð —‘Ø˜Ÿ™×)Ñ)¨$°Ó5Ð6Ð6WÐX\×XhÑXhÓXjÐWkÐlõnð	nð$ Øñ
ô ˜:¨Ø# W¬s¨eÐ4Ø&¨´3°%Ð8Ø )¨7´[°MÐBØ&Ð(8¼;¸-ÐHØ'¨´{°mÐDØ'¨¼¸ÐFØ(¨*´{°mÐDØ# S¨)´c°UÐ;ñ	1ð 	(ó 	ð
ð 	
r#   N)rE   rF   rG   r¢   r�   r—   r£   rÌ   rÎ   rÏ   r    rH   r#   r!   r¥   r¥   Ù   sŒ   „ ØO€Jð ;à$ØØ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#   