
    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                   x     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dz  fd	Zdd
edee	z  dz  de
fdZ xZS )KwaiLiveStreamzO
    A class for fetching and processing Kuaishou live stream information.
    N
proxy_addrcookiesc                 P    t         |   ||       | j                         | _        y N)super__init___get_pc_headers
pc_headers)selfr   r   	__class__s      Y/home/uftp/myenv/lib/python3.12/site-packages/streamget/platforms/kuaishou/live_stream.pyr   zKwaiLiveStream.__init__   s"    W-..0    urlprocess_datareturnc                 x  K   	 t        || j                  | j                         d{   }	 t	        j
                  d|      j                  d      }t	        j                  d|      d   d	z   }t        j                  |      }ddd}d|v sd|vr"|d   d   |d   d   z   }t        d| d|       |j                  d      st        d      |d   j                  dd      }	|j                  d|	i       |d   j                  d      rPd|d   d   v r!d|d   d   d   vr|S |d   d   d   d   d   }
n|d   d   d   d   d   }
|j                  |
dd       |S 7 5# t        $ r}t        d| d|       d}~ww xY w# t        t        t        j                  f$ r}t        d
| d|       d}~ww xY w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   r   headersNzFailed to fetch data from .z=<script>window.__INITIAL_STATE__=(.*?);\(function\(\)\{var s;   z(\{"liveStream".*?),"gameInfor   }zFailed to parse JSON data from z	. Error: r   F)typeis_live	errorType
liveStreamtitlecontentzFailed URL: z Error message: z+IP banned. Please change device or network.authorname anchor_nameplayUrlsh264adaptationSetrepresentationT)flv_url_listr    )r   r   r   	ExceptionresearchgroupfindalljsonloadsAttributeError
IndexErrorJSONDecodeErrorgetupdate)r   r   r   html_strejson_str	play_listresult	error_msgr(   play_url_lists              r   fetch_web_stream_dataz$KwaiLiveStream.fetch_web_stream_data   s    	D&34??TXTcTcddH	Qyy!dfnouuvwxH

#CXNqQTWWI

9-I .)#|9'D!+.w7)K:PQZ:[[Il3%/?	{KLL}}\*IJJ)--fb9}k23\"&&z2<0<<")L*A**Mf*UU!M ), 7
 CF KO \]m n ), 7
 CA F WXh iMM=TJKA e 	D8QqcBCC	D 
D,@,@A 	Q=cU)A3OPP	QsW   F:%E! EE! AF CF:E! !	F *E;;F  F:F7!F22F77F:	json_datavideo_qualityc                   K   d}|d   dk(  r|d   s|d|iz  }t        |      S |d   }||d   |d}|r5dd	d
dddd}| j                  |      \  }}d|v rI|d   ddd   }t        |      dk  r#|j                  |d          t        |      dk  r#||   d   }	|	|d<   d|v rd|d   d   v rg|d   }
t	        |
d d      }
|j                  |d      t        fdt        |
      D        d      }|t        |
      dz
  }|
|   d   }||d<   ||d<   nL|d   ddd   }
t        |
      dk  r#|
j                  |
d          t        |
      dk  r#|
|   d   }|||dz  }d|d<   ||d<   t        |      S w) z_
        Fetches the stream URL for a live room and wraps it into a StreamData object.
        u   快手直播r   r   r    platformr(   )rE   r(   r    i i  i  i  i   iX  )ODBDUHDHDSDLDm3u8_url_listN   r   m3u8_urlr-   bitrater   c                     | d   S )NrP    )xs    r   <lambda>z1KwaiLiveStream.fetch_stream_url.<locals>.<lambda>^   s
    a	l r   T)keyreversec              3   :   K   | ]  \  }}|d    k  s|  yw)rP   NrR   ).0irS   quality_index_bitrate_values      r   	<genexpr>z2KwaiLiveStream.fetch_stream_url.<locals>.<genexpr>b   s!     ntq!!I,RmBmns   flv_url
record_url)r\   r]   quality)r   get_quality_indexlenappendsortedr8   next	enumerate)r   rB   rC   rE   live_statusr>   quality_mapping_bitquality_indexrL   rO   r-   r\   rZ   s               @r   fetch_stream_urlzKwaiLiveStream.fetch_stream_url?   s
     "V!)I*>*h//Iy))	* !$]3"
 ).d4t[^fi"j+/+A+A-+P(M=)+ )/ :4R4 @-(1,!((r):; -(1,(7>%-z"*	. 9! <<#,^#<L#),<R\`#aL2E2I2I-Y^2_/$(ny'>n%M %,(+L(9A(=*=9%@G(/F9%+2F<(#,^#<TrT#BLl+a/$++L,<= l+a/*=9%@G'IIF $F9 -F96""s   BE6B=E6%E6)NN)Tr   )__name__
__module____qualname____doc__strr   booldictrA   intr   rh   __classcell__)r   s   @r   r
   r
   	   sj    13: 1sTz 1,s ,$ ,RVY]R] ,\3# 3#S3YQUEU 3#ak 3#r   r
   )
r3   r/   datar   r   requests.async_httpr   baser   r
   rR   r   r   <module>ru      s"     	 + , !i#^ i#r   