
    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            
            e Zd ZdZ	 	 ddedz  dedz  dedz  dedz  f fdZdefd	Zdedz  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 )FlexTVLiveStreamzM
    A class for fetching and processing FlexTV live stream information.
    N
proxy_addrcookiesusernamepasswordc                 l    t         |   ||       || _        || _        | j	                         | _        y N)super__init__r   r   _get_pc_headers
pc_headers)selfr   r   r   r   	__class__s        W/home/uftp/myenv/lib/python3.12/site-packages/streamget/platforms/flextv/live_stream.pyr   zFlexTVLiveStream.__init__   s0    W-  ..0    returnc                 0    ddddd| j                   xs ddS )Nz!application/json, text/plain, */*z/zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6zapplication/json;charset=UTF-8zhttps://www.ttinglive.com/zPMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0 )acceptzaccept-languagezcontent-typerefererz
user-agentcookie)r   )r   s    r   r   z FlexTVLiveStream._get_pc_headers   s'    9P<3lll(b
 	
r   c           	        K   | j                   | j                  dddd}d}	 t        || j                  | j                  |dd       d {   \  }}|red|v radj                  |j                         D cg c]  \  }}| d	|  c}}      | _        | j                  | j                  d
<   | j                  S t        d      7 yc c}}w # t        $ r}t        d|       d }~ww xY ww)NTPCWEB)loginIdr   	loginKeepsaveIddevicez,https://api.ttinglive.com/v2/api/auth/signin   )r   headers	json_datareturn_cookiestimeoutflx_oauth_accessz; =r   zVPlease check if the FlexTV account and password in the configuration file are correct.z FlexTV login request exception: )	r   r   r   r   r   joinitemsr   	Exception)r   dataurl_cookie_dictkves           r   login_flextvzFlexTVLiveStream.login_flextv   s     }}
 =	D#,ST__VZVeVe7;DZ\$^ ^NA{1[@#yyARARAT)UAQCq*)UV,0LL)||#ln n^ *V  	D>qcBCC	DsL   C+(C 
C+C 6C
1C 8C+9C C 	C(C##C((C+r0   c                     K   dt         f fd} |        d {   }d|v rt        |d         dkD  r|d   d   d   }|S y y 7 (w)Nr   c                    K   j                  d      d   j                  dd      d   } d|  d}t        |j                  j                  	       d {   }d
|v rt        d      t        j                  |      S 7 (w)N/liver   /   maxsplitz'https://api.ttinglive.com/api/channels/z/stream?option=allr   r&   zHTTP Error 400: Bad Requestz`Failed to retrieve FlexTV live streaming data, please switch to a different proxy and try again.)splitrsplitr   r   r   ConnectionErrorjsonloads)user_idplay_apijson_strr   r0   s      r   
fetch_dataz:FlexTVLiveStream.get_flextv_stream_url.<locals>.fetch_data8   s     ii(+2232CBGG@	I[\H&xDOOUYUdUdeeH,8%v  ::h'' fs   ABB )Bsourcesr   r0   )dictlen)r   r0   rH   r'   play_urls   ``   r   get_flextv_stream_urlz&FlexTVLiveStream.get_flextv_stream_url7   s_     	($ 	( %,&		!c)I*>&?!&C +A.u5HO 'D! 's   AA)Aprocess_datac                 x  K   |j                  d      d   j                  dd      d   }ddd	}d
}	 d| d}t        || j                  | j                         d
{   }t        j                  d|      j                  d      }t        j                  |      }	|	d   d   d   }
d|
v xr d|
j                  d      v }|rt        | j                        dk  st        | j                        dk  rt        d      | j                          d
{   }|st        d      |r|n| j                   }|| j                  d<   t        || j                  | j                         d
{   }t        j                  d|      j                  d      }t        j                  |      }	|	d   d   d   }
d|
v}|rw|
d   d   }|
d   d    d| }||d<   | j#                  |       d
{   }|r| j%                  || j                  | j                         d
{   }|ri||d<   ||d<   d |d!<   nYd| }t        || j                  | j                         d
{   }t        j                  d"|      j                  d      }||d<   ||d$<   |S 7 07 7 -7 7 7 B# t&        $ r}t'        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.
        r9   r   r:   r;   r<   r>   r   F)anchor_nameis_liveNz#https://www.ttinglive.com/channels/r?   z3<script id="__NEXT_DATA__" type=".*">(.*?)</script>props	pagePropschannelmessageu'   로그인후 이용이 가능합니다.      zzFlexTV login failed! Please fill in the correct FlexTV platform account and password in the config. ini configuration filezFlexTV login failedCookieownerr!   nickname-rP   )m3u8proxyr&   m3u8_urlplay_url_listTrQ   u,   <meta name="twitter:title" content="(.*?)의z-Failed to retrieve data from FlexTV live roomnew_cookies)r@   rA   r   r   r   researchgrouprC   rD   getrK   r   r   RuntimeErrorr6   r   rM   get_play_url_listr.   )r   r0   rN   rE   resultr`   url2html_strrG   r'   channel_data
login_needr   live_status	anchor_idrP   rL   r_   r5   s                      r   fetch_web_stream_dataz&FlexTVLiveStream.fetch_web_stream_dataG   s     ))G$Q'..sQ.?C!#6(	P8	GD&tQUQ`Q`aaHyy!VX`agghijH

8,I$W-k:9EL"l27`dpdtdtu~d7Jt}}%)S-?!-C& (] ^ ^$($5$5$77"&'<==)4+$,,,3)!*4DOOUYUdUd!ee99%Z\dekklmn JJx0	(1+>yI#<7K(1)<	!-g!6z!B C1YKP(3}%!%!;!;C!@@*.*@*@%T__doo +A +W %WM$-5z*2?/,0y)<WIF!*4DOOUYUdUd!ee ii(VX`agghij(3}% !,}S b 8
 f A%W f  	PKQOO	Ps   0J:+J JB2J JAJ 'J(A=J %J&1J JA J J.J J:J J J J J J 	J7&J22J77J:r'   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FlexTV)specplatformN)get_stream_urlr   )r   r'   ro   r/   s       r   fetch_stream_urlz!FlexTVLiveStream.fetch_stream_url   s6      ((MW_(``4   as   -+-)NNNN)Tr   )__name__
__module____qualname____doc__strr   rJ   r   r6   rM   boolrn   intr   ru   __classcell__)r   s   @r   r
   r
   	   s     jn(,13: 1sTz 1\_bf\f 1:1
 
DC$J D2s s  9s 9$ 9RV 9v! !S3YQUEU !ak !r   r
   )
rC   ra   r/   r   r   requests.async_httpr   baser   r
    r   r   <module>r      s"     	 + , !~!~ ~!r   