U
    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d7ddZdd Zdd Zdd	 Zd
d ZdddddgZdZ	dd Z
dd Zdd Zdd Zd8ddZdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd9d+d,Zd-d. Zd/d0 Zd1d2 Zeeed3d4d5Zd6S ):r    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   actionr   r   r   r      s    zSpider.actionc                 C   s   d S r	   r   r   r   r   r   destroy!   s    zSpider.destroyZ
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 qr||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dataclassifyTitle
classifyIdclass)fetchr   r   jsonaesappend)r   filterr0   data1resultclasseskr   r   r   homeContent(   sn    "
zSpider.homeContentc                 C   s   d S r	   r   r   r   r   r   homeVideoContentN   s    zSpider.homeVideoContentc                 C   sJ  d| d| d| dd }d|k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|kr|d }|	||
 d|  d|
 dd   | 	|
 ddddd q|	|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   r0   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   pathr0   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 kr|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`   r0   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 ]p}	|	d d|	d	 d|	d
 }
||
|	d|  d|	dd   | 	|	ddddd qT||d< ||d< d|d< d|d< d|d< |S )Nz%/api/search/keyWord?pageSize=20&page=z&searchWord=z&searchType=1r   r   	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`   r0   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   s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   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  <   re   r   :Z666)r|   r{   zfill)r   secondshoursremaining_secondsminutesformatted_minutesformatted_seconds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}zr| d}| 	 \}}| j
d	| j||d
}| jdddd}| j|||d}	|	  |	 d }
|
d |
d |fW S  tk
 r } z| |d | W Y S d }~X Y nX d S )Nr   zhttps://   r   )r<   .z.workz/api/user/travelerzapplication/json)r   Acceptr   r   r   Uz##X-4m6Goo4zzPi1hF##Ztt09)deviceIdttcodechCode)r5   r   r0   r   	imgDomainrd   )lenhsjoinrandomchoicesstringascii_lowercasedigitsrandintr   r   r   postraise_for_statusr5   	Exceptionr   )r   imax_attemptscurrent_domainr   r   r   r   r0   responser9   er   r   r   r      s.    8
zSpider.gettokenc                 C   s8   |  d}|s4ttt }| |}| d| |S )Nr   )getCacher{   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   ry   r   r   r0   Zbdatar   r   r   rx      s
    
zSpider.imgs)r0   lengthr%   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 )Nre      r   r0   )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   r   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   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   r0   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   rr   rw   rz   r   r   r6   r]   r   r
   r~   rx   r   r|   r{   r   r   r   r   r   r      s.   
&

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   