o
    *)li&                     @   s   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	Z	ddl
Z
ddlZddlZddlZddlZeejj e
jd G dd	 d	eZdS )
uj   
@header({
  searchable: 1,
  filterable: 1,
  quickSearch: 1,
  title: '麻雀视频',
  lang: 'hipy'
})
    )AES)Spider)
quote_plus)unpadNz..c                	   @   s   e Zd Zdddddddddd	d
ZZZdd Zdd Zdd Zd2ddZ	dd Z
dd Zdd Zd3ddZd3d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/d0 Zd1S )4r   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36zzh-CN,zh;q=0.9zA"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"zno-cachez?0z	"Windows"zsame-origin)
User-Agentzaccept-languagez	sec-ch-uazcache-controlZpragmazsec-ch-ua-mobilezsec-ch-ua-platformzsec-fetch-sitezMcxos@mucho!nmmezhttps://www.mqtv.ccc                 C   s2   | j sd S ddddddddddd	d
dgiS )Nclassz/type/movieu   电影)type_id	type_namez/type/tvu	   电视剧z/type/vau   综艺z/type/ctu   动漫)host)selffilter r   ,   /storage/emulated/0/lz/py/sy/麻雀视频.pyhomeContent#   s   
(zSpider.homeContentc              	   C   sb   | j | j d| d | ddd }g }|d d D ]}|| |dg  qd|iS )	Nz'/libs/VodList.api.php?home=index&token=/FheadersverifydataZmovieshowlist)fetchr
   tokenheaders2jsonextendarr2vodsget)r   responsevideosir   r   r   homeVideoContent'   s
   ,zSpider.homeVideoContentc              
   C   sb   | j  d|ddd  d| d| |d }| j|| |dd }| |d }||d	S )
Nz/libs/VodList.api.php?type=r      z$&rank=rankhot&cat=&year=&area=&page=&token=Fr   r   r   page)r
   splitr   r   r   r   r   )r   tidpgr   r   urlr   r   r   r   r   categoryContent.   s   0
zSpider.categoryContent1c           
   	   C   s   dt | }| j d| d| |d }| j|| |dd }| |d }g }|d D ]}	t|	trC|	| 
|	d	g  q0||d
S )Nz/search/z/libs/VodList.api.php?search=r#   r   Fr   r   Zvod_allr   r$   )r   r
   r   r   r   r   decode
isinstancedictr   r   r   )
r   keyquickr(   pathr)   r   r   r   r    r   r   r   searchContent4   s   

zSpider.searchContentc                 C   s  | j  d|d ddd  d| |d d }| j|| |d dd }|d }g }|d	g D ],}t|tr`|d
r`t|d
 t	r`|d
 
drY|d|d
   q4||d
  q4d|}g g }}	|d D ]-}
g }|
d D ]}||d  d|d
  d|  qw|r|	d| ||
d  qo|d |d |d |d |d |d |d |d d d|d|	d d}d|giS )Nz!/libs/VodInfo.api.php?type=ct&id=r   r      r#   Fr   r   Zplayapir)   z//zhttps:,Zplayinfoplayerno$@#Zcnsitetitleimgremarkyearareaactordirectorz$$$)vod_idvod_namevod_picvod_remarksvod_yearvod_area	vod_actorvod_directorvod_contentvod_play_fromvod_play_urlr	   r   )r
   r&   r   r   r   r   r   r-   r.   str
startswithappendjoin)r   idsr)   r   r   Z
parses_arrr    parsesZshows	play_urlsjurlskvideor   r   r   detailContent?   sD   2"

$
zSpider.detailContentc              	   C   s.  | dd\}}d\}}}| d}	|	D ]N}
zC| j|
 | | jdddj}td|tj d	 }td
|tj d	 }td|tj d	 }| |||}|	drX|}W q t
yb   Y qw |s|	drvtd|rv|d}}n|	D ]}|	dr| | d}} nqx|||d| jd idS )Nr8      )r   r    r4   F
   )r   r   timeoutzS<(?:\s+)?meta(?:\s+)?charset="UTF-8"(?:\s+)?id(?:\s+)?=(?:\s+)?"now_(.*?)"(?:\s+)?>r   zV<(?:\s+)?meta(?:\s+)?name(?:\s+)?=(?:\s+)?"viewport".*?id(?:\s+)?=(?:\s+)?"now_(.*?)">z"url"(?:\s+)?:\s+?"(.*?)",httpz:(?:www\.iqiyi|v\.qq|v\.youku|www\.mgtv|www\.bilibili)\.comr   )jxparser)   header)r&   r   main_headerstextresearchIgroupsdecryptrM   	Exception)r   flagvid	vip_flagsraw_urlZ
parses_strr]   sniffr)   rQ   r    r   charset_meta_idviewport_meta_idZjm_urlplay_urlrS   r   r   r   playerContentc   s0   


zSpider.playerContentc              	   C   s8   g }|D ]}| |d |d |d |d d d q|S )Nr)   r:   r;   r<   )rA   rB   rC   rD   rE   )rN   )r   arrr   r    r   r   r   r   {   s   
zSpider.arr2vodsrY   c                 C   sz   i | j ddddddd}|r| j | |d< | j| j | |d	d
j}td|tj }r6|dnd }| |S )Nztext/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7zu=0, idocumentnavigatez?1r+   )Acceptprioritysec-fetch-destsec-fetch-modezsec-fetch-userzupgrade-insecure-requestsrefererFr   zwindow\.pageid\s?=\s?\'(.*?)\';rX   )	r`   r
   r   ra   rb   rc   rd   groupencode)r   r1   ref_pathr   r   mZpage_idr   r   r   r      s   	"
zSpider.tokenc                 C   s4   i | j dddddd}|r| j | |d< |S )Nz.application/json, text/javascript, */*; q=0.01zu=1, iemptyZcorsXMLHttpRequest)rt   ru   rv   rw   zx-requested-withrx   )r`   r
   )r   r{   r   r   r   r   r      s   zSpider.headers2c                 C   s   | j }t|}tj|dd}t|dd}g }t|D ]\}}|| }	t	|t	||	 A }
|
t|
 qd|}tt|ddS )NF)ensure_asciiutf-8rY   )r/   lenr   dumpsbase64	b64encoderz   r,   	enumerateordrN   chrrO   r   )r   r   r/   key_lenZjson_strZb64_1
xor_resultr    charZkey_idxZxor_codexor_strr   r   r   rz      s   
zSpider.encodec                 C   s  | j }t|}ztj|ddt|d    d d}|d}W n
 ty)   t w g }t|D ]\}}|| }	t|t||	 A }
|	t
|
 q0d|}ztj|ddt|d    d d}|d}W n
 tyq   t w zt|}W |S  tjy   t w )N=   )altcharsr   rY   )r/   r   r   	b64decoder,   rg   
ValueErrorr   r   rN   r   rO   r   loadsJSONDecodeError)r   Zencoded_strr/   Z
key_lengthZdecoded_step1Zdecoded_step1_strr   r    r   Z	key_indexZ	char_coder   Zdecoded_step2Zdecoded_step2_strresultr   r   r   r,      s4   "
"zSpider.decodec                 C   s   g }t t|D ]}|| }|t|k r|| nd}|||d qt|dd d}ddd |D }	t|	 dd	 }
t	
|}t|
d
d  d	tj|
d d
 d	}||}t|tjdd}|d	S )NrY   )idra   c                 S   s   t | d S )Nr   )int)xr   r   r   <lambda>   s    z Spider.decrypt.<locals>.<lambda>)r/   c                 S   s   g | ]}|d  qS )ra   r   ).0itemr   r   r   
<listcomp>   s    z"Spider.decrypt.<locals>.<listcomp>Zlemonr      pkcs7)style)ranger   rN   sortedrO   hashlibmd5rz   	hexdigestr   r   r   newMODE_CBCrf   r   
block_sizer,   )r   encrypted_strrn   rm   Zid_text_listidxZid_charZ	text_charZid_text_list_sortedseedZ
md5_resultZcipher_datacipherdecrypted_dataZ
plain_datar   r   r   rf      s   
,

zSpider.decryptc                 C      d S Nr   )r   r   r   r   r   init      zSpider.initc                 C   r   r   r   r   r   r   r   getName   r   zSpider.getNamec                 C   r   r   r   )r   r)   r   r   r   isVideoFormat   r   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.destroyc                 C   r   r   r   )r   paramr   r   r   
localProxy   r   zSpider.localProxyN)r+   )rY   )__name__
__module____qualname__r`   r/   r
   r   r!   r*   r2   rW   rp   r   r   r   rz   r,   rf   r   r   r   r   r   r   r   r   r   r   r      s<    	

$


r   )__doc__Crypto.Cipherr   base.spiderr   urllib.parser   Crypto.Util.Paddingr   rb   sysr   r   urllib3r   disable_warnings
exceptionsInsecureRequestWarningr1   rN   r   r   r   r   <module>   s    0