
    OJni                     ~    d dl Z 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 ddl	m
Z
mZ ddlmZ ddlmZ  G d d	e      Zy)
    N   )JS_SCRIPT_PATH)
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d Ze	d	        Z
dd
ededefdZe	ddedeez  dz  defd       Z xZS )MiguLiveStreamzK
    A class for fetching and processing Migu live stream information.
    N
proxy_addrcookiesc                 P    t         |   ||       | j                         | _        y N)super__init___get_pc_headers
pc_headers)selfr   r   	__class__s      U/home/uftp/myenv/lib/python3.12/site-packages/streamget/platforms/migu/live_stream.pyr   zMiguLiveStream.__init__   s"    W-..0    returnc                 2    dddddd| j                   xs ddS )	Nzhttps://www.miguvideo.comzhttps://www.miguvideo.com/z}Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0miguvideo_default_www	miguvideoH5 )originrefererz
user-agentappCodeappIdchannelcookie)r   )r   s    r   r   zMiguLiveStream._get_pc_headers   s-    13I. ll(b	
 		
r   c                 t  K   |j                  d      d   j                  d      d   }d| d}t        || j                  | j                         d {   }t        j                  |      }|d   j                  d	      }|d   j                  d
      }|dz   |d   j                  dd      z   }|||fS 7 aw)N?r   /zGhttps://vms-sc.miguvideo.com/vms-match/v6/staticcache/basic/basic-data/z
/miguvideor   headersbodypIdtitle-detailPageTitler   )splitrsplitr   r   r   jsonloadsget)	r   urlweb_idapijson_str	json_dataroom_idanchor_namer,   s	            r   _get_live_room_infoz"MiguLiveStream._get_live_room_info#   s     3"))#.r2WX^W__ij"34??DOO\\JJx(	F#''.'++G4c!If$5$9$9:KR$PPU** ]s   AB8B6A"B8c                    K   	 t        j                  dt         d| gddd      }|j                  j	                         S # t
        j                  $ r t        j                  d      w xY ww)Nnodez/migu.jsT)capture_outputtextcheckzBFailed to execute JS code. Please check if the Node.js environment)
subprocessrunr   stdoutstripexecjsProgramError)r4   results     r   _get_dd_calcuzMiguLiveStream._get_dd_calcu-   sr     		l^^N+84c:#	F ==&&(("" 	l%%&jkk	ls   A-<A  A-)A**A-r4   process_datac           	        K   | j                  |       d{   \  }}}|dd}|s|S |dt        t        j                               t	        t        j
                         dz        dddd	d
}dt        j                  j                  |       }t        || j                  | j                         d{   }	t        j                  |	      }
|
d   d   d   }|dk7  r|S ||d<   |
d   d   d   }| j                  |       d{   }| d| d}d|v r6t        || j                  | j                  d       d{   }||d<   ||d<   n
||d<   ||d<   d|d<   |S 7 E7 7 \7 '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.
        NF)r:   is_live3i  truefalsemgwwwr   )contIdrateTypeclientId	timestamp	flvEnablexh265chip	channelIdz=https://webapi.miguvideo.com/gateway/playurl/v3/play/playurl?r(   r*   contentcurrentLive1r,   urlInfor4   z	&ddCalcu=z	&sv=10010z.m3u8T)r   r)   redirect_urlm3u8_url
record_urlflv_urlrK   )r;   struuiduuid4inttimeurllibparse	urlencoder   r   r   r1   r2   rH   )r   r4   rI   r9   r:   
live_titlerG   paramsr6   r7   r8   live_status
source_urlddCalcureal_source_urlr]   s                   r   fetch_web_stream_dataz$MiguLiveStream.fetch_web_stream_data:   s     261I1I#1N+N(j!,?MDJJL)TYY[-.	
 NfllNdNdekNlMmn"34??DOO\\JJx(	'	2=A#M(F7O"6*95e<J ..z::G!+IgYiHO/)!*#gk"m m%-z"'/|$$3y!'6|$ $F9G ,O  ] ;msG   E%EBE%4E5AE%E!6E%;E#<!E%E%!E%#E%r8   video_qualityc                 .   K   | ddiz  } t        |       S w)z_
        Fetches the stream URL for a live room and wraps it into a StreamData object.
        platformu   咪咕直播)r   )r8   ro   s     r   fetch_stream_urlzMiguLiveStream.fetch_stream_urlk   s"     
 	j.11	9%%s   )NN)Tr   )__name__
__module____qualname____doc__r`   r   dictr   r;   staticmethodrH   boolrn   rc   r   rr   __classcell__)r   s   @r   r   r      s    13: 1sTz 1

 

+ 
l 
l/s /$ /RV /b &$ &sSy4?O &[e & &r   r   )r1   rA   rd   urllib.parsere   ra   rE   r   r   datar   r   requests.async_httpr   baser	   r    r   r   <module>r      s1           + , !b&^ b&r   