o
    bqi^&                     @   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 e j	
d zd dlmZ W n" eyP   zd dlmZ W n eyM   G dd dZY nw Y nw G d	d
 d
eZdS )    N)AES)unpadz..)Spider)
BaseSpiderc                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r	   r	   ,   /storage/emulated/0/lz/py/sy/阅读助手.pyr      s    r   c                	   @   s   e Zd Zdd Zd+ddZdd Zdd	 Zd
ZdZdZ	dddde	ddddZ
dd Zdd Zdd Zd,ddZdd Zdd Zd d! Zd"d# Zd-d$d%Zd&d' Zd(d) Zd*S ).r   c                 C      dS )N   阅读助手r	   selfr	   r	   r
   getName      zSpider.getName c                 C      d S Nr	   )r   extendr	   r	   r
   init   r   zSpider.initc                 C   r   )NFr	   )r   urlr	   r	   r
   isVideoFormat!   r   zSpider.isVideoFormatc                 C   r   r   r	   r   r	   r	   r
   manualVideoCheck$   r   zSpider.manualVideoChecks   242ccb8230d709e1Zd3dGiJc651gSQ8w1zcom.kmxs.readerZ51110android01unknown)zapp-versionplatformregZAUTHORIZATIONzapplication-idznet-envchannelz	qm-paramsc                 C   sV   t | }d}|D ]}t|| }|| d| 7 }q
|| j7 }t|d S )Nr   =utf-8)sortedkeysstrSIGN_KEYhashlibmd5encode	hexdigest)r   paramssorted_keyssign_strkvalr	   r	   r
   get_sign9   s   
zSpider.get_signc                 C   s$   | j  }| ||d< d|d< |S )Nsignzokhttp/3.12.1z
User-Agent)BASE_HEADERScopyr/   )r   headersr	   r	   r
   get_headersB   s   
zSpider.get_headersc              
   C   s   zFt |}t|dk rdW S |d d }|dd  }t| jtj|}||}zt|tj	
dW W S  tyF   |
dd  Y W S w  ty_ } zdt| W  Y d }~S d }~ww )N   u   数据长度不足r!   ignoreu   解密错误: )base64	b64decodelenr   newAES_KEYMODE_CBCdecryptr   
block_sizedecode	Exceptionstripr$   )r   Zbase64_contentencrypted_bytesiv
ciphertextcipher	decrypteder	   r	   r
   decrypt_contentI   s"   

zSpider.decrypt_contentbcc                 C   s:   |  ||d< |dkrdnd}d|v rd}| | |fS )Nr0   rI   zhttps://api-bc.wtzw.comzhttps://api-ks.wtzw.comsearch)r/   )r   pathr*   Zdomain_typebase_urlr	   r	   r
   get_api_url[   s
   zSpider.get_api_urlc                 C   s    g d}dd |D }|i dS )N))u   玄幻奇幻z1|202)u   都市人生z1|203)u   武侠仙侠z1|205)u   历史军事z1|56)u   科幻末世z1|64)u   游戏竞技z1|75)u   现代言情z2|1)u   古代言情z2|2)u   幻想言情z2|4)u   婚恋情感z2|6)u   悬疑推理z3|262c                 S   s   g | ]	\}}||d qS ))	type_nametype_idr	   ).0nir	   r	   r
   
<listcomp>k   s    z&Spider.homeContent.<locals>.<listcomp>)classfiltersr	   )r   filterZcatsclassesr	   r	   r
   homeContentd   s   
zSpider.homeContentc                 C   s   dg iS )Nlistr	   r   r	   r	   r
   homeVideoContentn   s   zSpider.homeVideoContentc              	   C   s  z	| d\}}W n   d\}}Y d}||d|dd}|  }	| ||d\}
}zOtj|
||	d}| }g }g }d|v rKd	|d v rK|d d	 }nd	|v rS|d	 }|D ]}|t|d
|d|d|dd qU||ddddW S    dg i Y S )N|)r   Z202z/api/v4/category/get-listr   )gendercategory_idZneed_filterspageZneed_categoryrI   r*   r3   databooksidtitle
image_linkauthorvod_idvod_namevod_picvod_remarksi     i'  )rY   r^   	pagecountlimittotalrY   )splitr4   rM   requestsgetjsonappendr$   )r   tidpgrV   r   r\   Zcat_idrK   r*   r3   r   signed_paramsrjvideosZ	book_listbookr	   r	   r
   categoryContentq   s6   

zSpider.categoryContentc              
   C   s  |d }|   }|ddd}| d|d\}}|ddd	}ztj|||d
}| }	d|	v rhd|	d v rh|	d d }
|
d|d< |
d|d< |
d|d< |
dd d|d< |
d|d< |
d|d< d|i}| d|d\}}tj|||d
}| }g }g }d|v rd|d v r|d d }|D ]*}t|d }t|d dd d!d}| d| d| }|| d!|  qd"||d#< d$|giW S  t	y } zd%| |d< d$|giW  Y d }~S d }~ww )&Nr   
2937357107r   )rb   imei_ipZ
teeny_modez/api/v4/book/detailrI   u   获取中...r   )rg   rh   vod_play_fromr_   r`   rz   rc   rh   rd   ri   Zcategory_namerN   Z	words_numr   u   字rj   re   	vod_actorintrovod_contentrb   z/api/v1/chapter/chapter-listksZchapter_lists@@-$#vod_play_urlrY   zError: )
r4   rM   rp   rq   rr   r$   replacers   joinr@   )r   idsbidr3   Zdetail_params
detail_urlZdetail_signed_paramsvodrw   rx   Z	book_infoZchapter_paramschapter_urlZchapter_signed_paramsZr_cZj_cZchapter_listlistsitemcidZcnameZurl_coderG   r	   r	   r
   detailContent   sH   zSpider.detailContentc              	   C   s   d}dd||d}|   }| ||d\}}z?tj|||d}	|	 }
g }d|
v rPd|
d v rP|
d d D ]}|t|d	|d
|d|dd q5||dW S    g |d Y S )Nz/api/v5/search/words3r|   )r\   r}   r^   wdrI   r_   r`   ra   rb   Zoriginal_titlerd   Zoriginal_authorrf   )rY   r^   )r4   rM   rp   rq   rr   rs   r$   )r   keyquickru   rK   r*   r3   r   rv   rw   rx   ry   rz   r	   r	   r
   searchContent   s&   
zSpider.searchContentc              
   C   sZ  z| d}|d }|d }t|dkr|d nd}||d}|  }	| d|d\}
}tj|
||	d	}| }d}d
|v r\d|d
 v r\|sRd|d
 v rR|d
 d }| |d
 d }n	d|dd }|sid}||d}tj|dd}d| }dd|ddW S  t	y } zddt
| d}dddtj|dd ddW  Y d}~S d}~ww )uf   
        修正点：返回格式改回 JSON 字符串，以适配原版壳子的解析逻辑
        r   r         r   )rb   	chapterIdz/api/v1/chapter/contentr   r_   r`   contentrc   u   加载失败: msgu   未知错误u   章节正文)rc   r   F)ensure_asciiznovel://)parseplayUrlr   headeru   错误u   发生异常: N)ro   r9   r4   rM   rp   rq   rr   rH   dumpsr@   r$   )r   flagrb   vipFlagspartsr   r   rc   r*   r3   r   rv   rw   rx   r   Zresult_dataretZ	final_urlrG   Zerr_datar	   r	   r
   playerContent   sN   


zSpider.playerContentc                 C   r   r   r	   )r   r*   r	   r	   r
   
localProxy  r   zSpider.localProxyN)r   )rI   )r   )r   r   r   r   r   r   r   r;   r%   ZAPP_IDr1   r/   r4   rH   rM   rX   rZ   r{   r   r   r   r   r	   r	   r	   r
   r      s8    
	
	
 
.:r   )sysr&   r7   rr   rp   Crypto.Cipherr   Crypto.Util.Paddingr   rK   rs   base.spiderr   r   ImportErrorr	   r	   r	   r
   <module>   s&   	