U
    n†liÔ!  ã                   @   sr   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ e 	ej
j¡ e j d¡ G dd„ deƒZdS )é    N)ÚSpiderz..c                       s¢   e Zd Z‡ fdd„Zdd„ Zd%dd„Zdd	„ Zd
d„ Zdd„ Zd&dd„Z	e
edœdd„Zdd„ Zdd„ Zdd„ Zdd„ Zd'dd„Zdd „ Zd!d"„ Zd#d$„ Z‡  ZS )(r   c                    s^   t ƒ  ¡  d| _d| _d| _d| _d| _d| _d| _d| _	dddœi dœ| _
ddddœ| _d S )NÚ )ÚkeyÚvalue)ÚsearchÚcategoryzDart/3.1 (dart:io)Úgzipzapplication/json; charset=utf-8)ú
User-AgentzAccept-Encodingzcontent-type)ÚsuperÚ__init__ÚhostÚappidÚappkeyÚudidÚ	bundlerIdÚsourceÚversionÚversionCodeÚnextValÚheaders©Úself©Ú	__class__© ú&/storage/emulated/0/lz/py/sy/AppYqk.pyr   	   s    
ýzSpider.__init__c                 C   s   dS )NZAppYqkr   r   r   r   r   ÚgetName   ó    zSpider.getNamer   c                 C   sD  z t |tƒrt | ¡ ¡n|}| dd¡| _| dd¡| _| dd¡| _| dd¡| _	| dd¡| _
| dd¡| _| dd¡| _| d	d¡}| d
¡}|D ]‚}t d|¡rº|| _ q qœzR| j|| jdd ¡ }|D ]"}t |tƒrÖ| d¡rÖ|| _ qúqÖ| jr
W  q W qœ   Y qœY qœX qœW n tk
r8   Y nX |  d¡S )NÚappIdr   r   r   r   r   r   r   r   ú,z3^https?://[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(:\d+)?/?$F)r   ÚverifyÚhttp)Ú
isinstanceÚstrÚjsonÚloadsÚstripÚgetr   r   r   r   r   r   r   ÚsplitÚreÚmatchr   Úfetchr   Ú
startswithÚ	ExceptionÚhomeContent)r   ÚextendÚextÚhostsZ
hosts_listÚiÚresÚjr   r   r   Úinit   s8    
   zSpider.initc                 C   s   dS ©NFr   )r   Úurlr   r   r   ÚisVideoFormat9   r   zSpider.isVideoFormatc                 C   s   dS r6   r   r   r   r   r   ÚmanualVideoCheck:   r   zSpider.manualVideoCheckc                 C   s   d S ©Nr   r   r   r   r   Údestroy;   r   zSpider.destroyNc                    s’   | j | jdddddtt ¡ ƒ| j| j| j| jdœ‰ |r@ˆ  	|¡ d 
‡ fdd	„tˆ  ¡ ƒD ƒ¡}|› d
| j› }t | d¡¡ ¡ ˆ d< t ˆ ¡S )NZcus3tomZxiaomiÚ15Ú1r   )r   r   Zcus1tomZ
deviceInfoZosInfoZ
otherParamZpatchNumberZ	requestIdr   r   r   r   ú&c                 3   s,   | ]$}ˆ | d kr|› dˆ | › V  qdS )r   ú=Nr   )Ú.0Úk©Úpr   r   Ú	<genexpr>N   s      z(Spider._build_payload.<locals>.<genexpr>z&appKey=zutf-8Úsign)r   r   r#   ÚuuidZuuid4r   r   r   r   ÚupdateÚjoinÚsortedÚkeysr   ÚhashlibÚmd5ÚencodeÚ	hexdigestr$   Údumps)r   ÚdataZ	param_strZfull_strr   rB   r   Ú_build_payload=   s&    
ô 
 zSpider._build_payload)ÚpathÚpayload_dictc                 C   sª   | j s
d S | j  d¡| }zt|  |¡}| j||| jddd}|jdkrLW d S | ¡ }t|tƒrx| 	d¡dkrx| 	d¡W S d|krŠ| 	d¡n|W S  t
k
r¤   Y d S X d S )	Nú/Fé   )rP   r   r    ÚtimeoutéÈ   Úcode)r   rW   Ú0rP   )r   ÚrstriprQ   Úpostr   Ústatus_coder$   r"   Údictr'   r-   )r   rR   rS   r7   ÚbodyÚrspÚobjr   r   r   Ú	_post_apiS   s     

  zSpider._post_apic                 C   sP   |   di ¡}g }t|tƒrH| dg ¡D ] }| t|d ƒ|d dœ¡ q&d|iS )Nz/v2/api/home/headerZ
channeListZ	channelIdZchannelName)Útype_idÚ	type_nameÚclass©ra   r"   r]   r'   Úappendr#   )r   ÚfilterrP   Úclassesr2   r   r   r   r.   a   s    
zSpider.homeContentc                 C   s€   |   di ¡}g }t|tƒrx| dg ¡D ]P}| dg ¡D ]>}| t|d ƒ|d |d | d¡pld| d	¡› d
œ¡ q6q&d|iS )Nz/v2/api/home/bodyZvodTopicListÚvodListÚvodIdÚvodNameÚcoverImgÚremarkõ	   è¯„åˆ†ï¼šÚscore©Úvod_idÚvod_nameÚvod_picÚvod_remarksÚlistre   )r   rP   ÚvideosÚtopicÚvr   r   r   ÚhomeVideoContenti   s    

üzSpider.homeVideoContentc              
   C   s6  t |ƒ}t|ƒ d¡r<| dd¡d }|  dd|i¡}d}n^| jd  t|ƒd¡}	|dkrh|	shg |dœS |  d	d
|dkr||	nddt|ƒ d ddœ¡}d}g }
t|tƒr,| d¡dkrÄ| dd¡nd| jd t|ƒ< | || dg ¡¡D ]@}|
 	t|d ƒ|d |d | d¡p"d| d¡› dœ¡ qê|
|dœS )Nzactor@é   z/v1/api/vodWorker/detailÚvodWorkerIdri   r   r   )ru   Úpagez/v1/api/search/queryNowé   z'[{"filerName":"channelId","filerValue":z}])Z	nextCountr   ZqueryValueJsonZsortTypeÚitemsÚhasNextr   rj   rk   rl   rm   rn   ro   rp   )
Úintr#   r,   r(   ra   r   r'   r"   r]   rf   )r   ÚtidÚpgrg   r/   r|   Z	worker_idrP   Zpath_keyZ	cache_valrv   r2   r   r   r   ÚcategoryContentw   s4     
ü,
ü
zSpider.categoryContentc           	      C   sâ   |d }|   dd|i¡}|s$dg iS g g  }}| dg ¡D ]8}| |d ¡ dd„ | d	g ¡D ƒ}| d
 |¡¡ q:t|d ƒ|d |d | d¡| d¡|  | dg ¡¡|  | dg ¡¡| d¡d |¡d |¡dœ
}d|giS )Nr   z/v2/api/vodInfo/indexrj   ru   Z
playerListZ
playerNamec                 S   s"   g | ]}|d  › d|d › ‘qS )ZepNameú$ÚepIdr   )r@   Úepr   r   r   Ú
<listcomp>ž   s     z(Spider.detailContent.<locals>.<listcomp>ZepListú#rk   rl   ÚyearZareaNameZ	actorListZdirectorListÚintroz$$$)
rq   rr   rs   Úvod_yearÚvod_areaÚ	vod_actorÚvod_directorÚvod_contentÚvod_play_fromÚvod_play_url)ra   r'   rf   rH   r#   Ú_format_actor)	r   ÚidsÚvidrP   Ú	play_fromÚ	play_urlsrC   ÚurlsÚvodr   r   r   ÚdetailContent–   s*     

özSpider.detailContentr=   c              	   C   sx   t |ƒdkrdg iS |  d|ddœ¡}g }t|tƒrp| dg ¡D ].}| t|d ƒ|d |d	 | d
¡dœ¡ q@d|iS )Nrz   ru   z/v1/api/search/searchr   )Úkeywordr   r~   rj   rk   rl   rm   rp   )r€   ra   r"   r]   r'   rf   r#   )r   r   Úquickr‚   rP   rv   r2   r   r   r   ÚsearchContent¯   s     

ü
zSpider.searchContentc                 C   sž   |   dd|i¡}g }t|tƒrŽ|D ]j}| d¡}| d¡}|r"|r"|   d||dœ¡}	t|	tƒrh|	 d¡nd }
|
r"t|
ƒ d¡r"| ||
g¡ q"d	|d
didœS )Nz/v2/api/vodInfo/epDetailZvodEpIdZshowNameÚvodResolutionz/v2/api/vodInfo/playUrl)r…   r   ÚplayUrlr!   r   r	   Z	ExoPlayer)Úparser7   Úheader)ra   r"   ru   r'   r]   r#   r,   r/   )r   ÚflagÚidÚvipFlagsZep_datar—   r3   ÚnameÚvalZp_dataZp_urlr   r   r   ÚplayerContent½   s    


zSpider.playerContentc              
   C   sl   g }|D ]X}t |tƒr| d¡r|d }| d¡rV| d|d › d|› d|› d¡ q| |¡ qd |¡S )NZvodWorkerNamer{   z[a=cr:{"id":"actor@z
","name":"z"}/]z[/a]z, )r"   r]   r'   rf   rH   )r   rP   Úoutr2   r¤   r   r   r   r’   Í   s    
$zSpider._format_actorc                 C   s   d S r:   r   )r   Úparamr   r   r   Ú
localProxyØ   r   zSpider.localProxy)r   )N)r=   )Ú__name__Ú
__module__Ú__qualname__r   r   r5   r8   r9   r;   rQ   r#   r]   ra   r.   ry   rƒ   r™   rœ   r¦   r’   r©   Ú__classcell__r   r   r   r   r      s    


r   )Úsysr$   ÚtimerF   rK   Úurllib3r)   Úbase.spiderr   Údisable_warningsÚ
exceptionsÚInsecureRequestWarningrR   rf   r   r   r   r   Ú<module>   s   8