
    OJni
,                     f    d dl Z d dlZd dlZddlm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   )utils)
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  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
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 )PopkonTVLiveStreamzO
    A class for fetching and processing PopkonTV live stream information.
    N
proxy_addrcookiesusernamepasswordaccess_tokenpartner_codec                     t         |   ||       || _        || _        || _        || _        | j                         | _        y N)super__init__r   r   r   r   _get_pc_headers
pc_headers)selfr   r   r   r   r   r   	__class__s          Y/home/uftp/myenv/lib/python3.12/site-packages/streamget/platforms/popkontv/live_stream.pyr   zPopkonTVLiveStream.__init__   s@    W-  ((..0    returnc                 f    ddddd}| j                   xs ddd| j                   d	|d
   dddddd
S )NzGClient CuVQOGkDWRCVoXyihBzAKdB91Y6zzA/FG+f+BhhYNweNnikvKKnam63aHinBb+GkzGClient qHeJyievkdcExwKzYkXutZ4wSgXfLuLppECpHrh4CRUTPNtMwqSsssPopx0k1pKizGClient FpAhe6mh8Qtz116OENBmRddbYVirNKasktdXQiuHfm88zRaFydTsFy63tzkdZY0uzGClient J50A6F+Mi3GHv+bGEsFtvfhqFpFlg2EEQBLW9qDxwG8GgKLN4t5GqHHSIdWI6rZj)AndroidIOSPWMW !application/json, text/plain, */*Bearer /zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6r    z
keep-aliveapplication/jsonhttps://www.popkontv.comzEhttps://www.popkontv.com/live/view?castId=owl2205&partnerCode=P-00117PMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0)
cookieacceptauthorizationzaccept-language	clientKey
connectionzcontent-typeoriginrefererz
user-agent)r   r   )r   client_key_lists     r   r   z"PopkonTVLiveStream._get_pc_headers   s^     a\[[	
 ll(b9&t'8'8&9:P(.&.0^l
 	
r   urlc                 |  K   d|v r&t        j                  d|      j                  d      }n%t        j                  d|      j                  d      }| j                  || j                  d}d}t        || j                  | j                  |       d {   }t        j                  |      }d}d	}|d
   d   D ]  }	|	d   |k(  s|	d   }
|
 d| }|	d   } n |sd|v rt        j                  d|      }nt        j                  d|      }|r|j                  d      n| j                  }d| d| }t        || j                  | j                         d {   }t        j                  d|      }|r|j                  d      nd	}
| d|
 }d| d| }t        || j                  | j                         d {   }t        j                  d|      j                  d      }t        j                  |      }d|d   d   v r+|d   d   d   d
   }|d   }|d   }|d   }|d   }||||||gfS |d fS 7 7 7 |w) Nmcidzmcid=(.*?)&   zcastId=(.*?)(?=&|$))partnerCodesearchKeywordsignIdz:https://www.popkontv.com/api/proxy/broadcast/v1/search/all)r   headers	json_datar"   UnknowndatabroadCastListmcSignIdnickName-mcPartnerCodezmcPartnerCode=(P-\d+)zpartnerCode=(P-\d+)z.https://www.popkontv.com/channel/notices?mcid=z&mcPartnerCode=)r   r8   z"mcNickName":"([^"]+)"z*https://www.popkontv.com/live/view?castId=z&partnerCode=zA<script id="__NEXT_DATA__" type="application/json">(.*?)</script>mcDataprops	pagePropsmc_isPrivatemc_castStartDate	mc_signIdcastType)
researchgroupr   r   r   r   r   jsonloads)r   r1   	anchor_idr;   apijson_strr9   r   anchor_nameitemmc_nameregex_resultnotices_urlnotices_responsemc_name_matchlive_url	html_str2	json_str2
json_data2	room_data
is_privatecast_start_date_code
mc_sign_id	cast_types                           r   _get_room_infoz!PopkonTVLiveStream._get_room_info/   s    S=		-5;;A>I		"7=CCAFI  ,,&mm
 K"34??DOOgkllJJx(	f%o6 	DJ9,z*!(	9+6#O4	 #%!yy)A3G!yy)?E4@<--a0dFWFWLJ9+UdeqdrsK%.{t`d`o`o%ppII&?AQRM0=m))!,9G&Kq	2K?	{-XdWef#HRVRaRabb	IIaclmsstuv	ZZ	*
z'*;77"7+K8B6JI">2J#,-?#@ ";/J!*-I!5|ZQZ\f ggg$$I m&  q cs?   BH<H50H<BH<H8A#H<=H:>A8H<8H<:H<c                 H  K   ddddddd}| j                   | j                  | j                  d}d	}	 t        j                  | j
                        }t        j                  |d
d      4 d {   }|j                  |||       d {   }|j                          |j                         }|j                  d      }|dk(  rt        d      |dk(  r=|d   j                  d      }	|d   j                  d      }
|	|
fcd d d       d {    S t        d|j                  dd             7 7 7 '# 1 d {  7  sw Y   y xY w# t        j                  $ r'}t        d|j                  j                         d }~wt        $ r}t        d|       d }~ww xY ww)Nr#   r%   zFBasic FpAhe6mh8Qtz116OENBmRddbYVirNKasktdXQiuHfm88zRaFydTsFy63tzkdZY0ur&   r'   r(   )AcceptzAccept-LanguageAuthorizationzContent-TypeOriginz
User-Agent)r5   r7   signPwdz2https://www.popkontv.com/api/proxy/member/v1/login   F)proxytimeoutverify)rK   r8   statusCdE4010zPpopkontv login failed, please reconfigure the correct login account or password!S2000r;   tokenr5   zpopkontv login failed, 	statusMsgzunknown errorz)HTTP status error occurred during login: z-An exception occurred during popkontv login: )r   r   r   r   handle_proxy_addrr   httpxAsyncClientpostraise_for_statusrK   get	ExceptionHTTPStatusErrorresponsestatus_code)r   r8   r;   r1   r   clientrw   r9   login_status_coderm   r   es               r   login_popkontvz!PopkonTVLiveStream.login_popkontvb   s    9Pe.0l
  ,,mm}}
 C	Q00AJ((z2eT m mX^!'StW!MM))+$MMO	$-MM*$=!$/#$vww&'1%f-11':E#,V#4#8#8#GL ,.m m m $&=immKYh>i=j$kllmMm m m m $$ 	bG

H^H^G_`aa 	QKA3OPP	Qs   0F";E .D0/E 2D6
D2A5D6 E D4E F"D60E 2D64E 6E<D?=EE F"E F"F  FFFF"process_datac           	         K    j                  |       d{   \  }}|dd}d}|r|\  d|d<    j                  |d      t              dk7  rst        d| d	      d"d
t        dz  dt        f fd} | j
                         d{   }d|v sd|v rt         j                        dk  st         j                        dk  rt        d       j                          d{   \  }	}
|	r8t        |	      dk(  r*d|	  j                  d<   |	 _         ||
       d{   }nt        d      t        j                  |      }|d   }|d   dk(  rt        d      |d   dk(  rNt              dz
   | j
                         d{   }t        j                  |      }|d   d   }|||dz  }n%|d   dk(  r|d   d   }|||dz  }nt        d |      |s|S ||d!<   |S 7 7 ^7 7 7 e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.
        NF)rP   is_liveTr   pwdr   z*Failed to retrieve live room data because zL's room is a private room. Please configure the room password and try again.coder   c                    K   d d dd| 	j                   dd}d}t        |	j                  |	j                         d {   S 7 w)Nr   r?      z4.6.2)androidStorecastCodecastPartnerCode
castSignIdrG   commandTypeexePathisSecretr5   r   r7   versionzChttps://www.popkontv.com/api/proxy/broadcast/v1/castwatchonoffguest)r   r9   r8   )r   r   r   r   )
r   
_json_dataplay_apicast_partner_coder]   r_   r\   r^   room_passwordr   s
      r   
fetch_dataz<PopkonTVLiveStream.fetch_web_stream_data.<locals>.fetch_data   sz     $%#-,a0D/E F'8", )#$  *#' -"mm&
 a&JX\XgXgi i i is   AA
AAzHTTP Error 400zstatusCd":"E5000   
   zvpopkontv login failed! Please enter the correct account and password for the popkontv platform in the config.ini file.i  r$   rc   zKpopkontv login failed, please check if the account and password are correctrn   rj   L000AzYou are an unverified member. After logging into the popkontv official website, please verify your mobile phone at the bottom of the 'My Page' > 'Edit My Information' to use the service.L0001r4   r;   
castHlsUrl)m3u8_url
record_urlL0000z&Failed to retrieve live stream source,	new_tokenr   )r`   
get_paramsintRuntimeErrorstrr   lenr   r   r|   r   r   rK   rL   )r   r1   r}   rP   	room_inforesultr   r   rO   new_access_tokennew_partner_coder9   
status_msgr   r   r]   r_   r\   r^   r   s   `             @@@@@@r   fetch_web_stream_dataz(PopkonTVLiveStream.fetch_web_stream_data   s{     (,':':3'?!?Y!,?	YbV "3ZJ $F9 OOC7M:!#M"%OP[} ]W $X Y YisTz iS i i& ((9(9::H8+/AX/Mt}}%)S-?"-D& (S T T <@;N;N;P5P2 "2#,<(=(D9@AQ@R7SDOOO4(8D%%/0@%AAH&'tuu

8,I";/J$/" $F G G :&'1'*+?'@1'D$!+D,=,=!>> JJx0	$V,\:xxHH:&'1$V,\:xxHH"#KZXX  '{G "@< ; 6Q
  B ?s[   HG:B HG= AH:H ;;H6H7A(HH AH=H HHHr9   video_qualityc                 .   K   | ddiz  } t        |       S w)z_
        Fetches the stream URL for a live room and wraps it into a StreamData object.
        platformPopkonTV)r   )r9   r   s     r   fetch_stream_urlz#PopkonTVLiveStream.fetch_stream_url   s"     
 	j*--	9%%s   )NNNNNzP-00001)Tr   )__name__
__module____qualname____doc__r   r   dictr   tupler`   r|   boolr   staticmethodr   r   r   __classcell__)r   s   @r   r   r      s     jnjs13: 1sTz 1\_bf\f 1:1<?$J1]`cg]g1
 
,1% 1% 1%f&Qe &QPNs N$ NRV N` &$ &sSy4?O &[e & &r   r   )rK   rH   rp   r"   r   r;   r   r   requests.async_httpr   baser	   r    r   r   <module>r      s(     	   + , !T& T&r   