o
    *)li                     @   sn   d 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 )ug   
@header({
  searchable: 1,
  filterable: 1,
  quickSearch: 1,
  title: '独播库',
  lang: 'hipy'
})
    )SpiderNz..c                   @   s   e Zd ZddddddZZ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 Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)S ),r   z)Mozilla/5.0 (Windows NT 10.0; Win64; x64)z
Keep-Alivegzipzhttps://www.duboku.tv/)
User-Agent
ConnectionAccept-EncodingRefererzhttps://api.dbokutv.com c                 C      d S N )selfextendr   r   )   /storage/emulated/0/lz/py/sy/独播库.pyinit      zSpider.initc                 C   s2   | j sd S ddddddddddd	d
dgiS )Nclass   u	   连续剧)type_id	type_name   u   综艺   u   电影   u   动漫)host)r   filterr   r   r   homeContent   s   
(zSpider.homeContentc                 C   s   | j | | j d| jdd }g }|D ](}|dg D ]}|| |d|d|d | |d |d	 d
 qqd|iS )Nz/homeFheadersverifyVodListDIdDuIdNameTnIdTagvod_idvod_namevod_picvod_remarkslist)fetchsignr   r   jsongetappenddecode)r   responsevideosijr   r   r   homeVideoContent#   s   $
zSpider.homeVideoContentc                 C   sZ  | j | | j d| dt|dkrdn| d| jdd }g d}}|d	 D ]}|| |d
|d|d | |d |d d q)z&|d D ]}	|	d dkrmt	| |	d|	d
dd }
|
rm|
}qNW n	 tyx   Y nw |dkrz|d D ]}	|	d dkrt	|	d 
dd }
|
r|
}qW n ty   d}Y nw |||dS )Nz	/vodshow/z--------1r   z---Fr   r   r   r   r    r!   r"   r#   r$   ZPaginationListTypeZStartEndZPIdZPuId-   Z	ShortPage/r   )r)   	pagecountpage)r*   r+   r   strr   r,   r.   r/   r-   intsplit	Exception)r   tidpgr   r   r0   r1   r:   r2   r3   Zpgcountr   r   r   categoryContent0   s>   @

&zSpider.categoryContentr5   c                 C   s   | j | | j d d| | jdd }g }|D ]%}|| |d|d|d | |d |d	 |d
 |d d q||dS )Nz
/vodsearchz&wd=Fr   r   r    r!   r"   r#   ActorRating)r%   r&   r'   r(   	vod_actorZ	vod_score)r)   r;   )r*   r+   r   r   r,   r.   r/   r-   )r   keyquickrA   r0   r1   r2   r   r   r   searchContentK   s   .

zSpider.searchContentc                    s    j   j |d   jdd } fdd|d D }|d |d  |d d	|d
  |d |d d|d |d |d dd||d  d|d  d|d  d}d|giS )Nr   Fr   c                    s(   g | ]}|d   d  |d  qS )ZEpisodeName$ZVId)r/   .0r2   r   r   r   
<listcomp>[   s   ( z(Spider.detailContent.<locals>.<listcomp>ZPlaylistr!   r"   u	   评分：rD   ZReleaseYearZRegion,rC   ZDirectorDescriptionu	   独播库#ZGenreZScenarioZLanguage)r%   r&   r'   r(   Zvod_yearZvod_arearE   Zvod_directorvod_contentvod_play_fromvod_play_urlr   r)   )r*   r+   r   r   r,   r/   join)r   idsdata	play_urlsZvideor   rL   r   detailContentY   s    *
zSpider.detailContentc                 C   sN   | j | | j | | jdd }dddddd}d	d	| |d
 |dS )NFr   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36zgzip, deflatezhttps://w.duboku.iozhttps://w.duboku.io/zu=1, i)r   r   originrefererZpriorityr   ZHId)Zjxparseurlheader)r*   r+   r   r   r,   r/   )r   flagZvideo_idZ	vip_flagsresr   r   r   r   playerContentl   s   &zSpider.playerContentc                    s   |rt |ts	dS |dsdS d z fddtdt D }d|dd}W n
 ty9   Y dS w zd	t|d	  }|d	krM|d| 7 }tj	|d
d}|
dW S  tyc   Y dS w )Nr   z'"
   c                 3   s*    | ]}||   d d d V  qd S )Nr   rJ   Zsegment_lengthZstripped_strr   r   	<genexpr>}   s   ( z Spider.decode.<locals>.<genexpr>r   .=r   T)validatezutf-8)
isinstancer<   striprangelenrT   replacer?   base64	b64decoder/   )r   rV   Zreversed_segmentsZprocessed_base64Zpadding_neededZdecoded_bytesr   rc   r   r/   w   s&   
 zSpider.decodec                 C   s   t tt  t dd}|d }d| }tt }t|}| | | |}t|	 
 dd}| d}	| d}
| d	|	 d
|
 d| S )Nr   i /i i 5rf   re   <   &   z?sign=z&token=z&ssid=)randomseedr=   timerandintr<   interleave_stringsrm   	b64encodeencoder/   rl   random_string)r   rawZrandom_numberZvalue_aZvalue_bZcurrent_unix_timestampZunix_timestamp_strZinterleaved_strZssid_base64_encodedZrandom_signZrandom_tokenr   r   r   r+      s   

zSpider.signc                 C   sn   g }t t|t|}t|D ]}|||  |||  q|||d   |||d   d|S )Nr   )minrk   rj   r.   rT   )r   Z	first_strZ
second_strZinterleaved_charsZ
min_lengthr2   r   r   r   ru      s   
zSpider.interleave_stringsc                    s:   d t tt t   d fddt|D S )NZ>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789r   c                 3   s    | ]}t  V  qd S r
   )rq   choice)rK   _	characterr   r   rd      s    z'Spider.random_string.<locals>.<genexpr>)rq   rr   r=   rs   rk   rT   rj   )r   lengthr   r}   r   rx      s   zSpider.random_stringc                 C   r	   r
   r   rL   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   rL   r   r   r   manualVideoCheck   r   zSpider.manualVideoCheckc                 C   r	   r
   r   rL   r   r   r   destroy   r   zSpider.destroyc                 C   r	   r
   r   )r   paramr   r   r   
localProxy   r   zSpider.localProxyN)r   )r5   )__name__
__module____qualname__r   r   r   r   r4   rB   rH   rX   r`   r/   r+   ru   rx   r   r   r   r   r   r   r   r   r   r      s0    

r   )__doc__base.spiderr   sysrs   r,   rm   rq   urllib3disable_warnings
exceptionsInsecureRequestWarningpathr.   r   r   r   r   <module>   s    0