
    %'i=                         d dl Z d dlZd dlmZ d dlZd dlZd dlmZ e j                  j                  d       d dl
mZ  G d de      Zy)    N)etree)	urlencodez..)Spiderc                   f    e Zd Zd ZddZd Zd Zd Zd Zd Z	d Z
dd
Zd ZddZd Zd Zd Zy	)r   c                 :    d| _         dddddd| _        d| _        y )	Nzhttps://www.nivod.cczoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36zhttps://www.nivod.cc/zUtext/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8zzh-CN,zh;q=0.9z
keep-alive)z
User-AgentRefererAcceptzAccept-Language
Connectionz?https://image.tmdb.org/t/p/w600_and_h900_bestv2/placeholder.jpg)home_urlheadersplaceholder_picselfs    )   /storage/emulated/0/lz/py/sy/泥视频.py__init__zSpider.__init__   s/    . L.m/&
  a    c                      y N )r   extends     r   initzSpider.init       r   c                      y)Nu   泥視頻.CCr   r   s    r   getNamezSpider.getName   s    r   c                     g S r   r   r   s    r   getDependencezSpider.getDependence    s    	r   c                 J    |j                  d      xs |j                  d      S )Nz.m3u8z.mp4)endswith)r   urls     r   isVideoFormatzSpider.isVideoFormat#   s    ||G$<V(<<r   c                      y)NFr   r   s    r   manualVideoCheckzSpider.manualVideoCheck&   s    r   c                 v   d}|j                  d      D cg c]+  }|j                  d      d   |j                  d      d   d- }}ddd	j                  d      D cg c]+  }|j                  d      d   |j                  d      d   d
- c}ddddj                  d      D cg c]+  }|j                  d      d   |j                  d      d   d
- c}ddddD cg c]  }||d
	 c}dgdddj                  d      D cg c]+  }|j                  d      d   |j                  d      d   d
- c}ddddj                  d      D cg c]+  }|j                  d      d   |j                  d      d   d
- c}ddddD cg c]  }||d
	 c}dgdddj                  d      D cg c]+  }|j                  d      d   |j                  d      d   d
- c}ddddj                  d      D cg c]+  }|j                  d      d   |j                  d      d   d
- c}ddddD cg c]  }||d
	 c}dgdddj                  d      D cg c]+  }|j                  d      d   |j                  d      d   d
- c}ddddj                  d      D cg c]+  }|j                  d      d   |j                  d      d   d
- c}ddddD cg c]  }||d
	 c}dgd}||r|dS i dS c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )Nu2   電影$movie#電視劇$tv#綜藝$show#動漫$anime#$   r   )type_id	type_nameclassu   剧情u   冒险$mao-xian#剧情$ju-qing#动作$dong-zuo#同性$tong-xing#喜剧$xi-ju#奇幻$qi-huan#恐怖$kong-bu#悬疑$xuan-yi#惊悚$jing-song#战争$zhan-zheng#歌舞$ge-wu#灾难$zai-nan#爱情$ai-qing#犯罪$fan-zui#科幻$ke-huan)nv)keynamevalueareau   地区uM   大陆$cn#香港$hk#台湾$tw#欧美$west#泰国$th#新马$sg-my#其他$otheryearu   年份)202520242023202220212020z	2019-2010	2009-2000   90年代   80年代   更早u   剧情$ju-qing#动作$dong-zuo#历史$li-shi#历险$mao-xian#古装$gu-zhuang#同性$tong-xing#喜剧$xi-ju#奇幻$qi-huan#家庭$jia-ting#悬疑$xuan-yi#惊悚$jing-song#战争$zhan-zheng#武侠$wu-xia#爱情$ai-qing#科幻$ke-huan#罪案$zui-anuT   大陆$cn#香港$hk#台湾$tw#日本$jp#韩国$kr#欧美$west#泰国$th#新马$sg-my)r1   r2   r3   r4   r5   r6   z	2019-2015z	2014-2010r7   r8   r9   r:   uK   搞笑$gao-xiao#音乐$yin-yue#真人秀$zhen-ren-xiu#脱口秀$tuo-kou-xiuu,   大陆$cn#韩国$kr#欧美$west#其它$otheru   冒险$mao-xian#动画电影$movie#推理$tui-li#校园$xiao-yuan#治愈$zhi-yu#泡面$pao-mian#热血$re-xue#科幻$ke-huan#魔幻$mo-huanu   大陆$cn#日本$jp#欧美$west)movietvshowanime)r)   filters)split)r   filter
categoriesr+   
class_listr?   s         r   homeContentzSpider.homeContent)   s?   I
ZdZjZjknZopZoUV!''#,q/QPZo
p    t[  ta  ta  be  tf  =g  tfno1773<PQ?YZY`Y`adYefgYh=i  tf  =g  h  sB  sH  sH  IL  sM  <N  sMmn!''#,q/XYX_X_`cXdefXg<h  sM  <N  O  WC  <D  WCQR!!<L  WC  <D  E    tl  tr  tr  sv  tw  =x  twno1773<PQ?YZY`Y`adYefgYh=i  tw  =x  y  sI  sO  sO  PS  sT  <U  sTmn!''#,q/XYX_X_`cXdefXg<h  sT  <U  V  WP  <Q  WPQR!!<L  WP  <Q  R    tA  tG  tG  HK  tL  =M  tLno1773<PQ?YZY`Y`adYefgYh=i  tL  =M  N  sa  sg  sg  hk  sl  <m  slmn!''#,q/XYX_X_`cXdefXg<h  sl  <m  n  WP  <Q  WPQR!!<L  WP  <Q  R    tA  tG  tG  HK  tL  =M  tLno1773<PQ?YZY`Y`adYefgYh=i  tL  =M  N  sT  sZ  sZ  [^  s_  <`  s_mn!''#,q/XYX_X_`cXdefXg<h  s_  <`  a  WP  <Q  WPQR!!<L  WP  <Q  R!
, $6JJrJJ/ q =g <N <D =x <U <Q =M <m <Q =M <` <QsM   0K:0K?&0L
 L	0L
0L	L/0L80L"2L'0L,!0L1L6c                    dg i}	 t        j                  | j                  | j                        }d|_        t        j                  |j                        }|j                  d      }|D ]  }|j                  d      }|r|d   j                         nd }|s(|j                  d      }|r|d   j                         nd}|j                  d	d
      }|j                  d      }	|	r|	d   n| j                  }
|
j                  d      r| j                  |
z   }
|j                  d      }|r|d   j                         nd
}|d   j                  |||
|d        |d   d d |d<   |S # t        $ r}t        d|        Y d }~|S d }~ww xY w)Nlistr   utf-8z-//div[contains(@class, "qy-mod-link-wrap")]/a4.//picture[@class="video-item-preview-img"]/img/@altr   ./@title   未知href 4.//picture[@class="video-item-preview-img"]/img/@src/z0.//span[contains(@class, "qy-mod-label")]/text()vod_idvod_namevod_picvod_remarks
   zError in homeVideoContent: )requestsgetr   r   encodingr   HTMLtextxpathstripr   
startswithappend	Exceptionprint)r   resultresroot	data_listi
name_nodesrR   rQ   	pic_nodesrS   remark_nodesrT   es                 r   homeVideoContentzSpider.homeVideoContentD   s   "	5,,t}}dllCC"CL::chh'D

#RSIWW%[\
4>:a=..0D wwz2H6>x{002HHvr*GG$Z[	*3)A,9M9M%%c*"mmg5G ww'YZ9El1o3352v%%$ (&#.	'  & $F^CR0F6N   	5/s344	5s   EE% %	F.FFNc                    |xs |xs i }dg i}|j                  dd      }|j                  dd      }|j                  dd      }	||	|||d}
| j                   dt        |
       }t        |      dkD  rt        |      |d	<   d|d
<   d|d<   d|d<   |S 	 t	        j                   || j
                        }d|_        t        d|        t        d|j                          t        dt        |j                                t        j                  |j                        }|j                  d      }|D ]  }|j                  d      r|j                  d      d   nd}|j                  d      }|r|d   j                         nd}|j                  d      }d }|r>|d   }t        j                   d|      }|r|j#                  d      j                         nd }|s| j$                  }|j'                  d      r| j                  |z   }|j                  d      }|r|d   j                         nd}|d   j)                  ||||d        t        |      }d}|dk  rt        |      }|t        |      k(  rt        |      dz
  dz  |z   n|dz  }t        |      |d	<   ||d
<   ||d<   ||d<   |S # t*        $ r}t        d|        Y d }~|S d }~ww xY w) NrF   r0   rM   r)   r/   )channelregionr)   r0   pagez/filter.html?   rn   	pagecountr   limit   totalrG   rH   zcategoryContent URL: z!categoryContent Response Status: zcategoryContent HTML length: z#//li[contains(@class, "qy-mod-li")]z
.//a/@hrefz.//a/@titlerK   z$.//div[@class="qy-mod-cover"]/@stylezurl\((.*?)\)r&   rO   z%.//span[@class="qy-mod-label"]/text()rP   0   zError in categoryContent: )rW   r   r   intrV   r   rX   r`   status_codelenrZ   r   rY   r[   r\   researchgroupr   r]   r^   r_   )r   tidpgrA   r   extra   _year_class_areaparamsr   rb   rc   rd   re   rQ   rf   rR   rg   rS   stylematchrh   rT   current_itemstotal_pagestotal_itemsri   s                                r   categoryContentzSpider.categoryContentc   s   !V!r"#"%#
 }Yv->,?@ r7Q; WF6N"#F;F7O!F7OM.	4,,sDLL9C"CL)#/05coo5FGH1#chh-AB::chh'D

#HII56WW\5J.q1PRWW]3
4>:a=..0HGG$JK	%aLEIIou=E8=ekk!n2244G"22G%%c*"mmg5G ww'NO9El1o3352v%%$ (&#.	' # 2  	NMKr!!"g@KsSUw@V3r7Q;",}<\gjl\lK WF6N"-F;+F7O)F7O   	4.qc233	4s   HJ1 1	K:KKc                 d   dg i}|d   }| j                    | }	 t        j                  || j                        }d|_        t        j                  |j                        }|j                  d      r"|j                  d      d   j                         nd}|j                  d      r"|j                  d	      d   j                         nd
}|j                  d      r"|j                  d      d   j                         nd
}	|j                  d      r"|j                  d      d   j                         nd
}
|j                  d      r"|j                  d      d   j                         nd
}|j                  d      r"|j                  d      d   j                         nd
}|j                  d      r"|j                  d      d   j                         nd
}|j                  d      r|j                  d      d   n| j                  }|j                  d      r| j                   |z   }|j                  d      }|s|||d
||	||||
ddd}nt               }i }|d d d   D ]  }|j                  d      r"|j                  d      d   j                         nd}| j                   |j                  dd
      z   }|j                  d      d    }|j                  d      d   }| j                    d!| d"| }t        j                  || j                        }d|_        |j                         }d#|v s|d#   s|d#   D ]=  }|d$   }|j                  |       ||vrg ||<   ||   j!                  | d%|d&           ?  d'j#                  |      }d'j#                  |D cg c]  }d(j#                  ||          c}      }|||d
||	||||
||d}|d   j!                  |       |S c c}w # t$        $ r=}t'        d)|        |d   j!                  |d| j                  dd
d*       Y d }~|S d }~ww xY w)+NrF   r   rG   rH   z//div[@class="right-title"]z"//div[@class="right-title"]/text()rK   z//div[@id="postYear"]z//div[@id="postYear"]/text()rM   z//div[@id="region"]z//div[@id="region"]/text()z//div[@id="show-desc"]z//div[@id="show-desc"]/text()z//div[@id="updateTxt"]z//div[@id="updateTxt"]/text()z//div[@id="actors"]z//div[@id="actors"]/text()z//div[@id="director"]z//div[@id="director"]/text()z//img[@class="left-img"]z//img[@class="left-img"]/@srcrO   z//div[@id="list-jj"]/au	   泥視頻u2   第1集$https://www.nivod.cc/vodplay/202552243/ep1)rQ   rR   rS   r(   vod_yearvod_arearT   	vod_actorvod_directorvod_contentvod_play_fromvod_play_urlz.//div[@class="item"]z.//div[@class="item"]/text()rL      z/xhr_playinfo/-pdatasfromr%   playurlz$$$r$   zError in detailContent: )rQ   rR   rS   r   r   )r   rV   rW   r   rX   r   rY   rZ   r[   r\   r   r]   setr@   jsonaddr^   joinr_   r`   )r   arrayra   ids
detail_urlrb   rc   rR   r   r   r   rT   r   r   rS   episodesvod	play_from	play_urlsepep_nameep_urlrQ   ep_idxhr_urldatasourcesource_namer   r   ri   s                                  r   detailContentzSpider.detailContent   sJ   "Ahse,
M	,,z4<<@C"CL::chh'DVZV`V`a~Vtzz"FGJPPR  FNHPTPZPZ[rPstzz"@A!DJJLy{HNRjjYnNotzz">?BHHJuwHTXT^T^_wTx$**%DEaHNNP  AKTXT^T^_wTx$**%DEaHNNP  AKOSzzZoOp

#?@CIIKvxITXT^T^_vTw4::&DEaHNNP}LHL

SmHndjj!@A!Dtx  uI  uIG!!#&--'1zz":;H! (&!# ( (#.!*$0#.%0$X  E		"4R4.BUWU]U]^uUvbhh'EFqIOOQ  }EG!]]RVVFB-??F YYs^A.F"LL-b1E!%~fXQugNG",,wEC#*CL88:D4'DN&*8nF*0.K%MM+6*);9;	+ 6%k299WIQviGXFY:Z[ '5 )" !&

9 5$zzU^*_U^6388If4E+FU^*_` " (&!# ( (#.!*$0#.%2$0 6N!!#& 5 +`"  	,QC016N!!$//!, "#   	s7   LO) /O) 5A(O) O$8*O) $O) )	P/22P**P/c                    dg i}	 | j                    d| d| }t        j                  || j                        }d|_        t        j                  |j                        }|j                  d      }|D ]  }	|	j                  d      }
|
r|
d   j                         nd }|s(|	j                  d	      }|r|d   j                         nd
}|	j                  dd      }|	j                  d      }|r|d   n| j                  }|j                  d      r| j                   |z   }d}|d   j                  ||||d        	 |S # t        $ r}t        d|        Y d }~|S d }~ww xY w)NrF   z/search_x.html?keyword=z&page=rG   rH   z$//a[contains(@class, "qy-mod-link")]rI   r   rJ   rK   rL   rM   rN   rO   rP   zError in searchContent: )r   rV   rW   r   rX   r   rY   rZ   r[   r\   r   r]   r^   r_   r`   )r   r,   quickr|   ra   
search_urlrb   rc   rd   itemrf   rR   rQ   rg   rS   rT   ri   s                    r   searchContentzSpider.searchContent  sd   "	2 MM?*A#fRDQJ,,z4<<@C"CL::chh'D

#IJI!!ZZ(^_
4>:a=..0D#zz*5H6>x{002HH&"- JJ']^	*3)A,9M9M%%c*"mmg5G v%%$ (&#.	'  "(   	2,QC011	2s   D6D? ?	E!EE!c                     i }	 d|v r|j                  d      d   n|}|t        j                  | j                        ddd}|S # t        $ r}t        d|        ddd}Y d }~|S d }~ww xY w)Nr%   r&   r   rM   )r   headerparseplayUrlzError in playerContent: )r   r   )r@   r   dumpsr   r_   r`   )r   flagidvipFlagsra   play_urlri   s          r   playerContentzSpider.playerContent  s~    
	-+."9rxx}Q'"H**T\\2	F   	-,QC01!,F	-s   >A 	A+A&&A+c                     ddi dgS )N   z
video/MP2Tr   r   )r   params     r   
localProxyzSpider.localProxy.  s    \2s++r   c                      y r   r   r   s    r   destroyzSpider.destroy1  r   r   )rM   )NN)1)__name__
__module____qualname__r   r   r   r   r    r"   rD   rj   r   r   r   r   r   r   r   r   r   r   r      sN    	a=K6>HTRh<,r   r   )sysrV   lxmlr   r   rx   urllib.parser   pathr^   base.spiderr   r   r   r   <module>r      s:   
     	 "   dV dr   