
    OJni                     b    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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 )YYLiveStreamzI
    A class for fetching and processing YY live stream information.
    N
proxy_addrcookiesc                 P    t         |   ||       | j                         | _        y N)super__init___get_pc_headers
pc_headers)selfr   r   	__class__s      S/home/uftp/myenv/lib/python3.12/site-packages/streamget/platforms/yy/live_stream.pyr   zYYLiveStream.__init__   s"    W-..0    returnc                 *    dd| j                   xs ddS )NzPMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0z;zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 )z
user-agentzaccept-languagecookie)r   )r   s    r   r   zYYLiveStream._get_pc_headers   s    l\ll(b
 	
r   urlprocess_datac                 ~  K   t        |j                         | j                  | j                         d{   }t	        j
                  d|      j                  d      }t	        j
                  d|t        j                        j                  d      }d|z   dz   |z   dz   }|j                  d	      }d
||d
ddd}dt        j                  j                  |       }	t        |	|| j                  | j                         d{   }
t        j                  |
      }||d<   d||t        t        j                         dz        d}dt        j                  j                  |       }t        || j                  | j                         d{   }t        j                  |      }|d   d   |d<   |S 7 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.
        )r   headersNznick: "(.*?)",
\s+logo   zsid : "(.*?)",
\s+ssidzE{"head":{"seq":1701869217590,"appidstr":"0","bidstr":"121","cidstr":"z","sidstr":"a%  ","uid64":0,"client_type":108,"client_ver":"5.17.0","stream_sys_ver":1,"app":"yylive_web","playersdk_ver":"5.17.0","thundersdk_ver":"0","streamsdk_ver":"5.17.0"},"client_attribute":{"client":"web","model":"web0","cpu":"","graphics_card":"","os":"chrome","osversion":"0","vsdk_version":"","app_identify":"","app_version":"","business":"","width":"1920","height":"1080","scale":"","client_type":8,"h265":0},"avp_parameter":{"version":1,"client_type":8,"service_type":0,"imsi":0,"send_time":1701869217,"line_seq":-1,"gear":4,"ssl":1,"stream_format":0}}zutf-801701869217590json)uidcidsidappidsequenceencodez1https://stream-manager.yy.com/v3/channel/streams?)datar   r   anchor_namer   i  )r#   r%   ssid_zhttps://www.yy.com/live/detail?r)   roomNametitle)r   stripr   r   researchgroupDOTALLr(   urllibparse	urlencoder"   loadsinttime)r   r   r   html_strr*   r$   r)   
data_bytesparamsapijson_str	json_data
detail_api	json_str2
json_data2s                  r   fetch_web_stream_dataz"YYLiveStream.fetch_web_stream_data   s     #399;4??TXTcTcddii :HEKKANii2HbiiHNNqQWZ]]`nnqttEE [[)
'
 B&,,BXBXY_B`Aab"3ZDOO]a]l]lmmJJx(	#.	-  TYY[4'(	
 7v||7M7Mf7U6VW
#J4??TXTcTcdd	ZZ	*
'/
;	'I e, n es5   4F=F6CF=F9B
F=F;'F=9F=;F=r?   video_qualityc                    K   | j                  dd      }d|dd}d| v r:| d   d   }t        |j                               d   }|d	   d
   }|d| d   d||dz  }t        |      S w)z_
        Fetches the stream URL for a live room and wraps it into a StreamData object.
        r*   r   u   YY直播F)platformr*   is_liveavp_info_resstream_line_addrr   cdn_infor   Tr.   OD)rG   r.   qualityflv_url
record_url)getlistvaluesr   )r?   rD   r*   resultrI   rJ   rM   s          r   fetch_stream_urlzYYLiveStream.fetch_stream_urlK   s     
  mmM26"&

 Y&(89KL,3356q9Hz*51G"7+"% F 6""s   A"A$)NN)Tr   )__name__
__module____qualname____doc__strr   dictr   boolrC   staticmethodr8   r   rS   __classcell__)r   s   @r   r
   r
      s~    13: 1sTz 1
 
/s /$ /RV /b #$ #sSy4?O #[e # #r   r
   )r"   r0   r9   urllib.parser4   r)   r   r   requests.async_httpr   baser   r
    r   r   <module>ra      s(     	   + , !V#> V#r   