o
    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d2ddZdd Zdd Zdd	 Zg d
Zdd Zdd Z	dd Z
dd Zd3ddZdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd4d&d'Zd(d) Zd*d+ Zd,ed-ed.efd/d0Zd1S )5r    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      d S r   r   )r   urlr   r   r   isVideoFormat      zSpider.isVideoFormatc                 C   r   r   r   r   r   r   r   manualVideoCheck   r   zSpider.manualVideoCheckc                 C   r   r   r   r   r   r   r   destroy   r   zSpider.destroy)Z
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dataclassifyTitle
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   r   r   r   r   r   r   r   homeVideoContent,   r   zSpider.homeVideoContentc                 C   s   d| d| d}i }g }| j | j | |  d d }| |}	|	d D ]#}
||
d |
d|  d	 |
d
  | |
ddddd q(||d< ||d< d|d< d|d< d|d< |S )Nz+/api/short/video/getShortVideos?classifyId=z&videoMark=4&page=z&pageSize=20r   r   r   videoIdtitlez&url=coverImg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   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   r0   z
$auth_key=ZauthKeyz&path=ZvideoUrlr   Z	tagTitlesnickNameu   小红书官方)r7   r!   vod_play_fromvod_play_urlr;   )r$   r   r   r%   r&   joinrA   )r   idsrF   r   vdvodr*   r   r   r   detailContent?   s   $
 *
zSpider.detailContent1c                 C   r   r   r   )r   keyquickrE   r   r   r   searchContentH   r   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   textr`   r   r   r   md5U   s   z
Spider.md5c                 C   sB   t d}|}t|tj|}t|t |tj}t|	dS )NzSmhiR2NpT2lKSVV6STFOaQ==re   )
r   r   rf   MODE_CBCr   decrypt
block_sizer%   loadsdecode)r   wordrT   ivcipher	decryptedr   r   r   r&   Z   s
   z
Spider.aesc                 C   s   z@t |}|d }|d }|d }|d }t|d}t|d}|dkr9t|d}| d| d| W S | d| W S    Y dS )Ni  <      r   :r   )intstrzfill)r   secondshoursremaining_secondsminutesformatted_minutesformatted_secondsformatted_hoursr   r   r   rC   a   s   zSpider.dtimc                 C   s8   |  d}|sttt }| |}| d| |S )Nr
   )getCachery   rx   timerk   setCache)r   r
   tr   r   r   r	   t   s   

zSpider.getdidc                 C   s*   t tt d }| |dd |fS )Ni        )ry   rx   r   rk   )r   r   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}z7| 	 \}}| d}d	| j
||d
}| j
dddd}| j|||d}	|	  |	 d }
|
d |
d |fW S    | |d | Y 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-AgentrY   r   sUZdafe13)deviceIdttcodechCode)r%   r   r   r   	imgDomain   )lenhsrM   randomchoicesstringascii_lowercasedigitsrandintr   r
   postraise_for_statusr%   r   )r   imax_attemptscurrent_domainsignr   r   r   r   r)   Zdata2r   r   r   r      s    8
zSpider.gettokenc                 C   s$   |   \}}d| j||| jd}|S )Nr   )r   rY   r   r   rW   )r   r
   r   )r   r   r   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   rA   splitimgcontent)r   rc   r   r   r4   Zbase64_datar   r   r   rb      s   
zSpider.actionr   lengthrT   c           
         s   d dd fdd}fdd}fdd	}||r|S ||r$|S ||r*|S | d
}t|}t|D ]}	||	  ||	t|  N  < q7t|S )Ns   GIFs   s   PNG

c                       t | dko| d d  kS )Nrv   r   r   r   )GIFr   r   is_dont_need_decode_for_gif      z/Spider.img.<locals>.is_dont_need_decode_for_gifc                    r   )N   r   r   r   )JPGr   r   is_dont_need_decode_for_jpg   r   z/Spider.img.<locals>.is_dont_need_decode_for_jpgc                    s$   t | dko| dd  dd kS )Nr   r   r   r   r   )PNGr   r   is_dont_need_decode_for_png   s   $z/Spider.img.<locals>.is_dont_need_decode_for_pngre   )rh   	bytearrayranger   bytes)
r   r   r   rT   r   r   r   	key_bytesr*   r   r   )r   r   r   r   r      s"   
z
Spider.imgN)r   )rS   )r   r   )__name__
__module____qualname__r   r   r   r   r   r-   r.   rI   rR   rV   ra   rd   rk   r&   rC   r	   r   r   r   rb   r   rx   ry   r   r   r   r   r   r      s,    


	
r   )r%   r   r   sysr   base64r   Crypto.Cipherr   Crypto.Hashr   Crypto.Util.Paddingr   rF   r'   base.spiderr   r   r   r   r   <module>   s   