
    OJniT                     f    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
 ddlmZ  G d d	e      Zy)
    N   )
StreamDatawrap_stream)	async_req)generate_random_string   )BaseLiveStreamc                        e Zd ZdZddedz  dedz  dedz  f fdZdefdZ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 )TwitchLiveStreamzM
    A class for fetching and processing Twitch live stream information.
    N
proxy_addrcookiesaccess_tokenc                 ^    t         |   ||       || _        | j                         | _        y N)super__init__r   _get_pc_headers
pc_headers)selfr   r   r   	__class__s       W/home/uftp/myenv/lib/python3.12/site-packages/streamget/platforms/twitch/live_stream.pyr   zTwitchLiveStream.__init__   s*    W-(..0    returnc           	      ~    dddd| j                   xs ddt        d      j                         | j                  xs ddS )	NzPMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0zen-USzhttps://www.twitch.tv/kimne78kx3ncx6brgo4mv6wki5h1ko ztext/plain;charset=UTF-8   )z
user-agentzaccept-languagerefererz	client-idzclient-integrityzcontent-typez	device-idcookie)r   r   lowerr   )r   s    r   r   z TwitchLiveStream._get_pc_headers   sF    l&/9 $ 1 1 7R6/399;ll(b	
 		
r   urlc                 H  K   |j                  d      d   j                  dd      d   }dd|id	dd
didg}t        d| j                  | j                  |       d {   }t        j                  |      }|d   d   d   }|d   }|d    d| }|d   rdnd}	||	fS 7 @w)N?r   /   maxsplitChannelShellloginpersistedQuery@580ab410bcd0c1ad194224957ae2241e5d252b2c5173d8e0cce9d32d5bb14efe)version
sha256Hash)operationName	variables
extensionshttps://gql.twitch.tv/gqlr   headers	json_datadatauserOrErrordisplayName-streamTF)splitrsplitr   r   r   jsonloads)
r   r!   uidr6   json_strr5   	user_data
login_namenicknamestatuss
             r   get_twitchtv_room_infoz'TwitchLiveStream.get_twitchtv_room_info    s     iinQ&&sQ&7; "0S %#$&h'
 ##>4??dhdsds-13 3JJx(	aL(7	w'
./q="8,%3s   AB"B  AB"process_datac                   K   |j                  d      d   j                  dd      d   }ddd	|d
dddd}t        d| j                  | j                  |       d{   }t        j                  |      }|d   d   d   }|d   d   d   }| j                  |j                                d{   \  }	}
|	|
d}|
rt        j                  ddg      }i dddddddd d!d"d#dd$d%d&d'd(d)d*d+d,|d-d.d/d0d1dd2dd3|d4|d5d6i}t        j                  j                  |      }d7| d8| }| j                  || j                  | j                  9       d{   }|||d:z  }|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#   r   r$   r%   r&   r(   PlaybackAccessToken_Templatea'  query PlaybackAccessToken_Template($login: String!, $isLive: Boolean!, $vodID: ID!, $isVod: Boolean!, $playerType: String!) {  streamPlaybackAccessToken(channelName: $login, params: {platform: "web", playerBackend: "mediaplayer", playerType: $playerType}) @include(if: $isLive) {    value    signature   authorization { isForbidden forbiddenReasonCode }   __typename  }  videoPlaybackAccessToken(id: $vodID, params: {platform: "web", playerBackend: "mediaplayer", playerType: $playerType}) @include(if: $isVod) {    value    signature   __typename  }}TFr   site)isLiver*   isVodvodID
playerType)r/   queryr0   r2   r3   Nr6   streamPlaybackAccessTokenvalue	signature)anchor_nameis_live bdd22331a986c7f1073628f2fc5b19da 064bc3ff1722b6f53b0b5b8c01e46ca5acmbze30=allow_sourcetruebrowser_familyfirefoxbrowser_versionz124.0cdmwv
fast_breados_nameWindows
os_versionz	NT%2010.0p3553732platformwebplay_session_idplayer_backendmediaplayerplayer_versionz1.28.0-rc.1playlist_include_frameratereassignments_supportedsigtokentranscode_modecbr_v1z(https://usher.ttvnw.net/api/channel/hls/z.m3u8?)m3u8proxyr4   )m3u8_urlplay_url_list)r;   r<   r   r   r   r=   r>   rE   striprandomchoiceurllibparse	urlencodeget_play_url_list)r   r!   rF   r?   r6   r@   r5   rm   signrR   live_statusresultrf   params
access_keyrr   rs   s                    r   fetch_web_stream_dataz&TwitchLiveStream.fetch_web_stream_data<   sJ     iinQ&&sQ&7; <3 $
$ ##>4??dhdsds-13 3JJx(	&!"=>wG !<=kJ)-)D)DSYY[)Q#Q [!,E$mm-OQs,tuO !) "7	
 t f 9 k Y E "? !- !- -f *6  t!" #$ !(%F(  //7JA#fZLYH"&"8"8hdooAE #9 #R RM8mLLFG3 $R4Rs8   AE6E/AE6/E20B0E6 E4!E62E64E6r5   video_qualityc                 ^   K   | j                  ||dd       d{   }t        |      S 7 w)z_
        Fetches the stream URL for a live room and wraps it into a StreamData object.
        TTwitch)specrd   N)get_stream_urlr   )r   r5   r   r6   s       r   fetch_stream_urlz!TwitchLiveStream.fetch_stream_url   s6      ((MW_(``4   as   -+-)NNN)Tr   )__name__
__module____qualname____doc__strr   dictr   tuplerE   boolr   intr   r   __classcell__)r   s   @r   r   r      s    13: 1sTz 1`cfj`j 1


 

     8Cs C$ CRV CJ! !S3YQUEU !ak !r   r   )r=   ru   urllib.parserw   r6   r   r   requests.async_httpr   utilsr   baser	   r    r   r   <module>r      s(       + , + !{!~ {!r   