
    OJni                     j    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mZ ddlm	Z	 ddl
mZ  G d de      Zy)	    N   )
StreamDatawrap_stream)	async_req   )BaseLiveStreamc                        e Zd ZdZddedz  dedz  f fdZdefdZedefd       Z	d	ed
ede
e   fdZdd	ededefdZddededefdZddedeez  dz  defdZ xZS )DouyuLiveStreamzL
    A class for fetching and processing Douyu live stream information.
    N
proxy_addrcookiesc                 z    t         |   ||       | j                         | _        | j	                         | _        y N)super__init___get_mobile_headersmobile_headers_get_pc_headers
pc_headers)selfr   r   	__class__s      V/home/uftp/myenv/lib/python3.12/site-packages/streamget/platforms/douyu/live_stream.pyr   zDouyuLiveStream.__init__   s3    W-"668..0    returnc                 *    d| j                   xs dddS )Nz;ios/7.830 (ios 17.0; ; iPhone 15 (A2846/A3089/A3090/A3092)) z\https://m.douyu.com/3125893?rid=3125893&dyshid=0-96003918aa5365bc6dcb4933000316p1&dyshci=181)z
user-agentcookiereferer)r   )r   s    r   r   z#DouyuLiveStream._get_mobile_headers   s    Wll(bu
 	
r   c                 f    t        j                  | j                  d            j                         S )Nzutf-8)hashlibmd5encode	hexdigest)datas    r   _get_md5zDouyuLiveStream._get_md5   s#    {{4;;w/0::<<r   riddidc                   K   d| }t        || j                         d {   }t        j                  d|      j	                  d      }t        j
                  dd|      }t        j                  |      }|j                  d      }t        t        t        j                                     }	t        j                  d|      j	                  d      }
| j                  t        |      t        |      z   t        |	      z   t        |
      z         }t        j
                  d	d
|      }|j                  dd      }|j                  dd|z   dz         }	 t        j                  |      }|j                  d|||	      }t        j                  d|      }|S 7 s# t        j                  $ r t        j                  d      w xY ww)Nzhttps://www.douyu.com/)urlr   z;(vdwdae325w_64we[\s\S]*function ub98484234[\s\S]*?)function   z	eval.*?;}zstrc;}
ub98484234zv=(\d+)zreturn rt;}\);?zreturn rt;}z(function (zfunction sign(zCryptoJS.MD5(cb).toString()"signz=(.*?)(?=&|$)zBFailed to execute JS code. Please check if the Node.js environment)r   r   researchgroupsubexecjscompilecallstrinttimer$   replacefindallProgramError)r   r%   r&   r(   html_strresultfunc_ub9jsrest10vrb	func_signparamsparams_lists                  r   _get_token_jszDouyuLiveStream._get_token_js!   s~    &se,"stGGY[cdjjklm66,&9^^H%ggl##diik"#IIj#&,,Q/]]3s8c#h.S9CFBCFF-}cB	%%m5EF	%%&CS2XPS^T		l	*BWWVS#s3F**_f=K% H& "" 	l%%&jkk	ls)    GFD0GA F G)GGratec                   K   d}| j                  ||       d {   }|d   |d   |d   |d   d||d}d| }t        || j                  | j                  |	       d {   }t	        j
                  |      }|S 7 a7 w)
N 10000000000000000000000000003306r   r)   r   r   22011191)r@   r&   ttr,   verr%   rF   z*https://www.douyu.com/lapi/live/getH5Play/)r(   r   headersr#   )rE   r   r   r   jsonloads)	r   r%   rF   r&   rD   r#   app_apijson_str	json_datas	            r   _fetch_web_stream_urlz%DouyuLiveStream._fetch_web_stream_url9   s     0 ..sC88Qq>a.N
 ?seD"w4??TXTgTgnrssJJx(	 9 ts"   B A<AB  A>!B >B r(   process_datac                   K   t        j                  d|      }|r|j                  d      }nt        j                  d|      j                  d      }t        d| | j                  | j
                         d{   }t        j                  d|      d   }t        j                  |      }|d	   d
   d   d   d   }d| }t        || j                  | j
                         d{   }t        j                  |      }|s|S |d
   d   dd}	|d
   d   dk(  r6|d
   d   dk(  r+|d
   d   j                  dd      |	d<   d|	d<   |d
   d   |	d<   |	S 7 7 mw)a)  
        Fetches web stream data for a live room.

        Args:
            url (str): The room URL.
            process_data (bool): Whether to process the data. Defaults to True.

        Returns:
            dict: A dictionary containing anchor name, live status, room URL, and title.
        zrid=(.*?)(?=&|$)r)   zdouyu.com/(.*?)(?=\?|$)zhttps://m.douyu.com/)r(   r   rL   NzD<script id="vike_pageContext" type="application/json">(.*?)</script>r   	pagePropsroomroomInfor%   zhttps://www.douyu.com/betard/)r   rL   nicknameF)anchor_nameis_live	videoLoopshow_status	room_namez&nbsp;r   titleTrZ   room_id)
r-   r.   r/   r   r   r   r8   rM   rN   r7   )
r   r(   rS   	match_ridr%   r:   rP   rQ   url2r;   s
             r   fetch_web_stream_dataz%DouyuLiveStream.fetch_web_stream_dataM   s~     II0#6	//!$C))6<BB1EC&-A#+GTXTcTc/3@ @Hzz"hjrstuvH

8,IK(0<ZHOC.se4"4DOOT__]]JJx(	$V,Z8
 V[)Q.9V3D]3SWX3X'/<DDXrRF7O $F9 )& 1) <F9'@ ^s&   A8E:E;A-E(E)A,EErQ   video_qualityc                   K   d}|d   s|d|iz  }t        |      S ddddddd}t        |d	         }|j                  d	       |sd
}nOt        |      j                         r&t	        |j                               t        |         }n|j                         }|j                  |d      }| j                  ||       d{   }|d   j                  d      }|d   j                  d      }	|	r| d|	 }
||||
|
dz  }t        |      S 7 Jw)z_
        Fetches the stream URL for a live room and wraps it into a StreamData object.
        u   斗鱼直播rZ   platform0321)ODBDUHDHDSDLDr_   rj   )r%   rF   Nr#   rtmp_url	rtmp_live/)re   qualityflv_url
record_url)
r   r4   popisdigitlistkeysr5   uppergetrR   )r   rQ   rc   re   video_quality_optionsr%   rF   flv_datarp   rq   rt   s              r   fetch_stream_urlz DouyuLiveStream.fetch_stream_urlr   s8     "#*h//Iy))!
 )I&'i  M=!))+ $%:%?%?%A B3}CU V - 3 3 5$((<33$3GGF#''
3V$((5	!
!I;/Gh=U\lsttI9%% Hs   B>D DAD)NN)z-1)Tr   )__name__
__module____qualname____doc__r4   r   dictr   staticmethodr$   rx   rE   rR   boolrb   r5   r   r~   __classcell__)r   s   @r   r
   r
      s    13: 1sTz 1

T 
 =# = =ls l lc l0s #  (#s #$ #RV #J"& "&S3YQUEU "&ak "&r   r
   )r   rM   r-   r6   r1   r#   r   r   requests.async_httpr   baser   r
    r   r   <module>r      s+      	   + , !G&n G&r   