
    ߐh@                         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 d dlmZmZ ej                            d           d dlmZ  G d de          ZdS )	    N)AES)PyQuery)quoteunquotez..)Spiderc                        e Zd Zg dZd Zd%dZd Zd Zd Zd Z	d	 Z
d
edefdZdedefdZdedefdZdedefdZd Zd Zd Zd&dZd Zd Zd' fd	Zd Zd Zd(d!Zd" Zd# Zd$ Z xZS ))r   )z.video-itemz.video-list .itemz
.list-itemz
.post-itemc                     dS )Nu   黑料不打烊 selfs    4   /storage/emulated/0/纯福利/PY1/黑料弹幕版.pygetNamezSpider.getName   s    --     c                     d S Nr
   )r   extends     r   initzSpider.init   s      r   c                     i 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!d"d#d$d%}d&d' |                                 D             iS )(Nu   最新黑料hlcgu   今日热瓜jrrsu   每日TOP10mrrbu   反差女友fczqu   校园黑料xycgu   网红黑料whhlu   明星丑闻mxcwu   原创社区ycsqu   推特社区ttsqu   社会新闻shxwu   官场爆料gchlu   影视短剧ysdju   全球奇闻qqqwu   黑料课堂hlktu   每日大赛mrdsu   激情小说jqxsu   桃图杂志ttzzsyzydjbl)u   深夜综艺u   独家爆料classc                     g | ]
\  }}||d S ))	type_nametype_idr
   ).0kvs      r   
<listcomp>z&Spider.homeContent.<locals>.<listcomp>   s$    QQQsqQ33QQQr   )items)r   filter
cateManuals      r   homeContentzSpider.homeContent   sz    vN6  v.  vf  vUcdj  vky  {A  v  BP  QW  v  Xf  gm  v  n|  }C  v  DR  SY  v  Zh  io  v  p~  E  v  FT  U[  v  \j  kq  v  r@  AG  v  HV  W]  v  ^l  ms  v  tB  CI  v  Y_  ou  v  v  v
QQj>N>N>P>PQQQRRr   c                     i S r   r
   r   s    r   homeVideoContentzSpider.homeVideoContent   s    Rxr   c                     t          |          dk    rd| dnd| d| d}|                     |          }||ddddS )	N   https://heiliao.com//z/page/i'  Z   i?B )listpage	pagecountlimittotal)intget_list)r   tidpgr2   r   urlvideoss          r   categoryContentzSpider.categoryContent   sa    ,/GGQJJ)3))))<cSV<c<c^`<c<c<c}}S!!B46RRRr   c                 >   	 |                     d          rd|z   }n|                     d          rd|z   }t          j        |ddddd	
          }|j        dk    rdS t	          j        dt          j        d                              |j                  S #  Y dS xY w)N//https:r:   https://heiliao.comsMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.7049.96 Safari/537.36r9   z
User-AgentReferer   Fheaderstimeoutverify   r      f5d965df75336270   97b60394abc2fbe1)	
startswithrequestsgetstatus_coder   newMODE_CBCdecryptcontent)r   rE   rs      r   fetch_and_decrypt_imagezSpider.fetch_and_decrypt_image   s    	~~d## CCC$$B)>s)BSl3  6k  vL  (M  (M  VX  `e  f  f  fA}c!!7.s|<OPPXXYZYbcccssss   AB 7B Bc                     	 t          j        d|                    d          pd          }|r|                    d          ndS #  Y dS xY w)Nz2load(?:Share)?Img\s*\([^,]+,\s*['\"]([^'\"]+)['\"]onloadr   r8   )researchattrgroup)r   nodems      r   _extract_img_from_onloadzSpider._extract_img_from_onload   sR    	iMtyyYaObObOfdfhhA !(1771:::b(RRRs   AA A
rE   returnc                 f    |pd                                 t          fddD                       S )Nr   c              3       K   | ]}|v V  	d S r   r
   )r-   xus     r   	<genexpr>z)Spider._should_decrypt.<locals>.<genexpr>#   s'      'r'r1Q'r'r'r'r'r'rr   )zpic.gylhaa.cnznew.slfpld.cnz/upload_01/z/upload/)lowerany)r   rE   rn   s     @r   _should_decryptzSpider._should_decrypt"   s;    8



C'r'r'r'r7q'r'r'r$r$rrr   rn   c                 v    |sdS |                     d          rd|z   S |                     d          rd|z   S |S )Nr   rI   rJ   r:   rK   )rW   )r   rn   s     r   _abszSpider._abs$   sI    rr<<.HQJ.<<:#8#::r   sc                     t          j        |pd                                                                          S #  Y dS xY wNr   )base64	b64encodeencodedecoder   ru   s     r   e64z
Spider.e64)   :    #QVOO$5$566==???RRR	   9; A c                     t          j        |pd                                                                          S #  Y dS xY wrw   )rx   	b64decoderz   r{   r|   s     r   d64z
Spider.d64,   r~   r   c                 R   |dn+|                     d          p|                     d          pd}|dn|                     |          }|p|}|rD|s|                     |          r-|                                  d|                     |           dn|                     |          S )Nr   srczdata-srcz&url=z&type=hlimg)re   ri   rr   getProxyUrlr}   rt   )r   img_nodern   encts        r   _imgzSpider._img/   s    ""X]]5%9%9%YHMM*<U<U%YWY!BBt'D'DX'N'N
(FG|C|SWSgSghiSjSj|$""$$CC488A;;CCCCptpypyz{p|p||r   c                    g }| j         D ]} ||                                          D ]}|                    d                                          }|s,|                    d                              d          }|sW|                    |                     |          ||                     |                    d                    |                    d                                          pdd           |r n|S )Nz.title, h3, h4, .video-titleahrefimgz!.date, .time, .remarks, .durationr   )vod_idvod_namevod_picvod_remarks)	SELECTORSr1   findtextre   appendrt   r   )r   rootvidsselittitlelinks          r   _parse_itemszSpider._parse_items4   s@   > 	 	Cd3iioo'' s sgg<==BBDD%XWWS\\&&v..$HdiiooQUQZQZ[][b[bch[i[iQjQjy{  zA  zA  Be  zf  zf  zk  zk  zm  zm  zq  oq  r  r  s  s  s  sMEEMr   c           	         |d         }|                     d          r|nd| }|                     |          }|sdg iS d|_        |j        }t	          |          }n	#  d }Y nxY wt	          |j                  }n	#  d }Y nxY w|r |d                                          ndpd}d|v r|                    dd          }d}	|r |d	                              d
          }
|
rB|
                    d          s*|
                    d          s|
                    d          r|
}	n| 	                     |d                    }	d}|rG |d                              d
          pd}|s% |d                                          d d         }g g }}|rt           |d                                                    D ]\  }}|                    d          }|s|                    dd                              dd                              dd                              dd                              dd                              dd                              dd                              dd          }t          j        |                              d i           pi                     d!d          }n5#  t          j        d"|          }|r|                    d#          nd}Y nxY w|r|                    d$d%          }|                     |          }|                     |          }|r7|                    d&|d#z               |                    | d'|            |                    d&|d#z               |                    |           |sd(D ]}t          j        ||          D ]}|                     |          }|                     |          }|rC|                    d&t-          |          d#z               |                    | d'|            n=|                    d&t-          |          d#z               |                    |           t-          |          d)k    r n|r n|s+g d*}|D ]#}t          j        ||          }|D ]}d+|v r|                     d,          rd-|z   }n5|                     d%          rd|z   }n|                     d          sd.|z   }|                     |          }|rC|                    d&t-          |          d#z               |                    | d'|            n=|                    d&t-          |          d#z               |                    |           t-          |          d)k    r n|r n%|ss|                     |          }d/}|r0|                    d0           |                    | d'|            n*|                    d0           |                    |           d|||	|d1                    |          d1                    |          d2giS )3Nr   httprK   r<   zutf-8r   r   u    - 黑料网zmeta[property="og:image"]r^   z.pngz.jpgz.jpegz.video-item-img imgzmeta[name="description"]z.contentrT   z.dplayerconfigz&quot;"z&#34;z&amp;&z&#38;z&lt;<z&#60;z&gt;>z&#62;videorE   z"url"\s*:\s*"([^"]+)"r8   z\/r:   u   视频_dm_)z!https://hls\.[^"\']+\.m3u8[^"\']*z'https://[^"\']+\.m3u8\?auth_key=[^"\']+z//hls\.[^"\']+\.m3u8[^"\']*   )z-video[\s\S]{0,500}?url[\s"\'`:=]+([^"\'`\s]+)zvideoUrl[\s"\'`:=]+([^"\'`\s]+)z*src[\s"\'`:=]+([^"\'`\s]+\.m3u8[^"\'`\s]*)z.m3u8rI   rJ   zhttps://zhttps://hls.obmoti.cn/videos5/b9699667fbbffcd464f8874395b91c81/b9699667fbbffcd464f8874395b91c81.m3u8?auth_key=1760372539-68ed273b94e7a-0-3a53bc0df110c5f149b7d374122ef1ed&v=2u   示例视频z$$$)r   r   r   vod_contentvod_play_fromvod_play_url)rW   fetchencodingr   pqr^   replacere   endswithr   	enumerater1   jsonloadsrY   rc   rd   rf   rt   _extract_article_idr   findalllenjoin)r   arrayrC   rE   rsp	html_text	root_textroot_contentr   picogdetail	play_fromplay_urlipcru   rn   rh   
article_idpatjs_patternspatternjs_urlsjs_urlexample_urls                              r   detailContentzSpider.detailContent?   s   !Hv 6 6V;VQT;V;VSJJsOO$&$sxYmmIIyyyCKLL D|||+4;yy!!&&(((@b
5
 
 u}}^B'G'G 	Ay455::9EEB Abkk&)) ABKK,?,? A"++gBVBV A\^X[X[YYyy)>??@@ 	D9788==iHHL"FC:!6!6!;!;!=!=dsd!C&b(	 	L j!9!9!?!?!A!ABB L L!&&""!yy#..66wsCCKKGTWXX``ahilmmuuv|  ~A  B  B  J  J  KR  SV  W  W  _  _  `f  gj  k  k  s  s  t{  |  @  @A  EI  EO  PQ  ER  ER  EV  EV  W^  _a  Eb  Eb  Ef  df  Dk  Dk  lq  rt  Du  Du  BC  BCV#;A>>qaAVTVqqq Liic**ATYYq\\1!%!9!9#!>!>J! L!((!A#888JI_I_\]I_I_9`9`9`9`!((!A#8889K9K9K 
	" G 	" 	"C	22 . .AiillA!%!9!9#!>!>J! Y!(()D#i..2B)D)DEEEhooYcVlVlijVlVlFmFmFmFm!(()D#i..2B)D)DEEEhooVWFXFXFX8}}a'''!EE! 	" \  \  \K& " "
7955% 
2 
2F&&!,,T22 T(6/66#..s33 T;PQW;WFF!'!2!26!:!:S*VBS6%)%=%=c%B%B
% b%,,-Hc)nnQ6F-H-HIII(//]gZuZumsZuZuJvJvJvJv%,,-Hc)nnQ6F-H-HIII(//Z`JaJaJax==!++EE!EE! 	N11#66J JK N  000JAaAaT_AaAa1b1b1b1b  0001M1M1MRXinisist}i~i~  OT  OY  OY  Zb  Oc  Oc  d  d  e  f  	fs%   A A$'A< <B C K0K31c                     |                      d|           }|sdg iS d|                     t          |j                            iS )Nz&https://heiliao.com/index/search?word=r<   r   r   r   r   )r   keyquickrD   r   s        r   searchContentzSpider.searchContent   sL    JJEEEFF$&$d''385566r   c                     d|v rd|                     dd          \  }}t          j        d|          rdnd}|s'|                                  dt	          |           d}||ddd	d
S dd|ddd	dS )Nr   r8   z$\.(m3u8|mp4|flv|ts|mkv|mov|avi|webm)r   z&pdid=z
&type=m3u8rL   r9   rM   )parserE   headerr   )r   playUrlrE   r   )splitrc   rd   r   r   )r   flagidvipFlagsaidpidr   s          r   playerContentzSpider.playerContent   s    R<<xx**HCYFLLSRSA I))++HH599HHHs  Ez  E[  7\  7\  ]  ]  ]r  K@  Ka  =b  =b  c  c  cr   c                     |                      |          }|sg n&|                     t          |j                            S r   r   )r   rE   r   s      r   rB   zSpider.get_list   s6    JJsOO?bb 1 1"SX,, ? ??r   N   TFc	           
      d    |pddd}	t                                          ||||	||||          S )NrL   r9   rM   )paramscookiesrQ   rR   rS   streamallow_redirects)superr   )r   rE   r   r   rQ   rR   rS   r   r   h	__class__s             r   r   zSpider.fetch   s^    
  z  #X  cy  z  zww}}SwqQX`fnt  FU}  V  V  	Vr   c                    	 |                     dd          }|dk    r|                     |                     d                    }|                    d          rd|z   }n|                    d          rd|z   }t          j         |d	d
ddd          }|j        dk    rg dS t          j        dt
          j        d                              |j	                  }d}|                    d          rd}n|                    d          rd}d||gS |dk    r t          |d                                       dd          \  }}t          j         |d	d
dd          j        }|                                                    d          }	d}
|	D ]V}|                    d           r?|
t          |                    d!          d"                             d#d                    z  }
Wt!          j        | j        |t'          |
          f$          }|                                 t+          d%|
           dd&|gS |d'k    rd|                     d(d          }t'          |                     d)d*                    }
|                     |          }|                     ||
          S n)# t0          $ r}t+          d+|            Y d }~nd }~ww xY wg dS ),Ntyper   hlimgrE   rI   rJ   r:   rK   rL   r9   rM   rO   FrP   rT   )i  
text/plainr   rU   rV   z
image/jpegs   PNGz	image/pngs   GIF8z	image/gifm3u8pdidr   r8   
   rQ   rR   
g        z#EXTINF::,)targetargsu   [INFO] 获取视频时长成功r   hlxdmpathtimesr   z[ERROR] localProxy: )rY   r   rW   rX   rZ   r   r[   r\   r]   r^   r   r   r   stripfloatr   	threadingThreadsome_background_taskrA   startprint_fetch_heiliao_comments_generate_danmaku_xml	Exception)r   paramxtyperE   r_   bctr   datalinesr   r   threadr   commentses                   r   
localProxyzSpider.localProxy   s7   "	.IIfb))EHHUYYu--..>>$'' GHSL^^C((F-B3-F,s  :o  zP  ,Q  ,Q  Z\  di  j  j  j=#%%,A,A,A&A'-cl;NOOWWXYXabb<<
++ :{BB\\'**9k22aj &#E&M2288CC	c|C  @u  @V  2W  2W  ac  d  d  d  i

**400 J JA||J// Jqwws||B'7'?'?R'H'H!I!II")1JRVX[\aXbXbQcddd7???\400'!!"YYvr22
EIIgq112277
CC11(EBBB "  	. 	. 	.,,,--------	.####s-   B"J% %A-J% D&J% :A)J% %
K/KKc                 |    	 d|v r.t          j        d|          }|r|                    d          ndS dS #  Y dS xY w)z'Extract article ID from heiliao.com URLz
/archives/z/archives/(\d+)/?r8   N)rc   rd   rf   )r   rE   matchs      r   r   zSpider._extract_article_id   sR    	s""	"6<<).8u{{1~~~D84	44s   16 ;r   c                 j   g }	 t          d|dz             D ]h}d| d| d}t          j        |dddd	          }|j        d
k    r7|                                }d|v rd|d         v r|d         d         r|d         d         D ]}|                    dd                                          }	|	r(t          |	          dk    r|                    |	           d|v r{d|d         v rq|d         d         rc|d         d         D ]T}
|
                    dd                                          }|r(t          |          dk    r|                    |           U|d                             dd          s ng n n)# t          $ r}t          d|            Y d}~nd}~ww xY w|dd         S )z#Fetch comments from heiliao.com APIr8   zhttps://heiliao.com/comments/1/r:   z.jsonrL   r9   rM   r   r   rT   r  r<   r^   r   d   r  nextFz![ERROR] _fetch_heiliao_comments: N2   )
rangerX   rY   rZ   r   r   r   r   r   r   )r   r   	max_pagesr  r=   rE   respr  commentr   reply
reply_textr	  s                r   r   zSpider._fetch_heiliao_comments   s8   	;aQ//  P
PPTPPP|C  @u  @V  2W  2W  ac  d  d  d#s**99;;D~~&DL*@*@T&\RXEY*@'+F|F'; 	D 	DG#*;;y"#=#=#C#C#E#ED# 6D		S(8(8 ( 5 5 5)W447:CV9V9V[bcm[nou[v9V-4Z-@-H !D !DE169b1I1I1O1O1Q1QJ'1 %Dc*oo6L6L(0
(C(C(C#F|//>> "!E"  	; 	; 	;9a99::::::::	;}s   E=F 
F(F##F(c           
         	 t          |          }d| d}d}|d| dz  }t          |          D ]\  }}|dk    r||z  |z  nd}|t          j        dd          z   }	t	          t          dt          |	|                    d	          }	|                                 }
t          j	        d
d|          }|d|	 d|
 d| dz  }|dz  }dd|gS # t          $ r }t          d|            g dcY d}~S d}~ww xY w)z"Generate danmaku XML from commentsu   共有u   条弹幕来袭！！！z<?xml version="1.0" encoding="UTF-8"?>
<i>
	<chatserver>chat.heiliao.com</chatserver>
	<chatid>88888888</chatid>
	<mission>0</mission>
	<maxlimit>99999</maxlimit>
	<state>0</state>
	<real_name>0</real_name>
	<source>heiliao</source>
z	<d p="0,5,25,16711680,0">z</d>
r   r   r8   z[<>&\u0000\b]r   z	<d p="z,1,25,z,0">z</i>rT   ztext/xmlz[ERROR] _generate_danmaku_xml: )i  z	text/htmlr   N)r   r   randomuniformroundmaxmin_get_danmaku_colorrc   subr   r   )r   r  video_durationtotal_commentstsrt	danmu_xmlr   r  	base_timedm_timedm_colordm_textr	  s                r   r   zSpider._generate_danmaku_xml   sk   	* ]]NDNDDDD UICtCCCCI'11 U U
7ESVWEWEWQ/>AA]^	#fnR&;&;;As7N'C'C D DaHH2244&!12w??TTTxTTWTTTT		IY// 	* 	* 	*7A77888)))))))))	*s   CC 
C8C3-C83C8c                    t          j                     dk     rt          j                     }t          j        dd          }t          j        dd          }t          j        |||          \  }}}t	          |dz            }t	          |dz            }t	          |dz            }t          |dz  |dz  z   |z             S dS )	z)Get danmaku color (90% white, 10% random)g?gffffff?g      ?g?         16777215)r  r  colorsys
hsv_to_rgbrA   str)r   r   ru   r/   r_   gr  s          r   r  zSpider._get_danmaku_color   s    =??S  AsC((AsC((A)!Q22GAq!AGAAGAAGARAF+a/000:r   c                 F   	 t          j        d           |                                  dt          |           d| d}|                     dt          |                      t          d|            dS # t          $ r}t          d|            Y d}~dS d}~ww xY w)	z,Background task to refresh danmaku in FongMir8   z&path=z&times=z&type=hlxdmz:http://127.0.0.1:9978/action?do=refresh&type=danmaku&path=u   [INFO] 弹幕刷新成功: z[ERROR] some_background_task: N)timesleepr   r   r   r   r   )r   r   r   danmaku_urlr	  s        r   r   zSpider.some_background_task  s    	8JqMMM!--//lluZ7H7HllQ_lllKJJhTYZeTfTfhhiii<
<<===== 	8 	8 	86166777777777	8s   A5A9 9
B BB )r   )r   )NNNr   TFT)r   )__name__
__module____qualname__r   r   r   r4   r6   rG   r`   ri   r/  boolrr   rt   r}   r   r   r   r   r   r   rB   r   r
  r   r   r   r  r   __classcell__)r   s   @r   r   r   	   s       KKKI---!!!!S S S (''S S S    
s st s s s sC #    
3     3     } } }

 
 
Ef Ef EfL7 7 7 7	c 	c 	c@ @ @V V V V V V$$ $$ $$L     >* * *0  8 8 8 8 8 8 8r   r   )r   rc   sysrx   rX   r   r2  r  r-  Crypto.Cipherr   pyqueryr   r   urllib.parser   r   r   r   base.spiderr   r
   r   r   <module>r?     s   A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A       ! ! ! ! ! ! ' ' ' ' ' ' ' '          M8 M8 M8 M8 M8V M8 M8 M8 M8 M8r   