o
    ñhµ1  ã                   @   s”   d dl 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d dlmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZmZ G dd„ deƒZdS )	é    N)Ú	urlencodeÚquote)ÚSpider)ÚAESÚ
PKCS1_v1_5)ÚRSA)ÚpadÚunpadc                       sÚ   e Zd Z‡ fdd„Zdd„ Zd/dd„Zdd	„ Zd
d„ Zdd„ Zd0dd„Z	de
de
fdd„Zde
de
fdd„Zde
defdd„Zde
defdd„Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd1d'd(„Zd)d*„ Zd+d,„ Zd-d.„ Z‡  ZS )2r   c                    s8   t ƒ  ¡  d| _d| _d| _d| _d| _d| _d| _d S )Nzhttps://api-h5.uvod.tvzhttps://www.uvod.tvÚ s   abcdefghijklmnopa”  -----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJ4FBai1Y6my4+fc
8AD5tyYzxgN8Q7M/PuFv+8i1Xje8ElXYVwzvYd1y/cNxwgW4RX0tDy9ya562V33x
6SyNr29DU6XytOeOlOkxt3gd5169K4iFaJ0l0wA4koMTcCAYVxC9B4+zzS5djYmF
MuRGfYgKYNH99vfY7BZjdAY68ty5AgMBAAECgYB1rbvHJj5wVF7Rf4Hk2BMDCi9+
zP4F8SW88Y6KrDbcPt1QvOonIea56jb9ZCxf4hkt3W6foRBwg86oZo2FtoZcpCJ+
rFqUM2/wyV4CuzlL0+rNNSq7bga7d7UVld4hQYOCffSMifyF5rCFNH1py/4Dvswm
pi5qljf+dPLSlxXl2QJBAMzPJ/QPAwcf5K5nngQtbZCD3nqDFpRixXH4aUAIZcDz
S1RNsHrT61mEwZ/thQC2BUJTQNpGOfgh5Ecd1MnURwsCQQDFhAFfmvK7svkygoKX
t55ARNZy9nmme0StMOfdb4Q2UdJjfw8+zQNtKFOM7VhB7ijHcfFuGsE7UeXBe20n
g/XLAkEAv9SoT2hgJaQxxUk4MCF8pgddstJlq8Z3uTA7JMa4x+kZfXTm/6TOo6I8
2VbXZLsYYe8op0lvsoHMFvBSBljV0QJBAKhxyoYRa98dZB5qZRskciaXTlge0WJk
kA4vvh3/o757izRlQMgrKTfng1GVfIZFqKtnBiIDWTXQw2N9cnqXtH8CQAx+CD5t
l1iT0cMdjvlMg2two3SnpOjpo7gALgumIDHAmsVWhocLtcrnJI032VQSUkNnLq9z
EIfmHDz0TPTNHBQ=
-----END PRIVATE KEY-----
a  -----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeBQWotWOpsuPn3PAA+bcmM8YD
fEOzPz7hb/vItV43vBJV2FcM72Hdcv3DccIFuEV9LQ8vcmuetld98eksja9vQ1Ol
8rTnjpTpMbd4HedevSuIhWidJdMAOJKDE3AgGFcQvQePs80uXY2JhTLkRn2ICmDR
/fb32OwWY3QGOvLcuQIDAQAB
-----END PUBLIC KEY-----
)	ÚsuperÚ__init__Úbase_urlÚweb_urlÚtokenÚ_ivÚ_client_privateZ_client_publicÚ_server_public©Úself©Ú	__class__© ú$/storage/emulated/0/lz/py/sy/UVod.pyr   
   s
   

zSpider.__init__c                 C   ó   dS )NZUVODr   r   r   r   r   ÚgetName-   ó    zSpider.getNamer
   c                 C   sz   zt |tƒr| ¡  d¡rt |¡nt |tƒr|ni }W n ty'   i }Y nw | d| j	¡| _	| d| j
¡| _
|  d¡S )NÚ{r   r   F)Ú
isinstanceÚstrÚstripÚ
startswithÚjsonÚloadsÚdictÚ	ExceptionÚgetr   r   ÚhomeContent)r   ÚextendZcfgr   r   r   Úinit/   s   : 
zSpider.initc                    s   ˆ rt ‡ fdd„dD ƒƒS dS )Nc                 3   s    | ]	}|ˆ   ¡ v V  qd S ©N)Úlower)Ú.0Úx©Úurlr   r   Ú	<genexpr>5   s   € z'Spider.isVideoFormat.<locals>.<genexpr>)z.m3u8z.mp4F)Úany)r   r.   r   r-   r   ÚisVideoFormat5   ó    zSpider.isVideoFormatc                 C   r   )NFr   r   r   r   r   ÚmanualVideoCheck6   r   zSpider.manualVideoCheckc                 C   ó   d S r)   r   r   r   r   r   Údestroy7   r   zSpider.destroyé    c                    s(   t jt j ‰ d ‡ fdd„t|ƒD ƒ¡S )Nr
   c                 3   s    | ]}t  ˆ ¡V  qd S r)   )ÚrandomÚchoice)r+   Ú_©Úcharsr   r   r/   ;   s   € z%Spider._random_key.<locals>.<genexpr>)ÚstringÚascii_lettersÚdigitsÚjoinÚrange)r   Únr   r:   r   Ú_random_key9   s   zSpider._random_keyÚ
plain_textÚreturnc                 C   s‚   |   d¡ d¡}tj|tj| jd}t | t	| d¡tj
ƒ¡¡ d¡}t | j¡}t |¡}t | |¡¡ d¡}|› d|› S )Nr6   úutf-8©ZivÚ.)rB   Úencoder   ÚnewÚMODE_CBCr   Úbase64Ú	b64encodeZencryptr   Ú
block_sizeÚdecoder   Ú
import_keyr   r   )r   rC   Úaes_keyÚcipherÚct_b64Zrsa_pubZ
rsa_cipherÚrsa_b64r   r   r   Ú_encrypt=   s   $zSpider._encryptÚenc_textc           	      C   sˆ   z8|  d¡}|\}}t | j¡}t |¡ t |¡d ¡}t	j|t	j
| jd}t| t |¡¡t	jƒ}| dd¡W S  tyC   | Y S w )NrG   rF   rE   Úignore)Úsplitr   rO   r   r   rI   ZdecryptrK   Ú	b64decoder   rJ   r   r	   rM   rN   r$   )	r   rU   ÚpartsrR   rS   Zrsa_privrP   rQ   Úptr   r   r   Ú_decryptE   s   zSpider._decryptÚpathÚpayloadc              	   C   s¢  t tt ¡ d ƒƒ}| jpd}|dkr"| dd¡}d|› d|› }n–|dkra| d	¡}|r@tt |ƒdd
 ¡ }d|› d|› }nx| dd¡}| dd¡}	| dd¡}d|› d|	› d|› d|› }nW|dkrrd| dd¡› d|› }nF|dkr—| dd¡}
| dd¡}| dd¡}d|
› d|› d|› d|› }n!dd „ |pi  ¡ D ƒ}tt	| ¡ ƒd!d" ¡ }|› d|› d|› }t
 | d#¡¡ ¡ }d$|||| j| jd% d&d'd(œS ))Niè  r
   ú/video/latestÚparent_category_idée   z-parent_category_id=ú-ú/video/listÚkeyword)Úsafez	-keyword=z2&need_fragment=1&page=1&pagesize=42&sort_type=asc-Úpageé   Úpagesizeé*   z-page=z
&pagesize=z&parent_category_id=z&sort_type=asc-ú/video/infoz-id=Úidú/video/sourceÚqualityÚvideo_fragment_idÚvideo_idz	-quality=z&video_fragment_id=z
&video_id=c                 S   s   i | ]\}}|d vr||“qS ))r   Ú0r
   FNr   )r+   ÚkÚvr   r   r   Ú
<dictcomp>Y   r2   z)Spider._build_headers.<locals>.<dictcomp>T)ÚdoseqrE   zapplication/jsonú/z*/*úoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36)zContent-TypezX-TOKENzX-TIMESTAMPzX-SIGNATUREÚOriginÚRefererÚAcceptú
User-Agent)r   ÚintÚtimer   r%   r   r*   Úitemsr   ÚsortedÚhashlibÚmd5rH   Ú	hexdigestr   )r   r\   r]   Útsr   Z	parent_idÚtextrc   re   rg   rl   Úfragment_idrn   ZfilteredÚqueryÚsigr   r   r   Ú_build_headersO   s   
*B"JBzSpider._build_headersc           
   	   C   sà   | j  d¡| }z]|  tj|dd¡}|  ||¡}| j|||dd}|jdks*|js-W d S |j 	¡ }d }z|  
|¡}	t |	¡}W n   zt |¡}W n   Y Y t|tƒrc| d¡dkrc| d	¡W S W d S  tyo   Y d S w )
Nrt   F)Úensure_asciié   )ÚdataÚheadersÚtimeoutéÈ   Úerrorr   r‰   )r   ÚrstriprT   r!   Údumpsr†   ÚpostÚstatus_coder‚   r   r[   r"   r   r#   r%   r$   )
r   r\   r]   r.   ÚbodyrŠ   ÚrspÚtxtÚobjÚdecr   r   r   Ú	_post_api]   s    €$zSpider._post_apic              	   C   sè   |   di ¡}t|tƒr| d¡p| d¡pg n|pg }g }|D ]0}| d¡p/| d¡p/| d¡}| d¡p>| d¡p>| d	¡}|rO|rO| t|ƒt|ƒd
œ¡ q|spddd
œddd
œddd
œddd
œddd
œddd
œddd
œg}d|iS )Nz/video/categoryÚlistÚcategoryrj   Úcategory_idÚvalueÚnameÚlabelÚtitle)Ú	type_nameZtype_idu   ç”µå½±Z100u	   ç”µè§†å‰§Z101u   ç»¼è‰ºZ102u   åŠ¨æ¼«Z103u   ä½“è‚²Z104u	   çºªå½•ç‰‡Z105u   ç²¤å°ä¸“åŒºZ106Úclass)r—   r   r#   r%   Úappendr   )r   Úfilterr‰   ÚlstÚclassesÚitZcidrœ   r   r   r   r&   l   s   ,€ < €@zSpider.homeContentc              	   C   sò   |   dddi¡}t|tƒr$| d¡p"| d¡p"| d¡p"| d¡p"g }n
t|tƒr,|}ng }g }|D ]B}| d¡pB| d	¡pB| d
¡}|rt| t|ƒ| d¡pU| d¡pUd| d¡pe| d¡pe| d¡ped| d¡pp| d¡ppddœ¡ q2d|iS )Nr^   r_   r`   Zvideo_latest_listr˜   Úrowsr|   rj   rn   ÚvideoIdrž   rœ   r
   ÚposterÚcoverÚpicÚscoreZremarks©Úvod_idÚvod_nameÚvod_picÚvod_remarks)r—   r   r#   r%   r˜   r¡   r   )r   r‰   r£   Úvideosrp   Úvidr   r   r   ÚhomeVideoContentt   s   8b€zSpider.homeVideoContentc                 C   sf  t |ƒ ¡ r
t|ƒnd}t |ƒd d d d d dd |ddddœ}t|tƒr2dD ]}| |¡r1|| ||< q$|  d|¡}t|tƒrZ| d¡pR| d	¡pR| d
¡pR| d¡pRg }	| dd¡}
nt|tƒrd|}	d}
ng d}	}
g }|	D ]=}| d¡p}| d¡p}| d¡}|rª| t |ƒ| d¡p| d¡pd| d¡p | d¡p | d¡p d| d¡p¦ddœ¡ qm||dd|
dœS )Nrf   r
   rh   Úasc)r_   rš   ÚlanguageÚyearÚregionÚstaterc   Úpaidre   rg   Ú
sort_fieldÚ	sort_type)rš   r¶   r·   r¸   rc   rb   Ú
video_listr˜   r¦   r|   Útotali?B r   rj   rn   r§   rž   rœ   r¨   r©   rª   r«   r¬   i'  é   )r˜   re   Z	pagecountÚlimitr½   )	r   Úisdigitrz   r   r#   r%   r—   r˜   r¡   )r   ÚtidÚpgr¢   r'   re   r]   rp   r‰   r£   r½   r±   r²   r   r   r   ÚcategoryContent   s    "
€D
X€zSpider.categoryContentc                 C   s\  |d }|   dd|i¡pi }t|tƒr| di ¡ni }t|tƒr&| dg ¡ng }g }|r`|D ]1}| dd¡}| dd¡}	| d	g ¡}
|	r_|
r_|
rLt|
ƒnd
}| |› d|› d|	› d|› d¡ q.|sj| d|› ¡ t|ƒ| d¡px| d¡pxd| d¡pˆ| d¡pˆ| d¡pˆd| d¡pŽd| d¡p”d| d¡pŸ| d¡pŸddd |¡d dœ}d|giS )Nr   ri   rj   ÚvideoZvideo_fragment_listÚsymbolu   æ’­æ”¾r
   Ú	qualitiesé   ú$ú|z|[ú]u   æ’­æ”¾$rž   rœ   r¨   r©   rª   r¶   ZdurationÚdescriptionÚdescu   ä¼˜æ±ðŸ‘æºú#z$$$)r­   r®   r¯   Zvod_yearr°   Zvod_contentZvod_play_fromZvod_play_urlr˜   )r—   r   r#   r%   Úmaxr¡   r   r?   )r   Zidsr²   r‰   Z
video_infoZ	fragmentsZ	play_urlsÚfragmentrœ   rƒ   rÆ   Zmax_qualityZvodr   r   r   ÚdetailContent   s   T$"€~
zSpider.detailContentÚ1c                 C   s  t |ƒ ¡ r
t|ƒnd}d d d d d d |d |dddddœ}|  d|¡}t|tƒr>| d¡p<| d¡p<| d	¡p<| d
¡p<g }n
t|tƒrF|}ng }g }|D ]=}	|	 d¡p\|	 d¡p\|	 d¡}
|
r‰| t |
ƒ|	 d¡po|	 d¡pod|	 d¡p|	 d¡p|	 d¡pd|	 d¡p…ddœ¡ qLd|iS )Nrf   rh   r
   r´   )r_   rš   rµ   r¶   r·   r¸   rc   r¹   re   rg   rº   r»   Zneed_fragmentrb   r¼   r˜   r¦   r|   rj   rn   r§   rž   rœ   r¨   r©   rª   r«   r¬   )	r   rÀ   rz   r—   r   r#   r%   r˜   r¡   )r   ÚkeyÚquickrÂ   re   r]   r‰   r£   r±   rp   r²   r   r   r   ÚsearchContentœ   s    8X€zSpider.searchContentc                 C   sp   |sd S t |tƒr| ¡ }|  |¡r|S d S t |ttfƒr6t |tƒr&| ¡ n|D ]}|  |¡}|r5|  S q(d S r)   )r   r   r   r1   r#   r˜   ÚvaluesÚ_extract_first_media)r   r•   Úsrq   Úrr   r   r   rÖ   ©   s   $
zSpider._extract_first_mediac                 C   s$  |  d¡}|d }t|ƒdkrL|d }|d  d¡ dd¡}d	d
„ |  d¡D ƒ}|r.|d nd}	|t|ƒ ¡ r;t|ƒn|t|	ƒ ¡ rFt|	ƒn|	d dœ}
n|ddd dœ}
|  d|
¡pZi }| di ¡ dd¡pz| d¡pz| d¡pz| d¡pz|  	|¡pzd}|s‚d|dœS d| j
d | j
dœ}d||dœS )NrÉ   r   é   rf   é   z[]ú r
   c                 S   s   g | ]
}|  ¡ r|  ¡ ‘qS r   )r   )r+   Úqr   r   r   Ú
<listcomp>µ   s    z(Spider.playerContent.<locals>.<listcomp>ú,Ú4)rn   rm   rl   ÚseekrÇ   rk   rÄ   r.   ZplayUrlZplay_url)Úparser.   ru   rt   )ry   rw   rv   )rá   r.   Úheader)rW   Úlenr   Úreplacer   rÀ   rz   r—   r%   rÖ   r   )r   Úflagrj   ÚvipFlagsrY   rn   rƒ   Zqualities_strrÆ   rl   r]   r‰   r.   rŠ   r   r   r   ÚplayerContent²   s   B8@zSpider.playerContentc                 C   r4   r)   r   )r   Úparamr   r   r   Ú
localProxy¾   r   zSpider.localProxy)r
   )r6   )rÑ   )Ú__name__Ú
__module__Ú__qualname__r   r   r(   r1   r3   r5   rB   r   rT   r[   r#   r†   r—   r&   r³   rÃ   rÐ   rÔ   rÖ   rç   ré   Ú__classcell__r   r   r   r   r   	   s(    #



	r   )Úsysr!   r{   rK   r7   r<   r~   Úurllib.parser   r   Zbase.spiderr   ZCrypto.Cipherr   r   ZCrypto.PublicKeyr   ZCrypto.Util.Paddingr   r	   r   r   r   r   Ú<module>   s   8