
    4i	'                     l    d dl Z d dlZd dlmZ d dlZd dlmZ  G d d          Z	 G d de          ZdS )    N)Spider)BeautifulSoupc                   R    e Zd ZdZededefd            Zededefd            ZdS )VideoDecryptoru   XOR 128 解密textreturnc                 \    | sdS 	 d                     d | D                       S #  | cY S xY w)N c              3   T   K   | ]#}t          d t          |          z            V  $dS )   N)chrord).0cs     1   /storage/emulated/0/纯福利/py1/神秘影院.py	<genexpr>z)VideoDecryptor.decrypt.<locals>.<genexpr>   s4      ;;3sSVV|,,;;;;;;    )join)r   s    r   decryptzVideoDecryptor.decrypt   sG     	2	77;;d;;;;;;	KKKs   % +jsc                     t          j        d|           x}r-t                              |                    d                    ndS )Nz!document\.write\(l\('([^']+)'\)\)   r
   )researchr   r   group)r   ms     r   from_jszVideoDecryptor.from_js   s>    ;=9Eikm;n;n6naw~%%aggajj111uwwr   N)__name__
__module____qualname____doc__staticmethodstrr   r    r   r   r   r   
   s|        c c    \ xC xC x x x \x x xr   r   c                   l    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 Zd Zd Zd ZdS )r   r
   c                 ^    d| _         d| _        d| _        d| j         dd| _        i | _        d S )Nzhttps://h4ivs.sm431.vipzhttps://m3u8.nl:88zhttps://3334.nl:33zMozilla/5.0 (Linux; Android 13; 22127RK46C Build/TKQ1.220905.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/104.0.5112.97 Mobile Safari/537.36zzh-CN,zh;q=0.9)
User-AgentRefererzAccept-Language)host
video_host
image_hostheaderscache)selfextends     r   initzSpider.init   s@    -	.. y/
 

 


r   c                     	 t          j        || j        d          }|                                 d|_        |j        S #  Y dS xY w)N   )r,   timeoututf-8r
   )requestsgetr,   raise_for_statusencodingr   )r.   urlrs      r   r6   z
Spider.get'   sO    	S$,CCCA    AJ6M	22s   =A   Ac                     |sdS |                     d          rd|z   }n|                     d          r
| j        |z   }| d| j        d          d| j         dS )u   格式化图片URLr
   z//zhttps:/z@User-Agent=r'   z	@Referer=)
startswithr+   r,   r)   r.   r9   s     r   img_urlzSpider.img_url0   sv     	2>>$ 	(S.CC^^C   	(/C'CTT4<#=TT	TTTTr   c                    |j         dk    r|n|                    d          }|r|                    dd          x}sdS |                    d          r
| j        |z   n|}t          j        d|          x}sdS |                    d          }d}|                    d          x}rU|                    d	          x}r&|j        rt          
                    |j                  }|p|                    d
          }|sWdD ]T}|                    |          r=||         x}	r3t                              |	          x}
rt          |
          dk    r|
} nU|pd}|dk    r
|| j        |<   d}|                    d          x}r,|                    d          p|                    d          pd}|p| j         d| d}|||                     |          ddS )u   解析卡片ahrefr
   Nr<   z
/vid/(\d+)r   pscriptTstrip)z
data-titlez	data-nametitle      未知标题imgdata-srcsrc.jpgvod_idvod_namevod_picvod_remarks)namefindr6   r=   r)   r   r   r   stringr   r   get_texthas_attrr   lenr-   
select_oner+   r?   )r.   elrA   rB   vidrG   rC   sattrvalderJ   nodes                r   parsezSpider.parse:   s   'S..BBbggcll 	vr!2!22 	4#'??3#7#7Aty4Ty555 	4iill 1 	4FF8$$$q =8 =*2218<<E3QZZdZ33E 	<  ;;t$$ D/# ,44S999 s2ww{{ "'N""#DJsO =='''4 	@((:&&?$((5//?RC333#333 ||C((	
 
 	
r   c                    || j         v r| j         |         S |                     | j                  x}rt          |d          }|                    d          D ]}d| |                    dd          v r|                    d          x}rs|                    d          x}r6|j        r/t                              |j                  x}r|| j         |<   |c S |	                    d	          x}r|| j         |<   |c S d
S )u   从缓存或首页获取标题html.parserza[href*="/vid/"]/vid/rB   r
   rC   rD   TrE   N)
r-   r6   r)   r   selectrT   rU   r   r   rV   )r.   r[   htmlsouplinkrC   r\   ts           r   	get_titlezSpider.get_titlef   s   $*:c?"88DI&&&4 	% }55D$677 	% 	% 3==DHHVR$8$888 IIcNN*q % !x 0 001 ) x ).2H2H2R2R-RQ )23
3'( !


 6 661 %./DJsO#$HHHtr   c           	      :    ddddddddddd	d
dddddddgiS )Nclassu   国产1)	type_nametype_idu   日本2u   韩国3u   欧美4u   三级5u   动漫6r$   )r.   filters     r   homeContentzSpider.homeContenty   sV    &377&377&377&377&377&377	
 		
r   c                                            j                  x}sdg iS t          |d          }d  fd|                    d          D             D             }|s! fdt	          j        d|          D             }d|iS )Nlistrc   c                     g | ]}||S r$   r$   r   vs     r   
<listcomp>z+Spider.homeVideoContent.<locals>.<listcomp>   7      L  L  L  JK  L!  L  L  Lr   c              3   B   K   | ]}                     |          V  d S Nra   r   rZ   r.   s     r   r   z*Spider.homeVideoContent.<locals>.<genexpr>   E        F  Fdjjnn  F  F  F  F  F  Fr   >.vodbox, .stui-vodlist__box, .vodlist__box, .video-card, .itemc           
      Z    g | ]'}|d                      j         d| d          dd(S rI   r<   rM   r
   rN   r?   r+   r   r{   r.   s     r   r|   z+Spider.homeVideoContent.<locals>.<listcomp>   h     L L L "#4<<[_[jXtXtmnXtXtXtKuKu  GI  J  J L L Lr   \[]\(/vid/(\d+)\.html\))r6   r)   r   re   r   findall)r.   rf   rg   videoss   `   r   homeVideoContentzSpider.homeVideoContent   s    +++ 	 B<T=11 L  L  F  F  F  Ft{{  DD  8E  8E  F  F  F  L  L  L 	LL L L L j)CTJJL L LF r   c                 b   
 |dk    r(t          |          dk    r j        n j         d| d}n0t          |          dk    r j         d| dn j         d| d| d}                     |          x}sg |dddd	S t          |d
          }d  fd|                    d          D             D             }|s! fdt          j        d|          D             }t          
fd|                    d          D             t          |                    }	||t          |	d          ddd	S )N0r   z/page/.htmlz/list/r<      r   rx   page	pagecountlimittotalrc   c                     g | ]}||S r$   r$   rz   s     r   r|   z*Spider.categoryContent.<locals>.<listcomp>   r}   r   c              3   B   K   | ]}                     |          V  d S r   r   r   s     r   r   z)Spider.categoryContent.<locals>.<genexpr>   r   r   r   c           
      Z    g | ]'}|d                      j         d| d          dd(S r   r   r   s     r   r|   z*Spider.categoryContent.<locals>.<listcomp>   r   r   r   c           	          g | ]O}t          j        d |                    dd                    x-t                              d                    PS )z/list/\d+/(\d+)\.htmlrB   r
   r   r   r   r6   intr   r   rA   r   s     r   r|   z*Spider.categoryContent.<locals>.<listcomp>   s      O  O  OVXV_`xz{zz  AG  IK  {L  {L  WM  WM  RMQR  OC

OO  O  O  Or   za[href*='list/']default韆 )r   r)   r6   r   re   r   r   max)r.   tidpgru   r/   r9   rf   rg   r   lastr   s   `         @r   categoryContentzSpider.categoryContent   s   #::"2ww!||$))DI1N1NR1N1N1NCC47GGqLLTY00c0000FiFiZ]FiFi`bFiFiFiC% 	URRSTTTT=11 L  L  F  F  F  Ft{{  DD  8E  8E  F  F  F  L  L  L 	LL L L L j)CTJJL L LF   O  O  O  OT[[9K-L-L  O  O  O  Y\  ]_  Y`  Y`  a  a  aT1PR]bcccr   rm   c                      j          d}d|i}t          |          dk    r||d<   d}t          j        t          j        fD ]f}	  |||t          j        k    r|nd |t          j        k    r|nd  j        d          }|                                 d|_        |j        } n#  Y dxY w|sd	g iS t          |d
          }	d  fd|	
                    d          D             D             }
|
s! fdt          j        d|          D             }
t          fd|	
                    d          D             t          |                    }|
|t          |d          dddS )Nz/so.htmlwdr   r   r
   r2   )paramsdatar,   r3   r4   rx   rc   c                     g | ]}||S r$   r$   rz   s     r   r|   z(Spider.searchContent.<locals>.<listcomp>   r}   r   c              3   B   K   | ]}                     |          V  d S r   r   r   s     r   r   z'Spider.searchContent.<locals>.<genexpr>   r   r   r   c           
      Z    g | ]'}|d                      j         d| d          dd(S r   r   r   s     r   r|   z(Spider.searchContent.<locals>.<listcomp>   r   r   r   c           	          g | ]O}t          j        d |                    dd                    x-t                              d                    PS )z[?&]page=(\d+)rB   r
   r   r   r   s     r   r|   z(Spider.searchContent.<locals>.<listcomp>   sd     N N NI&7vr9J9JKKKqNC

OO N N Nr   z-a[href*='so.html'], .pagination a, .page-linkr   r   r   r   )r)   r   r5   r6   postr,   r7   r8   r   r   re   r   r   r   )r.   keyquickr   r9   r   rf   methodr:   rg   r   r   r   s   `           @r   searchContentzSpider.searchContent   s   $$$r77Q;;F6N|X]3 
	 
	F	F38<1G1GvvT)/8=)@)@vvd"&,< < < ""$$$$
v 	 B<T=11 L  L  F  F  F  Ft{{  DD  8E  8E  F  F  F  L  L  L 	LL L L L j)CTJJL L LF  N N N NT[[9h-i-i N N NWZ[]W^W^` ` ` T1PR]bcccs   AB##B'c           	      4   |d         }|                      | j         d| d          x}sdg iS t          |d          }|                     |          }|s|                    d          x}r<t          j        dd|                    d	
                                                    }|rt          |          dk     rKdD ]H}|
                    |          x}r/|                    d	
          x}	rt          |	          dk    r|	} nI|pd| }d}
dD ]_}|
                    |          x}rF|                     d          p|                     d          x}rd|                                vr|}
 n`|
rd|
                                v r-|
                    d          x}r|                     dd          }
|
p| j         d| d}
|
                    d          }|r|                    d	
          nd}d|||                     |
          |dd| ddgiS )Nr   rd   r   rx   rc   rG   z\s*[-_|]\s*.{0,20}$r
   TrE      )h1h2z.video-titlez.titleu   视频)z.picbox imgz.vodimg imgz.video-pic imgz.poster imgzimg[data-id]rK   rL   faviconzmeta[property="og:image"]contentr<   rM   z5.vodinfo, .video-info, .content, .intro, .descriptionu   七哥比较瑟u   狗哥特别瑟$z@@0@@1)rO   rP   rQ   vod_contentvod_play_fromvod_play_url)r6   r)   r   rj   rT   r   subrV   rF   rX   rY   lowerr+   r?   )r.   idsr[   rf   rg   rG   ri   selrZ   txtpicr`   rC   metadescs                  r   detailContentzSpider.detailContent   s   !fDI!>!>C!>!>!>??? 	 B<T=11 s## 	IIg&&&q [5r1::D:;Q;QRRXXZZ CJJNNA  C"ooc222 RV@W@W9W ]`ad]e]ehi]i]i #'# b 	 	C,,, 8L8L8_PTPXPXY^P_P_3_1 envwv}v}vvee 	.i399;;..'BCCCt .hhy"--333#333 VWW,08t}}4}(((b||C((.:s:::
 
   	r   c                 d    |                     d          d         }d| j         d| d| j        dS )Nz@@r   r<   z/hls/index.m3u8)ra   r9   header)splitr*   r,   )r.   flagidvipFlagsr[   s        r   playerContentzSpider.playerContent   s=    hhtnnQdo#L#L#L#L#LX\Xdeeer   c                     dddS )Ni  r
   )coder   r$   )r.   params     r   
localProxyzSpider.localProxy   s    +++r   c                 .    d|                                 v S )Nz.m3u8)r   r>   s     r   isVideoFormatzSpider.isVideoFormat   s    #))++%%r   c                     d S r   r$   r.   s    r   manualVideoCheckzSpider.manualVideoCheck      r   c                     d S r   r$   r   s    r   destroyzSpider.destroy  r   r   N)r
   )rm   )r   r   r    r0   r6   r?   ra   rj   rv   r   r   r   r   r   r   r   r   r   r$   r   r   r   r      s       	 	 	 	  U U U*
 *
 *
X  &

 

 

     d d d( d  d  d  dD- - -^f f f, , ,& & &      r   r   )
r   urllib.parseurllibbase.spiderr   	BaseSpiler5   bs4r   r   r$   r   r   <module>r      s    
			     + + + + + +       x x x x x x x x k k k k kY k k k k kr   