
    HCh%                         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 e j	        
                    d           d dlmZ  G d de          ZdS )    N)	b64decode	b64encodez..)Spiderc                       e Zd Zd dZd Zd Zd Zd Zd Zd Z	d	 Z
d!dZd Zd Zd"dZd Zd Zd Zd#dZd ZdefdZd$dZdefdZdS )%r    c                 h    d| _         d| j         dz   dd| _        d| _        d| _        dd	i| _        d S )
Nzhttps://www.eporner.comzsMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36/zzh-CN,zh;q=0.9,en;q=0.8)
User-AgentRefererzAccept-Language
      EPRNS1)hostheaderstimeoutretriescookies)selfextends     (   /storage/emulated/0/纯福利/PY1/epo.pyinitzSpider.init   sH    -	 Py38
 

 ~    c                     dS )Nu   EP涩 r   s    r   getNamezSpider.getName   s    wr   c                     dS )NTr   )r   urls     r   isVideoFormatzSpider.isVideoFormat   s    tr   c                     dS )NFr   r   s    r   manualVideoCheckzSpider.manualVideoCheck   s    ur   c                     d S Nr   r   s    r   destroyzSpider.destroy    s    r   c                 4    i }ddddddddddd	dg|d
<   |S )Nz	/cat/all/u   最新)type_id	type_namez/best-videos/u   最佳视频z/top-rated/u   最高评分z/cat/4k-porn/4Kclassr   )r   filterresults      r   homeContentzSpider.homeContent#   sE    #(;;'nEE%NCC'd;;	
w r   c                 H    i }|                      ddddd          }||d<   |S )Nall   latest0   )querypageordergayper_pagelist)_api_search)r   r,   videoss      r   homeVideoContentzSpider.homeVideoContent-   s4    !!AX3Y[!\\vr   c                     i }|                      |          } | j        d	dt          |          i|}||d<   ||d<   d|d<   t          |          pd|d<   d|d<   |S )
Nr5   r9   '  	pagecountr3   limit?B totalr   )_map_tid_to_apir:   intlen)r   tidpgr+   r   r,   paramsr;   s           r   categoryContentzSpider.categoryContent3   s{    %%c**!!99s2ww9&99vv"{f+++w wr   r   c                     i }|                      |pdt          |          dd          }||d<   ||d<   d|d<   t          |          pd	|d
<   d|d<   |S )Nr/   r1   r2   )r4   r5   r6   r7   r9   r5   r>   r?   r3   r@   rA   rB   )r:   rD   rE   )r   keyquickrG   r,   r;   s         r   searchContentzSpider.searchContent>   sl    !!u3r77(X[!\\vv"{f+++w wr   c                    i }|d         }|                     d          s
| j        |z   }|                     || j                  }|                     |j                  }|                    d          }|r/|d                             dd                                          }nRd	                    |                    d                    }t          j        dd|                                          pd	}|                    d
          p|                    d          }	|	r|	d         nd}
|                    d          p|                    d          }|r|d         nd}t          j        d|          }|r|                    d          nd}|                     |          }d| }|||
||                                d|d}|g|d<   |S )Nr   httpr   z%//meta[@property="og:title"]/@contentz
 - EPORNERr   z//h1//text()z\s*(\d+\s*min.*)$   爱看AVz%//meta[@property="og:image"]/@contentz//img[@id="mainvideoimg"]/@srcz$//meta[@name="description"]/@contentz+//meta[@property="og:description"]/@contentzDuration:\s*([0-9:]+)r0   u   播放$u   🍑Play)vod_idvod_namevod_picvod_remarksvod_contentvod_play_fromvod_play_urlr9   )
startswithr   fetchr   htmltextxpathreplacestripjoinresubsearchgroupe64)r   idsr,   r   rrootog_titletitleh1img_elem	thumbnail	meta_desc	desc_text	dur_matchdurationencoded_urlplay_urlvods                     r   detailContentzSpider.detailContentH   s   !f~~f%% 	")c/CJJsDLJ11yy  ::EFF 	OQK''b99??AAEEN3344BF/R88>>@@NJE::EFFv$**UuJvJv#+3HQKK	ZZ FGG  E4::  WD  LE  LE	$-5IaLL2	I6	BB	)2:9??1%%%hhsmm*[** #$??,,'$
 
 vr   c                 p    i }                      |          }|                    d          s
 j        |z   }                     | j                  }|j        }d}t          j        ||          }	|	r|	                                \  }
d	                     fdt          ddd          D                       } j         d	|
 d
| d}i  j        ddd}                     ||          }t          j        |j                  }|                    dd          r|                    di           }|                    di           }d }|rIt          |                                d d          }|d         }||                             d          }nt|                    d          }t!          |t"                    r|                    d          }n2t!          |t$                    r|r|d                             d          }d}|r$d|d<   ||d<    j        d         | j        dd|d<   |S )NrO   rP   z<vid\s*=\s*'([^']+)';\s*[\w*\.]+hash\s*=\s*['\"]([\da-f]{32})r   c           	   3   v   K   | ]3}                     t          ||d z            d          d          V  4dS )      $   N)encode_base_nrD   ).0ihash_valr   s     r   	<genexpr>z'Spider.playerContent.<locals>.<genexpr>t   sL       m mXY!3!3C1q58I24N4NPR!S!S m m m m m mr   r       rx   z/xhr/video/z?hash=zV&device=generic&domain=www.eporner.com&fallback=false&embed=false&supportedFormats=mp4XMLHttpRequestz.application/json, text/javascript, */*; q=0.01)X-Requested-WithAccept	availableTsourcesmp4c                 L    t          t          j        dd|           pd          S )Nz\Dr   r   )rD   ra   rb   )qs    r   <lambda>z&Spider.playerContent.<locals>.<lambda>   s%    #bfUZ\^`aNbNbNgfgJhJh r   )rK   reversesrchlsparser   r
   z*/*)r
   r   Originr   header)d64rY   r   rZ   r   r\   ra   rc   groupsr`   rangejsonloadsgetsortedkeys
isinstancedictr9   )r   flagidvipFlagsr,   r   rg   html_contentpatternmatchvid	hash_codexhr_urlxhr_headersrespdatasources_blockr   	final_urlquality_sortedbest_qualityr   r~   s   `                     @r   playerContentzSpider.playerContenti   s   hhrll~~f%% 	")c/CJJsDLJ11vQ	'<00 "	!LLNNMC m m m m m]bcdfhjk]l]l m m mnnI  \  \s  \  \)  \  \  \G,$4J  K
 ::g{:;;D:di((DxxT**  $B 7 7'++E266 	 
)%+GLLNN@h@hrv%w%w%wN#1!#4L ' 5 9 9% @ @II'++E22C!#t,, 6$'GGENN		#C.. 63 6$'FJJu$5$5	#(L &'F7O$-F5M&*l<&@#&"&)"'	( (F8$ r   Nc                     d}|s
|d |         }|t          |          k    r!t          d|t          |          fz            |dk    r|d         S d}|r|||z           |z   }||z  }||S )N>0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZzbase %d exceeds table length %dr   r   )rE   
ValueError)r   numntable
FULL_TABLErets         r   r{   zSpider.encode_base_n   s    U
 	#rrNEs5zz>>>!SZZPQQQ!888O 	a.3&C(C  	 
r   c                 h    t          |                                                                          S r$   )r   encodedecode)r   r\   s     r   re   z
Spider.e64   s$    ''..000r   c                 h    t          |                                                                          S r$   )r   r   r   )r   encoded_texts     r   r   z
Spider.d64   s(    ,,..//66888r   c                 8    ddl m} |                    |          S )Nr   )etree)lxmlr   HTML)r   contentr   s      r   r[   zSpider.html   s&    zz'"""r   c                    dd l }dd l}|j        |_        || j        }|| j        }t          | j        dz             D ]5}|                    |||dt          | dd                     }d|_
        |c S t          d          )Nr   r0   Fr   )r   r   verifyr   zutf-8zFetch failed)requestsssl_create_unverified_context_create_default_https_contextr   r   r   r   r   getattrencodingtimesleep	Exception)r   r   r   r   r   r   _r   s           r   rZ   zSpider.fetch   s    ,/,J)?lG?lGt|a'(( 	 	A<<Wge]deiktvz]{]{<||D#DMKKK'''r   c                    g }|                     d          }|D ]}|                     d          }|s| j        |d         z   }d                    |                     d                                                    }|                     d          }|r|d         nd}	d                    |                     d                                                    }
|                    ||pd|	|
d	           |S )
Nz*//div[contains(@class, "mb") and @data-id]z&.//a[contains(@href, "/video-")]/@hrefr   r   z'.//p[contains(@class, "mbtit")]//text()z.//img/@srcz(.//span[contains(@class,"mbtim")]/text()rQ   rR   rS   rT   rU   )r]   r   r`   r_   append)r   rh   r;   itemsitemlinkrR   rj   imgrm   rq   s              r   _parse_video_listzSpider._parse_video_list   s	   

GHH 	 	D::FGGD Ya(FGGDJJ'PQQRRXXZZE**]++C"%-A2Iwwtzz*TUUVV\\^^HMM !/Z$'	      r   rF   c                 R   ddddd}|pd                     d                                          }|                    d          rd	|d
<   n[|                    d          rd|d
<   n@|                    d          rd|d<   n%|                    d          rd|d<   d|d
<   nd|d<   |S )Nr/   r1   r2      )r4   r6   r7   r8   r   r	   zbest-videoszmost-popularr6   z	top-ratedzcat/4k-porn4kr4   zcat/gay2r7   )r_   lowerrY   )r   rF   rH   ts       r   rC   zSpider._map_tid_to_api   s     8CRPPYBc""((**<<&& 
	 ,F7OO\\+&& 	 )F7OO\\-(( 	 "F7OO\\)$$ 	 F5M&F7OOF5Mr   r/   r0   r1   r2   r   mediumc                     | j          d}|||||dd}|||d<   |dz   t          j                            |          z   }	|                     |	i | j        ddi          }
t          j        |
j                  }| 	                    |          S )	Nz/api/v2/video/search/r   )r4   r8   r5   	thumbsizer6   formatr7   ?r   r   rP   )
r   urllibr   	urlencoderZ   r   r   r   r\   _parse_api_list)r   r4   r5   r6   r7   r8   r   baser   r   rg   r   s               r   r:   zSpider._api_search   s    )222 "
 
 ?AeHSj6<11!444JJs$Zt|$Z5GIY$Z$ZJ[[z!&!!##D)))r   r   c                    g }|pi                      dg           D ]}|                     d          pd}|                     d          pd}|                     d          pi                      d          pd}|                     d          pd}|                    |                    d          r|n	| j        |z   |pd	||d
           |S )Nr;   r   r   rj   default_thumbr   
length_minrO   rQ   r   )r   r   rY   r   )r   r   r;   vvurlrj   thumbremarkss           r   r   zSpider._parse_api_list   s    *"!!(B// 
	 
	A55<<%2DEE'NN(bEUU?++1r66u==CEeeL))/RGMM"&//&"9"9Q$$	D@P!/Z &	      r   )r   )r   r$   )NN)r/   r0   r1   r2   r   r   )__name__
__module____qualname__r   r   r    r"   r%   r-   r<   rI   rM   ru   r   r{   re   r   r[   rZ   r   strrC   r:   r   r   r   r   r   r   r      ss       	& 	& 	& 	&            	 	 	     B, , ,\   1 1 19 9 9# # #( ( ( (  (3     * * * *"D      r   r   )sysr   r   ra   urllib.parser   base64r   r   pathr   base.spiderr   r   r   r   <module>r      s    



   				     ' ' ' ' ' ' ' '          t t t t tV t t t t tr   