
    OJni                     R    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                   r     e Zd ZdZddedz  dedz  f 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 )NeteaseLiveStreamzQ
    A class for fetching and processing Netease CC live stream information.
    N
proxy_addrcookiesc                 P    t         |   ||       | j                         | _        y N)super__init___get_pc_headers
pc_headers)selfr   r   	__class__s      X/home/uftp/myenv/lib/python3.12/site-packages/streamget/platforms/netease/live_stream.pyr   zNeteaseLiveStream.__init__   s"    W-..0    urlprocess_datareturnc                 ,  K   |d   dk7  r|dz   n|}t        |j                         | j                  | j                         d{   }t	        j
                  d|t        j                        j                  d      }t        j                  |      }|s|S |d   d   d	   }|d
   }ddi}|j                  d      dk(  }	|j                  d|j                  d            |d<   |	r+|d|d   |j                  d      |j                  d      dz  }|S 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.
        /)r   headersNzK<script id="__NEXT_DATA__" .* crossorigin="anonymous">(.*?)</script></body>   props	pagePropsroomInfoInitDataliveis_liveFstatusnicknameanchor_nameTtitle	quickplay	sharefile)r#   r'   stream_listm3u8_url)r   stripr   r   researchDOTALLgroupjsonloadsget)
r   r   r   html_strjson_str	json_data	room_data	live_dataresultlive_statuss
             r   fetch_web_stream_dataz'NeteaseLiveStream.fetch_web_stream_data   s     r7c>cCis"399;4??TXTcTcdd99j%ryy227%( 	JJx(	g&{34FG	f%	U#mmH-2 )j)--
:S T}"7+(}}[9%MM+6	 F % es   ADDCDr6   video_qualityc           	        K   |d   s|ddiz  }t        |      S |d   }d}|j                  d      r|d   d   }g d}|D cg c]	  }||v s| }}t        |      d	k  r#|j                  |d
          t        |      d	k  r#| j	                  |      \  }}	||	   }
||
   d   }t        |j                               d   }||   }d|d   d|d   ||||xs |d}t        |      S c c}w w)z_
        Fetches the stream URL for a live room and wraps it into a StreamData object.
        r#   platformu   网易CC直播r+   Nr*   
resolution)bluerayultrahighstandard   r   cdnr   r&   Tr'   )r>   r&   r#   r'   qualityr+   flv_url
record_url)r   r3   lenappendget_quality_indexlistkeys)r   r6   r<   r+   rG   r*   orderkeysorted_keysquality_indexselected_qualityflv_url_listselected_cdndatas                 r   fetch_stream_urlz"NeteaseLiveStream.fetch_stream_url1   s7     #*&677Iy))Z(=='#M2<@K<E*/F33+3E3FKFk"Q&"";r?3 k"Q&+/+A+A-+P(M=*=9&'78?L 1 1 34Q7L"<0G )$]3w'$ !-X	
 4  ' Gs   A C*	C%C%2C*A'C*)NN)Tr   )__name__
__module____qualname____doc__strr   booldictr;   intr   rV   __classcell__)r   s   @r   r
   r
   	   sd    13: 1sTz 1s $ RV @ !  !S3YQUEU  !ak  !r   r
   )
r1   r-   rU   r   r   requests.async_httpr   baser   r
    r   r   <module>rc      s"     	 + , !H! H!r   