o
    ðóqi^&  ã                   @   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   242ccb8230d709e1Úd3dGiJc651gSQ8w1zcom.kmxs.readerÚ51110ÚandroidÚ0Ú1Úunknown)zapp-versionÚplatformÚregÚ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Úcopyr2   )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   Ú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 )Nr3   rM   zhttps://api-bc.wtzw.comzhttps://api-ks.wtzw.comÚsearch)r2   )r   Úpathr-   Ú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   ÚfilterÚ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   Ú202z/api/v4/category/get-listr   )ÚgenderÚcategory_idÚneed_filtersÚpageÚneed_categoryrM   ©r-   r6   ÚdataÚbooksÚidÚtitleÚ
image_linkÚauthor©Úvod_idÚvod_nameÚvod_picÚvod_remarksiç  é   i'  )r_   rf   Ú	pagecountÚlimitÚtotalr_   )Úsplitr7   rR   ÚrequestsÚgetÚjsonÚappendr'   )r   ÚtidÚpgr[   r   rc   Úcat_idrO   r-   r6   r   Úsigned_paramsÚrÚjÚvideosÚ	book_listÚbookr	   r	   r
   ÚcategoryContentq   s6   

üzSpider.categoryContentc              
   C   sÚ  |d }|   ¡ }|dddœ}|  d|d¡\}}|ddd	œ}z±t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 r•d|d v r•|d d }|D ]*}t|d ƒ}t|d ƒ dd ¡ d!d¡}|› d|› d|› }| |› d!|› ¡ q—d" |¡|d#< d$|giW S  t	yì } zd%|› |d< d$|giW  Y d }~S d }~ww )&Nr   Ú
2937357107r   )rk   Úimei_ipÚ
teeny_modez/api/v4/book/detailrM   u   èŽ·å–ä¸­...r   )rp   rq   Úvod_play_fromrh   ri   r…   rl   rq   rm   rr   Úcategory_namerS   Ú	words_numr   u   å­—rs   rn   Ú	vod_actorÚintroÚvod_contentrk   z/api/v1/chapter/chapter-listÚksÚchapter_listsú@@ú-ú$ú#Úvod_play_urlr_   zError: )
r7   rR   ry   rz   r{   r'   Úreplacer|   ÚjoinrC   )r   ÚidsÚbidr6   Údetail_paramsÚ
detail_urlÚdetail_signed_paramsÚvodr   r‚   Ú	book_infoÚchapter_paramsÚchapter_urlÚchapter_signed_paramsÚr_cÚj_cÚchapter_listÚlistsÚitemÚcidÚcnameÚurl_coderK   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‡   )rc   rˆ   rf   ÚwdrM   rh   ri   rj   rk   Úoriginal_titlerm   Úoriginal_authorro   )r_   rf   )r7   rR   ry   rz   r{   r|   r'   )r   ÚkeyÚquickr~   rO   r-   r6   r   r€   r   r‚   rƒ   r…   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   )rk   Ú	chapterIdz/api/v1/chapter/contentr   rh   ri   Úcontentrl   u   åŠ è½½å¤±è´¥: Úmsgu   æœªçŸ¥é”™è¯¯u   ç« èŠ‚æ­£æ–‡)rl   r¶   F)Úensure_asciiznovel://)ÚparseÚplayUrlr   Úheaderu   é”™è¯¯u   å‘ç”Ÿå¼‚å¸¸: N)rx   r<   r7   rR   ry   rz   r{   rL   ÚdumpsrC   r'   )r   Úflagrk   ÚvipFlagsÚpartsrš   r¨   rl   r-   r6   r   r€   r   r‚   r¶   Úresult_dataÚretÚ	final_urlrK   Úerr_datar	   r	   r
   ÚplayerContentÔ   sN   

þ
üþü€ûzSpider.playerContentc                 C   r   r   r	   )r   r-   r	   r	   r
   Ú
localProxy  r   zSpider.localProxyN)r   )rM   )r   )r   r   r   r   r   r   r   r>   r(   ÚAPP_IDr4   r2   r7   rL   rR   r^   r`   r†   r«   r²   rÄ   rÅ   r	   r	   r	   r
   r      s8    
ø	
	
 
.:r   )Úsysr)   r:   r{   ry   ÚCrypto.Cipherr   ÚCrypto.Util.Paddingr   rO   r|   Úbase.spiderr   r   ÚImportErrorr	   r	   r	   r
   Ú<module>   s&   þ€ü	