o
    f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 d dlmZ ejd d dlmZ G d	d
 d
eZdS )    N)	b64decode)quote)AES)MD5)unpadz..)Spiderc                   @   s   e Zd Zd5ddZdd Zdd Zdd	 Zd
d Zg dZdZ	dd Z
dd Zdd Zdd Zd6ddZdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd7d'd(Zd)d* Zd+d, Zd-d. Zd/ed0ed1efd2d3Zd4S )8r    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   actionr   r   r   r      r   zSpider.actionc                 C   r   r	   r   r   r   r   r   destroy!   r   zSpider.destroy)Z
wcyfhknomgZ
pdcqllfomwZ
alxhzjveanZ
bqeaaxzpltZ
hfbtpixjsozMozilla/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/twitter/ver=1.4.4c                 C   s  | j | j d|  d d }| |}dddddd	d
dd	ddd	gdgddddd	d
dd	ddd	gdgddddd	d
dd	ddd	gdgddddd	d
dd	ddd	gdgddddd	d
dd	ddd	gdgddddd	d
dd	ddd	gdgddddd	d
dd	ddd	gdgddddd	ddd	ddd	ddd	gdgdi}dddg}|d D ]}||d |d d q||d< |S )Nz/api/video/classifyListheadersencDatafiltersflu   分类u   最近更新1)nvu   最多播放2u	   好评榜3)keynamevaluetypeu   精选u   日榜u   周榜u   月榜u   总榜4)r"   r%   r&   r+   567jxr/   )	type_nametype_iddataZclassifyTitleZ
classifyIdclass)fetchr   r   jsonaesappend)r   filterr2   data1resultclasseskr   r   r   homeContent(   sn   "
zSpider.homeContentc                 C   r   r	   r   r   r   r   r   homeVideoContentN   r   zSpider.homeVideoContentc                 C   sJ  d| d| d| dd }d|v rd| d|dd	 }|d
kr/d| d| dd }| j| j | |  d d }| |d }i }g }	|D ]@}
|
 d d|
 d d|
 d }d|v rk|d }|	||
 d|  d|
 dd   | 	|
 ddddd qN|	|d< ||d< d |d!< d"|d#< d$|d%< |S )&Nz3/api/video/queryVideoByClassifyId?pageSize=20&page=z&classifyId=z
&sortType=r!   r"   clickz3/api/video/queryPersonVideoByType?pageSize=20&page=z&userId=r   r/   z*/api/video/getRankVideos?pageSize=20&page=z&type=r*   r   r   r2   videoId?userIdnickNametitle&url=coverImgr   playTimerectHzG?r*   ratiovod_idvod_namevod_picvod_remarksstylelistpage'  	pagecountZ   limit?B total)
getreplacer4   r   r   r5   r6   r7   getProxyUrldtim)r   tidpgr8   r   pathr2   r9   r:   videosr<   idr   r   r   categoryContentQ   s,   $&(
zSpider.categoryContentc           	      C   s   |d  ddd}d|d  }| j| j | |  d d }| |d }d	t|d
 d |d d d |d  d }d|d v rM|d }|d|d d | d}d|gi}|S )Nr   r?   r   rA   z/api/video/can/watch?videoId=r   r   ZplayPathz[a=cr:      )rb   r(   z/]z[/a]u   推特$)vod_directorvod_play_fromvod_play_urlrR   )r[   splitr4   r   r   r5   r6   dumps)	r   idsvidr`   r2   r9   Zcljvodr:   r   r   r   detailContenth   s   $0
zSpider.detailContentr"   c                 C   s   d| dt | d}| j| j | |  d d }| |d }i }g }|D ]8}	|	d 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/search/keyWord?pageSize=20&page=z&searchWord=z&searchType=1r   r   Z	videoListr@   rA   rB   rC   rD   rE   rF   r   rG   rH   rI   rJ   rL   rR   rS   rT   rU   rV   rW   rX   rY   )
r   r4   r   r   r5   r6   rZ   r7   r\   r]   )r   r'   quickr_   r`   r2   r9   r:   ra   r<   rb   r   r   r   searchContentt   s    $&(
zSpider.searchContentc                 C   s   d||   dS )Nr   )parser   headerr   )r   flagrb   vipFlagsr   r   r   playerContent   s   zSpider.playerContentc                 C   s
   |  |S r	   )imgs)r   paramr   r   r   
localProxy   s   
zSpider.localProxyc                 C   s&   t tt d }| |}||fS )Ni  )strinttimemd5)r   tsignr   r   r   getsign   s   
zSpider.getsignc                 C   s"   |   \}}| j| j||| jdS )N)
User-Agentdeviceidr~   sZaut)r   uar   r   )r   r   r~   r   r   r   r      s   zSpider.headersc                 C   sB   t d}|}t|tj|}t|t |tj}t|	dS )NzSmhiR2NpT2lKSVV6STFOaQ==utf-8)
r   r   newMODE_CBCr   decrypt
block_sizer5   loadsdecode)r   wordr'   ivcipher	decryptedr   r   r   r6      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  <   re   r   :Z666)r{   rz   zfill)r   secondshoursZremaining_secondsminutesZformatted_minutesZformatted_secondsZformatted_hoursr   r   r   r]      s   zSpider.dtimr   
   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}z9| d}| 	 \}}| j
d	| j||d
}| jdddd}| j|||d}	|	  |	 d }
|
d |
d |fW S  ty| } z| |d |W  Y d }~S d }~ww )Nr   zhttps://   r   )r<   .z.workz/api/user/travelerzapplication/json)r   Acceptr   r~   r   Uz##X-4m6Goo4zzPi1hF##Ztt09)ZdeviceIdttcodeZchCode)r5   r   r2   r   Z	imgDomainrd   )lenhsjoinrandomchoicesstringascii_lowercasedigitsrandintr   r   r   postraise_for_statusr5   	Exceptionr   )r   iZmax_attemptsZcurrent_domainr   r   r~   r   r2   responser9   er   r   r   r      s2   8
zSpider.gettokenc                 C   s8   |  d}|sttt }| |}| d| |S )Nr   )getCacherz   r{   r|   r}   setCache)r   r   r~   r   r   r   r
      s   

zSpider.getdidc                 C   s    t  }||d | S )Nr   )r   r   updateencode	hexdigest)r   texthr   r   r   r}      s   z
Spider.md5c                 C   sL   d| j i}|d }| j| j | |d}| |jdd}d|jd|gS )Nr   r   r   d   z2020-zq3-888   zContent-Type)r   r4   r   imgcontentr   rZ   )r   rx   r   r   r2   Zbdatar   r   r   rw      s
   
zSpider.imgsr2   lengthr'   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 )Nre      r   r2   )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   rd      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   r2   r   r'   r   r   r   	key_bytesr:   r   r   )r   r   r   r   r      s"   
z
Spider.imgN)r   )r"   )r   r   )__name__
__module____qualname__r   r   r   r   r   r   r   r=   r>   rc   ro   rq   rv   ry   r   r   r6   r]   r   r
   r}   rw   r   r{   rz   r   r   r   r   r   r      s0    
&

r   )r5   r   r   sysr|   base64r   urllib.parser   Crypto.Cipherr   Crypto.Hashr   Crypto.Util.Paddingr   r`   r7   base.spiderr   r   r   r   r   <module>   s   