o
    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	de
def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   ó   dS )NZAppYqkr   r   r   r   r   ÚgetName   ó    zSpider.getNamer   c                 C   s.  zˆt |tƒrt | ¡ ¡n|}| dd¡| _| dd¡| _| dd¡| _| dd¡| _	| dd¡| _
| dd¡| _| dd¡| _| d	d¡}| d
¡}|D ]9}t d|¡rZ|| _ n-z'| j|| jdd ¡ }|D ]}t |tƒry| d¡ry|| _ nqh| jr€W  nW qM   Y qMW n	 ty‘   Y nw |  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   s6   
€
€
zSpider.initc                 C   r   ©NFr   )r   Úurlr   r   r   ÚisVideoFormat9   r   zSpider.isVideoFormatc                 C   r   r7   r   r   r   r   r   ÚmanualVideoCheck:   r   zSpider.manualVideoCheckc                 C   ó   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$   ÚuuidÚuuid4r   r   r   r   ÚupdateÚjoinÚsortedÚkeysr   ÚhashlibÚmd5ÚencodeÚ	hexdigestr%   Údumps)r   ÚdataZ	param_strZfull_strr   rD   r   Ú_build_payload=   s$   
ô 
zSpider._build_payloadÚpathÚpayload_dictc                 C   s¦   | j sd S | j  d¡| }z;|  |¡}| j||| jddd}|jdkr&W d S | ¡ }t|tƒr<| 	d¡dv r<| 	d¡W S d|v rF| 	d¡W S |W S  t
yR   Y d S w )	Nú/Fé   )rS   r   r!   ÚtimeoutéÈ   Úcode)r   rZ   Ú0rS   )r   ÚrstriprT   Úpostr   Ústatus_coder%   r#   Údictr(   r.   )r   rU   rV   r8   ÚbodyÚrspÚobjr   r   r   Ú	_post_apiS   s   

zSpider._post_apic                 C   sP   |   di ¡}g }t|tƒr$| dg ¡D ]}| t|d ƒ|d dœ¡ qd|iS )Nz/v2/api/home/headerZ
channeListZ	channelIdZchannelName)Útype_idÚ	type_nameÚclass©rd   r#   r`   r(   Úappendr$   )r   ÚfilterrS   Úclassesr3   r   r   r   r/   a   s   
zSpider.homeContentc                 C   s€   |   di ¡}g }t|tƒr<| dg ¡D ](}| dg ¡D ]}| t|d ƒ|d |d | d¡p6d| d	¡› d
œ¡ qqd|iS )Nz/v2/api/home/bodyZvodTopicListÚvodListÚvodIdÚvodNameÚcoverImgÚremarkõ	   è¯„åˆ†ï¼šÚscore©Úvod_idÚvod_nameÚvod_picÚvod_remarksÚlistrh   )r   rS   ÚvideosZtopicÚvr   r   r   ÚhomeVideoContenti   s   


üÿzSpider.homeVideoContentc              
   C   s2  t |ƒ}t|ƒ d¡r| dd¡d }|  dd|i¡}d}n/| jd  t|ƒd¡}	|dkr4|	s4g |dœS |  d	d
|dkr>|	nddt|ƒ d ddœ¡}d}g }
t|tƒr”| d¡dkra| dd¡nd| jd t|ƒ< | || dg ¡¡D ]}|
 	t|d ƒ|d |d | d¡pd| d¡› dœ¡ qt|
|dœS )Nzactor@é   z/v1/api/vodWorker/detailÚvodWorkerIdrl   r   r   )rx   Úpagez/v1/api/search/queryNowé   z'[{"filerName":"channelId","filerValue":z}])Z	nextCountr   ZqueryValueJsonZsortTypeÚitemsÚhasNextr   rm   rn   ro   rp   rq   rr   rs   )
Úintr$   r-   r)   rd   r   r(   r#   r`   ri   )r   ÚtidÚpgrj   r0   r~   Z	worker_idrS   Zpath_keyZ	cache_valry   r3   r   r   r   ÚcategoryContentw   s2   ü
,

ü
zSpider.categoryContentc           	      C   sâ   |d }|   dd|i¡}|sdg iS g g }}| dg ¡D ]}| |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/indexrm   rx   Z
playerListZ
playerNamec                 S   s"   g | ]}|d  › d|d › ‘qS )ZepNameú$ÚepIdr   )rB   Úepr   r   r   Ú
<listcomp>ž   s   " z(Spider.detailContent.<locals>.<listcomp>ZepListú#rn   ro   ÚyearZareaNameZ	actorListZdirectorListZintroz$$$)
rt   ru   rv   Úvod_yearÚvod_areaÚ	vod_actorÚvod_directorÚvod_contentÚvod_play_fromÚvod_play_url)rd   r(   ri   rK   r$   Ú_format_actor)	r   ÚidsÚvidrS   Ú	play_fromÚ	play_urlsrE   Ú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ƒr8| dg ¡D ]}| t|d ƒ|d |d	 | d
¡dœ¡ q d|iS )Nr|   rx   z/v1/api/search/searchr   )Úkeywordr   r€   rm   rn   ro   rp   rs   )r‚   rd   r#   r`   r(   ri   r$   )r   r   Úquickr„   rS   ry   r3   r   r   r   ÚsearchContent¯   s   


üzSpider.searchContentc                 C   sž   |   dd|i¡}g }t|tƒrG|D ]5}| d¡}| d¡}|rF|rF|   d||dœ¡}	t|	tƒr4|	 d¡nd }
|
rFt|
ƒ d¡rF| ||
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)Úparser8   Úheader)rd   r#   rx   r(   r`   r$   r-   r0   )r   ÚflagÚidÚvipFlagsZep_datar˜   r4   ÚnameÚvalZp_dataZp_urlr   r   r   ÚplayerContent½   s   


€zSpider.playerContentc              
   C   sl   g }|D ],}t |tƒr0| d¡r0|d }| d¡r+| 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(   ri   rK   )r   rS   Úoutr3   r¥   r   r   r   r“   Í   s   
$
€
zSpider._format_actorc                 C   r;   r<   r   )r   Úparamr   r   r   Ú
localProxyØ   r   zSpider.localProxy)r   r<   )r?   )Ú__name__Ú
__module__Ú__qualname__r   r   r6   r9   r:   r=   rT   r$   r`   rd   r/   r{   r…   rš   r   r§   r“   rª   Ú__classcell__r   r   r   r   r      s"    


r   )Úsysr%   ÚtimerH   rN   Úurllib3r*   Úbase.spiderr   Údisable_warningsÚ
exceptionsÚInsecureRequestWarningrU   ri   r   r   r   r   Ú<module>   s
   8