
    -#iA                         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Zd dl	Z	d dl
mZ d dlmZ ej                            d           d dlmZ  G d de          ZdS )    N)BytesIO)PyQueryz..)Spiderc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zi i dZdddZd ZdS )r   c                 x    d| _         |                                 | _        |                                 | _        d S )N   黄色仓库)namegetDynamicHosthostpreprocessClassesclassesselfs    1   /storage/emulated/0/纯福利/PY1/黄色仓库.py__init__zSpider.__init__   s3    "	''))	--//    c                     | j         S N)r	   r   s    r   getNamezSpider.getName   s
    yr   c                 H   	 t          j        d                              d          }t          j        || j                  }|j        }t          j        d|          }|s|S |	                    d          }||
                    d          z   dz   }t          j        || j        d	          }d
|j        v r|j        d
         S 	 |                                }|                    d
|          S #  |cY S xY w# t          $ r}	t          d|	            Y d}	~	dS d}	~	ww xY w)u   动态获取主机地址aHR0cDovL2hzY2submV0zutf-8)headerszstrU="(.*?)"   /z/&p=/F)r   allow_redirectslocationu   获取动态主机失败: Nzhttp://6590ck.cc/)base64	b64decodedecoderequestsgetheadertextresearchgrouprstripr   json	Exceptionprint)
r   initial_hostresponsehtml
strU_matchstrU	locationUredirect_responsedataes
             r   r
   zSpider.getDynamicHost   sV   	'!+,BCCJJ7SSL  |L$+FFFH=D ?D99J $####A&&D|223777'AI !)Y]b c c c.666(0<<(,1133D88J===('''' 	' 	' 	'2q22333&&&&&&	's7   A!C: $A!C: )C1 1C75C: 7C: :
D!DD!c                 ^    ddddddddd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S )u   预处理分类数据u   日韩AV1)	type_nametype_idu   国产系列2u   欧美3u   成人动漫4u   日本有码7u   一本道高清无码8u   有码中文字幕9u   日本无码10u   国产视频15u   欧美高清21u   动漫剧情22 r   s    r   r   zSpider.preprocessClasses;   s     %55(S99"s33(S99(S991cBB.3??(T::(T::(T::(T::
 	
r   c                     d S r   rB   )r   extends     r   initzSpider.initK       r   c                     d S r   rB   r   urls     r   isVideoFormatzSpider.isVideoFormatN   rF   r   c                     d S r   rB   r   s    r   manualVideoCheckzSpider.manualVideoCheckQ   rF   r   c                     i }| j         |d<   |S )Nclass)r   )r   filterresults      r   homeContentzSpider.homeContentT   s    ,wr   c                    i }	 | j                             d           d}|                     |          }t          |j                  }g } |d          }|                                D ]}|                    d                              d          }|r|                    d          sB|                    d                                          }	|                    d                              d          }
|                    d                                          }|	r|
s|	                    ||	| 
                    |
          |d	           ||d
<   n.# t          $ r!}t          d|            g |d
<   Y d}~nd}~ww xY w|S )u   推荐内容r   .stui-vodlist liahref	/vodplay/h4data-original	.pic-textvod_idvod_namevod_picvod_remarkslistu   获取推荐内容失败: N)r   r'   fetchpqr#   itemsfindattr
startswithappend
getFullUrlr)   r*   )r   rP   rI   rsprootvideos
list_itemsitemvidr	   imgremarkr3   s                r   homeVideoContentzSpider.homeVideoContentY   s   	 Y%%c**---C**S//Cch<<DF011J"((**  iinn))&11 #.."="= yy++--iinn))/::;//4466 3 ! $#s33#)	      $F6NN 	  	  	 2q22333F6NNNNNN	  s   EE 
F&FFc                    i }	 | j                             d           d| d| d}|                     |          }t          |j                  }g }	 |d          }
|
                                D ]}|                    d                              d          }|r|                    d          sB|                    d	                                          }|                    d                              d
          }|                    d                                          }|r|s|		                    ||| 
                    |          |d           |	|d<   t          |          |d<   d|d<   d|d<   d|d<   nB# t          $ r5}t          d|            g |d<   d|d<   d|d<   d|d<   d|d<   Y d }~nd }~ww xY w|S )Nr   z	/vodtype/-z.htmlrS   rT   rU   rV   rW   rX   rY   rZ   r_   pagei'  	pagecount   limiti?B totalu   获取分类内容失败: r   r   )r   r'   r`   ra   r#   rb   rc   rd   re   rf   rg   intr)   r*   )r   tidpgrO   rD   rP   rI   rh   ri   rj   rk   rl   rm   r	   rn   ro   r3   s                    r   categoryContentzSpider.categoryContent~   s   '	 Y%%c**DDSDD2DDDC**S//Cch<<DF011J"((**  iinn))&11 #.."="= yy++--iinn))/::;//4466 3 ! $#s33#)	      $F6N WWF6N"&F;F7O$F7OO 	  	  	 2q22333F6NF6N"#F;F7OF7OOOOOO	  s   E>F 
G+F==Gc                     g }t          d           g d}|D ]8}t          j        ||t          j                  }|r	 |                    d          }t          d|dd          d           |                    dd	          }t          j        |          }|                    d
          }|rtd|v rpt          d|            |	                    d          s0|	                    d          rd|z   }n| 
                    |          }|                    |           |c S # t          $ r}	t          d|	            Y d}	~	0d}	~	ww xY w:g d}
|
D ]}t          j        ||          }|D ]|}d|v rv||vrrt          d|            |	                    d          s0|	                    d          rd|z   }n| 
                    |          }|                    |           |c c S }t          d           |S )u%   专门提取m3u8播放链接的方法u   开始提取m3u8链接...)z var\s+player_aaaa\s*=\s*({.*?});zplayer_aaaa\s*=\s*({.*?});z,var\s+player_aaaa\s*=\s*({.*?})\s*<\/script>z&player_aaaa\s*=\s*({.*?})\s*<\/script>r   u   找到player_aaaa数据: N   z...z\/r   rI   .m3u8u   从player_aaaa提取到m3u8: http//https:u   解析player_aaaa失败: )z "url"\s*:\s*"([^"]+\.m3u8[^"]*)"zurl\s*:\s*"([^"]+\.m3u8[^"]*)"zsrc\s*:\s*"([^"]+\.m3u8[^"]*)"zfile\s*:\s*"([^"]+\.m3u8[^"]*)"z%https?://[^\s"\'<>]+\.m3u8[^\s"\'<>]*u   从正则匹配提取到m3u8: u   未找到m3u8播放链接)r*   r$   r%   DOTALLr&   replacer(   loadsr!   re   rg   rf   r)   findall)r   script_text	m3u8_urlsplayer_patternspatternplayer_matchplayer_data_strplayer_datam3u8_urlr3   m3u8_patternsmatchesmatchs                r   extractM3U8UrlzSpider.extractM3U8Url   s   	)***
 
 
 ' 	; 	;G9Wk29EEL ;;&2&8&8&;&;OPodsd6KPPPQQQ '6&=&=eS&I&IO"&*_"="=K*u55H 	)Gx$7$7HhHHIII'226:: E'22488 E+3h+>+/??8+D+D!((222((((  ; ; ;9a99::::::::;+;2
 
 
 % 	% 	%Gj+66G  
% 
%e##Y(>(>B5BBCCC ++F33 ; ++D11 ;$,u$4EE$(OOE$:$:E$$U+++$$$$$$
% 	)***s   C"D&&
E0EEc           	         i }	 |d         }|                     d          s|                     |          }t          d|            |                     |          }t	          |j                  } |d                                          }|s6 |d                                                              d          d         } |d                              d          p |d                              d	          }|s |d
                              d	          } |d                                          }|                     |          }	g }
|	r4t          |	          D ]#\  }}|

                    d|dz    d|            $nt          d            |d                              d	          }|rGd|v rC|                     d          s|                     |          }|

                    d|            n|

                    d|            |d         ||r|                     |          nd|dd                    |
          d}|g|d<   t          d|d                     n]# t          $ rP}t          d|            ddl}|                                 |d         ddddd|d          dg|d<   Y d}~nd}~ww xY w|S )uH   二级详情页面解析 - 修复播放链接提取及简介使用标题r   r   u   开始解析详情页面: z.stui-pannel__head .titletitlez - z.stui-vodlist__thumbrX   srcrn   scriptu   线路r   $u0   尝试从页面其他位置提取播放链接...iframem3u8u   iframe线路$u   详情页线路$ r   #)r[   r\   r]   vod_contentvod_play_fromvod_play_urlr_   u&   详情页解析完成，播放链接: r   u   解析详情页面失败: Nu   未知标题u   默认线路)re   rg   r*   r`   ra   r#   splitrd   r   	enumeraterf   joinr)   	traceback	print_exc)r   arrayrP   rm   rh   ri   r   picr   r   	play_urlsir   
iframe_srcvodr3   r   s                    r   detailContentzSpider.detailContent   se   E	(C>>&)) +ooc**4s44555**S//Cch<<D D455::<<E =W**,,22599!< $-..33ODDpMcHdHdHiHijoHpHpC .d5kk&&u-- $x..--//K ++K88I I ?#,Y#7#7 @ @KAx$$%>ac%>%>H%>%>????@ HIII!T(^^0077
 ?&J"6"6%0088 A%)__Z%@%@
$$%AZ%A%ABBBB $$%=%=%=>>>  (!36>4??3///B$!/ # 3 3 C "UF6NP3~;NPPQQQQ 	 	 	2q22333!!!  (*!!/ =58 = =  F6NNNNNN	 s   I-I2 2
K<AKKc                 V   i }	 | j                             d           dt          j                            |           }|                     |          }t          |j                  }g } |d          }|                                D ]}	|		                    d          
                    d          }
|
r|
                    d          sB|		                    d                                          }|		                    d          
                    d          }|		                    d	                                          }|r|s|                    |
||                     |          |d
           ||d<   n.# t          $ r!}t          d|            g |d<   Y d }~nd }~ww xY w|S )Nr   z!/vodsearch/-------------.html?wd=rS   rT   rU   rV   rW   rX   rY   rZ   r_   u   搜索失败: )r   r'   urllibparsequoter`   ra   r#   rb   rc   rd   re   rf   rg   r)   r*   )r   keyquickrP   
search_urlrh   ri   rj   rk   rl   rm   r	   rn   ro   r3   s                  r   searchContentzSpider.searchContent9  s   	  I,,S11mmTZT`TfTfgjTkTkmmJ**Z((Cch<<DF011J"((**  iinn))&11 #.."="= yy++--iinn))/::;//4466 3 ! $#s33#)	      $F6NN 	  	  	 &1&&'''F6NNNNNN	  s   E6E; ;
F&F!!F&c                    i }	 t          d| d|            |                    d          r1d|v r-d|d<   d|d<   ||d	<   | j        |d
<   t          d|            |S d|v rj|                    d          }|D ]R}d|v rL|                    dd          \  }}d|v r/d|d<   d|d<   ||d	<   | j        |d
<   t          d|            |c S St          d|            |                     |g          }	|	rd|	v r |	d         r|	d         d         }
|
                    dd          }t          d|            d|v rj|                    d          }|D ]R}d|v rL|                    dd          \  }}d|v r/d|d<   d|d<   ||d	<   | j        |d
<   t          d|            |c S S|rR|d         }d|v rF|                    dd          \  }}d|d<   d|d<   ||d	<   | j        |d
<   t          d|            |S t          d           i S # t          $ r6}t          d|            ddl}|                                 i cY d}~S d}~ww xY w)u-   播放页面解析 - 修复数组越界问题u   playerContent被调用: flag=z, id=r   r~   r   r   r   playUrlrI   r"   u   直接返回m3u8链接: r   r   r   u   从播放线路提取到m3u8: u!   重新解析详情页获取m3u8: r_   r   u#   从详情页获取的播放链接: u   最终提取到m3u8: u   使用第一个播放源: u*   无法提取播放链接，返回空结果u   解析播放页面失败: N)	r*   re   r"   r   r   r!   r)   r   r   )r   flagidvipFlagsrP   play_sourcessource_rI   detail_resultr   play_urlfirst_sourcer3   r   s                  r   playerContentzSpider.playerContent^  s=   E	A$AARAABBB }}V$$ B"#w$&y! "u#';x 555666 byy!xx}}* 	* 	*Ff}}!'c1!5!53"c>>./F7O02F9-,/F5M/3{F8,!"H3"H"HIII#)MMM :b::;;; ..t44M &=!8!8]6=R!8#F+A.77>266FHFFGGG (??#+>>##6#6L". 	. 	.&==%+\\#q%9%9FAs&#~~23w46y 103u37;x 0 %&Cc&C&C D D D'-   	&#/?Ll**!-!3!3C!;!;3*+w,.y)(+u+/;x(@3@@AAA% >???I 	 	 	2q22333!!!IIIIII		s9   AH A,H CH (AH =H 
I+I	I	Ic                     |sdS |                     d          r|S |                     d          rd| S | j                            d           | S )u   获取完整的URLr   r   r   r   r   )re   r   r'   rH   s     r   rg   zSpider.getFullUrl  si     	2>>&!! 	J>>$ 	"!C>>!)""3''....r   )playerrO   zMozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1zhttps://hsck123.com/)z
User-AgentRefererc                 
    i }|S r   rB   )r   paramactions      r   
localProxyzSpider.localProxy  s    r   N)__name__
__module____qualname__r   r   r
   r   rE   rJ   rL   rQ   rp   r{   r   r   r   r   rg   configr"   r   rB   r   r   r   r      s=       0 0 0
   '  '  'D
 
 
         
# # #J+ + +Z@ @ @DJ J JX# # #JH H HT/ / /  F
 `) F
    r   r   )r$   sysurllib.parser   	threadingtimer    r   gzipr(   ior   pyqueryr   ra   pathrf   base.spiderr   rB   r   r   <module>r      s    				 



                    ! ! ! ! ! !          m m m m mV m m m m mr   