
    OJni                     r    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	m
Z
 ddlmZ ddlmZ  G d d	e      Zy)
    N   )JS_SCRIPT_PATHutils)
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	ddedee
z  dz  defdZ xZS )TaobaoLiveStreamzM
    A class for fetching and processing Taobao live stream information.
    N
proxy_addrcookiesc                 P    t         |   ||       | j                         | _        y N)super__init___get_pc_headers
pc_headers)selfr   r   	__class__s      W/home/uftp/myenv/lib/python3.12/site-packages/streamget/platforms/taobao/live_stream.pyr   zTaobaoLiveStream.__init__   s"    W-..0    returnc                 *    dd| j                   xs ddS )Nzhttps://huodong.m.taobao.com/zPMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0 )refererz
user-agentcookie)r   )r   s    r   r   z TaobaoLiveStream._get_pc_headers   s    6lll(b
 	
r   urlprocess_datac                   K   d| j                   d   vrt        d      | j                  |d      }|sUt        || j                  | j                          d{   }t        j                  d|      d   }| j                  |d      }d	d
ddddddddddd|z   dz   d}t        d      D ]  }d
}t        j                  d| j                   d         d   }	t        t        j                         dz        }
|	j                  d      d    d|
 d| d|d   z   }	 t        t         d      5 }|j                         }ddd       t        j                        j!                  d|      }|||
dz  }dt$        j&                  j)                  |       }t        || j                  | j                   d d!d!"       d{   \  }}t+        j,                  |      }|s|c S |d#   }|d$gk(  rL|d   d%   d&   }|d'd(}|d   d)   }|d*k(  r+|d   d+   }|d   d,   }d- }t/        ||d!.      }|d!|||d/z  }|c S t        d0|d           y7 # 1 sw Y   xY w# t        j"                  $ r t        j"                  d      w xY w7 ȭw)1a)  
        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.
        _m_h5_tkr   z5Error: Cookies is empty! please input correct cookiesid)r   headersNzvar url = '(.*?)';r   z2.7.0125744781733104933120r   truez"mtop.mediaplatform.live.livedetailz4.0jsonp
mtopjsonp1z{"liveId":"z","creatorId":null})jsvappKeytsign	AntiFlood	AntiCreepapivpreventFallbacktypedataTypecallbackdatar	   z_m_h5_tk=(.*?);i  _&r5   z/taobao-sign.jsr,   zBFailed to execute JS code. Please check if the Node.js environment)r,   r+   zFhttps://h5api.m.taobao.com/h5/mtop.mediaplatform.live.livedetail/4.0/?   T)r   r   r#   timeoutreturn_cookiesinclude_cookiesretu   SUCCESS::调用成功broadCasteraccountNameF)anchor_nameis_livestreamStatus1titleliveUrlListc                     dddddd}| j                  d      xs | j                  d      }|j                  |d	      }|S )
Nr      r	   r      )lldldmdhdud
definitionnewDefinition)get)itemdefinition_priority	def_valueprioritys       r   get_sort_keyz<TaobaoLiveStream.fetch_web_stream_data.<locals>.get_sort_key[   sJ    #$AQaq/+ %)HH\$:$Wdhh>W	#6#:#:9b#I'r   )keyreverse)r@   rC   play_url_listlive_idz&Error: Taobao live data fetch failed, )r   	Exception
get_paramsr   r   refindallrangeinttimesplitopenr   readexecjscompilecallProgramErrorurllibparse	urlencoder   jsonp_to_jsonsorted)r   r   r   rY   html_strredirect_urlparamsiapp_keyr!   t13pre_sign_strfjs_coder,   r/   	jsonp_str
new_cookie	json_dataret_msgr?   resultlive_status
live_titlerX   rU   s                             r   fetch_web_stream_dataz&TaobaoLiveStream.fetch_web_stream_data   s     T__X66STT//#t,&stPTP_P_``H::&:HEaHLoolD9G   7%$!G+.CC
  q (	WA Gzz"3T__X5NOPQRHdiikD()C&nnS1!45Qse1WIQG&QW.XLp^,O<= 'ffhG'~~g.33FLI t#..FZ[a[g[g[q[qrx[yZz{C*3aeapap<>tei+k %k!Iz++I6I  &G233'/>}M)4G'/?#%!*6!27!;J$-f$5m$DM( %+=lTX$YM$VcpwxxF"HQR UVVQ(	W) a4' ' && p))*noop%ksQ   AJIB?JI+I<-I)AJ;J<BJI	I)JJrx   video_qualityc                 b   K   | j                  ||dddd       d{   }t        |      S 7 w)z_
        Fetches the stream URL for a live room and wraps it into a StreamData object.
        allhlsUrlflvUrlu   淘宝直播)url_typehls_extra_keyflv_extra_keyplatformN)get_stream_urlr   )r   rx   r~   r5   s       r   fetch_stream_urlz!TaobaoLiveStream.fetch_stream_urlj   sB      ((}uH"^ ) = = 4  =s   /-/)NN)Tr   )__name__
__module____qualname____doc__strr   dictr   boolr}   r_   r   r   __classcell__)r   s   @r   r   r      sx    13: 1sTz 1
 
LWs LW$ LWRV LW\! !S3YQUEU !ak !r   r   )r\   r`   urllib.parserh   rd   r   r   r   r5   r   r   requests.async_httpr   baser
   r    r   r   <module>r      s+    	    % + , !d!~ d!r   