
    fh+                         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                  j!                  d       d dlmZ  G d	 d
e      Zy)    N)	b64decode)quote)AES)MD5)unpadz..)Spiderc                       e Zd ZddZd Zd Zd Zd Zg dZdZ	d Z
d	 Zd
 Zd ZddZd Zd Zd Zd Zd Zd ZddZd Zd Zd ZdededefdZy)r   c                 t    | j                         | _        | j                         \  | _        | _        | _        y N)getdiddidgettokentokenphosthost)selfextends     &   /storage/emulated/0/lz/py/sy/推特.pyinitzSpider.init   s*    ;;=*.--/'
4:di    c                      y r    )r   urls     r   isVideoFormatzSpider.isVideoFormat       r   c                      y r   r   r   s    r   manualVideoCheckzSpider.manualVideoCheck   r   r   c                      y r   r   )r   actions     r   r    zSpider.action   r   r   c                      y r   r   r   s    r   destroyzSpider.destroy!   r   r   )
wcyfhknomg
pdcqllfomw
alxhzjvean
bqeaaxzplt
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                 6   | j                  | j                   d| j                               j                         d   }| j	                  |      }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 ]  }|j                  |d   |d   d        ||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.   r1   r2   r7   567jxr;   )	type_nametype_iddataclassifyTitle
classifyIdclass)fetchr   r*   jsonaesappend)r   filterr>   data1resultclassesks          r   homeContentzSpider.homeContent(   sB   zzTYYK'>?zX]]_`ijD(5C#/NVdknPo5@s/K/M%N $O^blt^lsvXw^lsvXw^ipsXt^vWw Vx
 -1(5C#/NVdknPo5@s/K/M%N $O^blt^lsvXw^lsvXw^ipsXt^vWw Vx
 -1(5C#/NVdknPo5@s/K/M%N $O^blt^lsvXw^lsvXw^ipsXt^vWw Vx
 -1(5C#/NVdknPo5@s/K/M%N $O_eowemtw_xemtw_xemtw_xemeh`j_kXl Wm/n o: "*d;<vANN?);,XY !wr   c                      y r   r   r   s    r   homeVideoContentzSpider.homeVideoContentN   r   r   c                    d| d| d|j                  dd       }d|v rd| d|j                  dd	       }|d
k(  rd| d|j                  dd       }| j                  | j                   | | j	                               j                         d   }| j                  |      d   }i }g }	|D ]  }
|
j                  d       d|
j                  d       d|
j                  d       }d|v r|dz   }|	j                  ||
j                  d      | j                         d|
j                  d      d    z   | j                  |
j                  d            dddd        |	|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;   z*/api/video/getRankVideos?pageSize=20&page=z&type=r6   r)   r+   r>   videoId?userIdnickNametitle&url=coverImgr   playTimerectHzG?r6   ratiovod_idvod_namevod_picvod_remarksstylelistpage'  	pagecountZ   limit?B total)
getreplacerB   r   r*   rC   rD   rE   getProxyUrldtim)r   tidpgrF   r   pathr>   rG   rH   videosrJ   ids               r   categoryContentzSpider.categoryContentQ   s   DRDUXTYYcdjdndnosuxdycz{c>HHUXU`U`ahjlUmTnoD$;?t6&**U[]`JaIbcDzzTYYKv.zGLLNyYv&AEE)$%QquuX&7qz9J8KLB#~'\MMRQUU7^PTP`P`Pbglmnmrmrs}m~  @A  nB  mC  fD  QD*.))AEE*4E*FY_jnPoq r	   vv"{w wr   c                    |d   j                  dd      j                  d      }d|d    }| j                  | j                   | | j	                               j                         d   }| j                  |      d   }d	t        j                  |d
   dz   |d   d      z   dz   |d   z   dz   }d|d   v r|d   }|d|d   dz   |z   d}d|gi}|S )Nr   rO   rP   rR   z/api/video/can/watch?videoId=r)   r+   playPathz[a=cr:      )rs   r4   z/]z[/a]u   推特$)vod_directorvod_play_fromvod_play_urlrc   )rl   splitrB   r   r*   rC   rD   dumps)	r   idsvidrq   r>   rG   cljvodrH   s	            r   detailContentzSpider.detailContenth   s    !fnnWb)//4.s1vh7zzTYYKv.zGLLNyYz*3q6G+;SV$LMMPTTWZ[\W]]`ffc!fa&C"XsSTvX[|^cOcd3%r   c                 b   d| dt        |       d}| j                  | j                   | | j                               j	                         d   }| j                  |      d   }i }g }|D ]  }	|	j                  d       d|	j                  d	       d|	j                  d
       }
|j                  |
|	j                  d      | j                         d|	j                  d      d    z   | j                  |	j                  d            dddd        ||d<   ||d<   d|d<   d|d<   d|d<   |S )Nz%/api/search/keyWord?pageSize=20&page=z&searchWord=z&searchType=1r)   r+   	videoListrQ   rR   rS   rT   rU   rV   rW   r   rX   rY   rZ   r[   r]   rc   rd   re   rf   rg   rh   ri   rj   )
r   rB   r   r*   rC   rD   rk   rE   rm   rn   )r   r3   quickrp   rq   r>   rG   rH   rr   rJ   rs   s              r   searchContentzSpider.searchContentt   sZ   6rd,uSzlR_`zzTYYKv.zGLLNyY{+AEE)$%QquuX&7qz9J8KLBMMRQUU7^PTP`P`Pbglmnmrmrs}m~  @A  nB  mC  fD  QD*.))AEE*4E*FZ`koQpr s   vv"{w wr   c                 *    d|| j                         dS )Nr   )parser   headerr)   )r   flagrs   vipFlagss       r   playerContentzSpider.playerContent   s    2@@r   c                 $    | j                  |      S r   )imgs)r   params     r   
localProxyzSpider.localProxy   s    yyr   c                 ~    t        t        t        j                         dz              }| j                  |      }||fS )Ni  )strinttimemd5)r   tsigns      r   getsignzSpider.getsign   s2    DIIK$&'(xx{Qwr   c                 t    | j                         \  }}| j                  | j                  ||| j                  dS )N)
User-Agentdeviceidr   saut)r   uar   r   )r   r   r   s      r   r*   zSpider.headers   s1    ,,.a"gg$((VZV`V`aar   c                    t        d      }|}t        j                  |t        j                  |      }t	        |j                  t        |            t        j                        }t        j                  |j                  d            S )NzSmhiR2NpT2lKSVV6STFOaQ==utf-8)
r   r   newMODE_CBCr   decrypt
block_sizerC   loadsdecode)r   wordr3   ivcipher	decrypteds         r   rD   z
Spider.aes   s_    23cllB/&..493>>J	zz)**7344r   c                    	 t        |      }|dz  }|dz  }|dz  }|dz  }t        |      j                  d      }t        |      j                  d      }|dkD  r$t        |      j                  d      }| d| d| S | d| S #  Y yxY w)Ni  <   rx   r   :666)r   r   zfill)r   secondshoursremaining_secondsminutesformatted_minutesformatted_secondsformatted_hourss           r   rn   zSpider.dtim   s    	'lGtOE '$'2-G 1B 6 #G 2 21 5 #$5 6 < <Q ?qy"%e*"2"21"5)*!,=+>a@Q?RSS+,A.?-@AA	s   A;B >B B	c           
      ~   |t        | j                        k\  s||k\  ryddj                  t        j                  t
        j                  t
        j                  z   t        j                  dd                   d| j                  |    d}	 | d}| j                         \  }}| j                  d	| j                  ||d
}| j                  dddd}| j                  |||      }	|	j                          |	j                         d   }
|
d   |
d   |fS # t        $ r}| j!                  |dz   |      cY d }~S d }~ww xY w)NrP   zhttps://   
   )rJ   .z.workz/api/user/travelerzapplication/json)r   Acceptr   r   r   Uz##X-4m6Goo4zzPi1hF##tt09)deviceIdttcodechCode)rC   r*   r>   r   	imgDomainrw   )lenhsjoinrandomchoicesstringascii_lowercasedigitsrandintr   r   r   postraise_for_statusrC   	Exceptionr   )r   imax_attemptscurrent_domainr   r   r   r*   r>   responserG   es               r   r   zSpider.gettoken   s\   DGG\ 1#BGGFNN6;Q;QTZTaTa;aekesestuwyez,{$|#}}~  @D  @G  @G  HI  @J  K  KP  Q	6#$$67CllnGD!"gg, HHG !HH. 	D yy4yAH%%'MMOF+E>5#5~EE 	6==Q55	6s   BD 	D<D71D<7D<c                     | j                  d      }|sIt        t        t        j                                     }| j	                  |      }| j                  d|       |S )Nr   )getCacher   r   r   r   setCache)r   r   r   s      r   r   zSpider.getdid   sH    mmE"C		$%A((1+CMM%%
r   c                     t        j                         }|j                  |j                  d             |j	                         S )Nr   )r   r   updateencode	hexdigest)r   texths      r   r   z
Spider.md5   s.    GGI	W%&{{}r   c                     d| j                   i}|d   }| j                  | j                   | |      }| j                  |j                  dd      }d|j
                  j                  d      |gS )Nr   r   r)   d   z2020-zq3-888   zContent-Type)r   rB   r   imgcontentr*   rk   )r   r   r*   r   r>   bdatas         r   r   zSpider.imgs   sj    )ElzzTZZL.wz?sN;T\\%%n5u==r   r>   lengthr3   c           	        
 d
dd
fd}fd}fd} ||      r|S  ||      r|S  ||      r|S |j                  d      }t        |      }t        |      D ]  }	||	xx   ||	t        |      z     z  cc<     t	        |      S )Ns   GIFs   s   PNG

c                 4    t        |       dkD  xr | d d k(  S )Nrx      r   )r>   GIFs    r   is_dont_need_decode_for_gifz/Spider.img.<locals>.is_dont_need_decode_for_gif        t9q=4T"1X_4r   c                 4    t        |       dkD  xr | d d k(  S )N   r   r   )r>   JPGs    r   is_dont_need_decode_for_jpgz/Spider.img.<locals>.is_dont_need_decode_for_jpg   r   r   c                 :    t        |       dkD  xr | dd dd k(  S )Nr   rw      r   )r>   PNGs    r   is_dont_need_decode_for_pngz/Spider.img.<locals>.is_dont_need_decode_for_png   s'    t9q=:T!AY#a(%::r   r   )r   	bytearrayranger   bytes)r   r>   r   r3   r   r   r   	key_bytesrH   r   r   r   r   s             @@@r   r   z
Spider.img   s    1	5	5	; 't,K(.K(.K

7+It_F6]q	Yq3y>'9::	 #= r   N)rP   )r.   )r   r   )__name__
__module____qualname__r   r   r   r    r"   r   r   rK   rM   rt   r   r   r   r   r   r*   rD   rn   r   r   r   r   r   r   r   r   r   r   r   r   r      s    
 JB DB$L.
"A 
b5&66
>! !s ! !r   r   )rC   r   r   sysr   base64r   urllib.parser   Crypto.Cipherr   Crypto.Hashr   Crypto.Util.Paddingr   rq   rE   base.spiderr   r   r   r   <module>r     sF       
      %   e!V e!r   