U
    h                     @   s   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 d dlmZ d dl	m
Z
 d dlmZ ejd d dlmZ G dd	 d	eZdS )
    N)	b64decode)AES)MD5)unpadz..)Spiderc                   @   s   e Zd Zd3ddZdd Zdd Zdd	 Zd
dddgZdd Zdd Z	dd Z
dd Zd4ddZdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd5d)d*Zd+d, Zd-d. Zeeed/d0d1Zd2S )6r    c                 C   s"   |   | _|  \| _| _| _d S N)getdiddidgettokentokenphosthost)selfextend r   )   /storage/emulated/0/lz/py/sy/小红薯.pyinit   s    
zSpider.initc                 C   s   d S r   r   )r   urlr   r   r   isVideoFormat   s    zSpider.isVideoFormatc                 C   s   d S r   r   r   r   r   r   manualVideoCheck   s    zSpider.manualVideoCheckc                 C   s   d S r   r   r   r   r   r   destroy   s    zSpider.destroyZ
fhoumpjjihZ
dyfcbkggxnZ
rggwiyhqtgZ
bpbbmplfxcc                 C   sf   | j | j d|  d d }| |}i }g }|d D ]}||d |d d q<||d< |S )	Nz#/api/video/queryClassifyList?mark=4headersencDatadataZclassifyTitleZ
classifyId)	type_nametype_idclass)fetchr   r   jsonaesappend)r   filterr   data1resultclasseskr   r   r   homeContent"   s    "
zSpider.homeContentc                 C   s   d S r   r   r   r   r   r   homeVideoContent,   s    zSpider.homeVideoContentc                 C   s   d| d| d}i }g }| j | j | |  d d }| |}	|	d D ]F}
||
d |
d|  d	 |
d
  | |
ddddd qP||d< ||d< d|d< d|d< d|d< |S )Nz+/api/short/video/getShortVideos?classifyId=z&videoMark=4&page=z&pageSize=20r   r   r   ZvideoIdtitlez&url=ZcoverImgZplayTimerectgHzG?)typeratio)vod_idvod_namevod_picvod_remarksstylelistpagei'  	pagecountZ   limiti?B total)	r    r   r   r!   r"   r#   getgetProxyUrldtim)r   tidpgr$   r   pathr&   videosr   Zvdatar(   r   r   r   categoryContent/   s     $
$ 
zSpider.categoryContentc                 C   s   d|d  }| j | j | |  d d }| |}|d  d|d  d|d	  }|d d
|dg |dp~d|d}d|gi}|S )Nz /api/video/getVideoById?videoId=r   r   r   r+   z
$auth_key=ZauthKeyz&path=ZvideoUrlr   Z	tagTitlesZnickNameu   小红书官方)r0   r   vod_play_fromvod_play_urlr4   )r    r   r   r!   r"   joinr:   )r   idsr?   r   vdvodr&   r   r   r   detailContent?   s    $
 *
zSpider.detailContent1c                 C   s   d S r   r   )r   keyquickr>   r   r   r   searchContentH   s    zSpider.searchContentc                 C   s8   |   }|d|d< |d= d| j d| |d}|S )NautAuthorizationdeviceidr   z/api/m3u8/decode/authPath?)parser   header)r   popr   )r   flagidvipFlagshr&   r   r   r   playerContentK   s
    zSpider.playerContentc                 C   s
   |  |S r   )action)r   paramr   r   r   
localProxyR   s    zSpider.localProxyc                 C   s    t  }||d | S )Nutf-8)r   newupdateencode	hexdigest)r   textrW   r   r   r   md5U   s    z
Spider.md5c                 C   sB   t d}|}t|tj|}t|t |tj}t|	dS )NzSmhiR2NpT2lKSVV6STFOaQ==r\   )
r   r   r]   MODE_CBCr   decrypt
block_sizer!   loadsdecode)r   wordrK   ivcipher	decryptedr   r   r   r"   Z   s
    z
Spider.aesc                 C   s   zt |}|d }|d }|d }|d }t|d}t|d}|dkrrt|d}| d| d| W S | d| W S W n   Y dS X d S )Ni  <      r   :r   )intstrzfill)r   secondshoursZremaining_secondsminutesZformatted_minutesZformatted_secondsZformatted_hoursr   r   r   r<   a   s    zSpider.dtimc                 C   s8   |  d}|s4ttt }| |}| d| |S )Nr
   )getCacherp   ro   timerb   setCache)r   r
   tr   r   r   r	   t   s    

zSpider.getdidc                 C   s*   t tt d }| |dd |fS )Ni        )rp   ro   rv   rb   )r   rx   r   r   r   getsign|   s    zSpider.getsignr   
   c              	   C   s   |t | jks||krdS ddtjtjtj tddd d| j|  d}zn| 	 \}}| d}d	| j
||d
}| j
dddd}| j|||d}	|	  |	 d }
|
d |
d |fW S    | |d | Y S X d S )Nr   zhttps://   r|   )r(   .z.workz/api/user/travelerMozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;SuiRui/xhs/ver=1.2.6)
User-AgentrP   rx   sUZdafe13)ZdeviceIdttcodeZchCode)r!   r   r   r   Z	imgDomain   )lenhsrD   randomchoicesstringascii_lowercasedigitsrandintr{   r
   postraise_for_statusr!   r   )r   iZmax_attemptsZcurrent_domainsignrx   r   r   r   r%   Zdata2r   r   r   r      s$    8
  zSpider.gettokenc                 C   s$   |   \}}d| j||| jd}|S )Nr   )r   rP   rx   r   rN   )r{   r
   r   )r   r   rx   Zhendar   r   r   r      s       zSpider.headersc                 C   sT   ddi}| j | j |d  |d}|jddd }| |jdd	}d
||gS )Nr   zDDalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)r   r   zContent-Type;r   d   z2020-zq3-888   )r    r   r   r:   splitimgcontent)r   rZ   r   r   r-   Zbase64_datar   r   r   rY      s     zSpider.action)r   lengthrK   c           
         s   d dd fdd}fdd}fdd	}||r<|S ||rH|S ||rT|S | d
}t|}t|D ] }	||	  ||	t|  N  < qnt|S d S )Ns   GIFs   s   PNG

c                    s   t | dko| d d  kS )Nrm   ry   r   r   )GIFr   r   is_dont_need_decode_for_gif   s    z/Spider.img.<locals>.is_dont_need_decode_for_gifc                    s   t | dko| d d  kS )N   ry   r   r   )JPGr   r   is_dont_need_decode_for_jpg   s    z/Spider.img.<locals>.is_dont_need_decode_for_jpgc                    s$   t | dko"| dd  dd kS )Nr   r   rz   r   r   )PNGr   r   is_dont_need_decode_for_png   s    z/Spider.img.<locals>.is_dont_need_decode_for_pngr\   )r_   	bytearrayranger   bytes)
r   r   r   rK   r   r   r   Z	key_bytesr&   r   r   )r   r   r   r   r      s"    
z
Spider.imgN)r   )rJ   )r   r|   )__name__
__module____qualname__r   r   r   r   r   r)   r*   rA   rI   rM   rX   r[   rb   r"   r<   r	   r{   r   r   rY   r   ro   rp   r   r   r   r   r   r      s*   

	

r   )r!   r   r   sysrv   base64r   Crypto.Cipherr   Crypto.Hashr   Crypto.Util.Paddingr   r?   r#   base.spiderr   r   r   r   r   <module>   s   