o
    ߁/i^(                     @   s   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
 d dlmZmZ e jd d dlmZ G dd	 d	eZdS )
    N)	b64decode)SequenceMatcher)quoteunquote)ThreadPoolExecutoras_completedz..)Spiderc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d&iZd'S )(r   c                 C   s   dS )Nu   直播 selfr	   r	   ,   /storage/emulated/0/lz/py/sy/斗鱼虎牙.pygetName      zSpider.getNamec                 C   s&   z	t || _W d S    i | _Y d S N)jsonloads
extendDict)r   extendr	   r	   r   init   s   zSpider.initc                 C      d S r   r	   r
   r	   r	   r   destroy   r   zSpider.destroyc                 C   r   r   r	   )r   urlr	   r	   r   isVideoFormat   r   zSpider.isVideoFormatc                 C   r   r   r	   r
   r	   r	   r   manualVideoCheck    r   zSpider.manualVideoCheckc                 C   s   i }|S r   r	   )r   resultr	   r	   r   homeVideoContent#   s   zSpider.homeVideoContentc                 C   s   i }z$| j d }| j|| jdd }|d |d< |r$|d |d< W |S W |S    dd	d
ddd
g|d< d	d	dddddddddgdddddddddddddddgdd|d< Y |S )Nr      headerstimeoutclassesclassfilterfiltersdouyu   斗鱼)type_id	type_namehuya   虎牙u	   一起看208)nvu   星秀Z1008u	   二次元Z174)keynamevaluegetLiveList?iGid=2135u   舞蹈z#getTmpLiveList?iGid=1663&iTmpId=116zgetLiveList?iGid=1663zgetLiveList?iGid=2633)r$   r(   )r   fetchheaderr   )r   r"   r   r   datar	   r	   r   homeContent(   s    
"*zSpider.homeContentc                 C   s   i }g }| j  }|dkrod|v r|d }n'z | jt| jd |dd}	|	 d | d d d d	 }W n   d
}Y d| d| }
| j|
|dd }|d d }d}d}d}d}d}|d d dkrl|d }n|}n|dkrd|v r||d }n&z| jt| jd |d}	|	 d | d d d d	 }W n   d}Y d| d| }
| j|
|dd}	|	 }|d d }|d d }d}d}d}d}d }no|d!kr.d"|v r|d" }n&z| jt| jd |d}	|	 d | d d d d	 }W n   d#}Y d$|d%< d&| d'| }
| j|
|dd}	|	 }|d( }|d) d }d!}d*}d+}d,}d-}ng }|}d.}d.}d.}d.}d.}|D ]'}|| }|| }|| }|| }||d/ | d/ t| |||d0 q>t	|}||d< ||d1< ||d2< ||d3< ||d4< |S )5Nbilibili   B站r   r   r   r"   r   r/   r,   1z`https://api.live.bilibili.com/xlive/web-interface/v1/second/getList?platform=web&parent_area_id=&page=r3   listcoverroomidtitleunamehas_more   r$   r%   r   r*   z3https://www.douyu.com/gapi/rkc/directory/mixList/2_/ZrlZpgcntZrs1ridZrnnnr(   r)   r0   zhttps://www.huya.com/Refererz!https://live.huya.com/liveHttpUI/z&iPageSize=20&iPageNo=vListZiPageNoZsScreenshotZlProfileRoomZsIntroductionZsNick ###vod_idvod_namevod_picvod_remarkspage	pagecountlimittotal)
r2   copyr1   r   r   r   r   appendstrlen)r   cidrM   r"   extr   videosr2   tidrr   r3   vodListrR   ZimgnmZvidnmZtitlenmZremarknmrN   vodimgvidr<   remarkZ
lenvodListr	   r	   r   categoryContent6   s   

$

$

$zSpider.categoryContentc                 C   s0  |d }| d}|d }|d dkr?d|d  d}| j|td }d	g}|d
 d d d d |d
 d d d  g}n=|d dkrattd|d i}d|d  }dg}d| g}n|d dkrxd|d  }dg}d| g}ng }g }|d |d}	d||	d< d||	d< d|	gi}
|
S )Nr   rG   r?   r5   z7https://api.live.bilibili.com/room/v1/Room/playUrl?cid=   z&qn=20000&platform=h5r@   r6   r3   Zquality_descriptiondesc$durlr   r$   rB   z1http://shorturl.jxpan.vip:880/r/baoshi_aio/douyu/r%   u   直播$r(   z0http://shorturl.jxpan.vip:880/r/baoshi_aio/huya/)rI   rJ   z$$$vod_play_fromvod_play_urlr9   )splitr1   r2   r   r   dumpsjoin)r   didZdidListr<   r   r3   ZplatformListZplayurlListparamsr[   r   r	   r	   r   detailContent   s4   
0
zSpider.detailContentc                 C   s   |  |ddS )NFr7   )searchContentPage)r   r-   quickr	   r	   r   searchContent   s   zSpider.searchContentc              	   C   sr  g }t |}|}|dkrg d}n| d||}| d|| |s)d|iS g }tdd?}g }	z*|D ]}
|
}d}|| j||||}|	| q6t|	dd	D ]	}||	  qRW n
   |j
d
d Y W d    n1 srw   Y  g }|D ]+}|d u rq{t| d }|| }||| d  }||d  |d s|| q{| d||d | d|i}|S )Nr?   )bbZdyZhyzlivesiteList_{}_{}r9      )Zmax_workersrF      )r   F)waitr   )intgetCacheformatdelCacher   submit	runSearchrR   r   r   shutdownr9   keysremovesetCache)r   r-   rm   rM   itemskeywordZsiteListcontentsZexecutorZ
searchListsitetagapifutureZnextpageListcontentinfosr   r	   r	   r   rl      sP   

zSpider.searchContentPagec                 C   s.   zd| }t |||||}|W S    Y d S )Nzself.search)eval)r   r-   r   rM   r   Zdefnamer   r	   r	   r   rx      s   zSpider.runSearchc                 C   s   g }| j  }d|d< d| d| }| j||d }|d d }	|	D ]3}
|
d d	kr-q$| |
d
 }td || dk rC||vrCq$|d||
d |d|
d  dd q$|||d t	|k giS )Nz5buvid3=8802E18A-D264-86E5-AFF0-C0433CEE538C23554infocCookiez:https://api.bilibili.com/x/web-interface/search/type?page=z9&page_size=10&order=online&search_type=live_user&keyword=r@   r3   r   Zlive_statusr   r=   333333?z{}###bilibili###{}r;   zhttps:Zufaceu
   B站直播rH   
   )
r2   rQ   r1   r   removeHtmlTagsr   ratiorR   ru   rT   r   r-   r   pgr   r}   r2   r   r3   rE   videor<   r	   r	   r   searchbb   s&   


zSpider.searchbbc                 C   s   g }| j  }d| d| d}| j||dd }|d d }	|	D ]6}
|
d d	 d
kr-q"|
d d }td || dk rB||vrBq"|d||
d d ||
d d dd q"|||d t|k giS )Nz4https://www.douyu.com/japi/search/api/searchUser?kw=r8   z&pageSize=10&filterType=1r   r   r3   Z
relateUserZ
anchorInfoZisLiver?   nickNamer   z{}###douyu###{}rB   ZroomSrcu   斗鱼直播rH   r   )	r2   rQ   r1   r   r   r   rR   ru   rT   r   r	   r	   r   searchdy  s$   


zSpider.searchdyc                 C   s   g }| j  }d|d< t|d d }d| d| d}| j||d}	|	 }
|
d	 d
 d }|D ]'}|d }td || dk rF||vrFq1|d||d ||d dd q1|||d t	|k giS )Nzbuvid3=0r   r?   (   zOhttps://search.cdn.huya.com/?m=Search&do=getSearchContent&typ=-5&livestate=1&q=z&start=z&rows=40r@   responser7   docsZ	game_nickr   z{}###huya###{}Zroom_idZgame_avatarUrl180u   虎牙直播rH   )
r2   rQ   rS   r1   r   r   r   rR   ru   rT   )r   r-   r   r   r   r}   r2   startr   rY   r3   rE   r   r<   r	   r	   r   searchhy  s&   

zSpider.searchhyc                 C   s0   i }ddi}d|d< d|d< ||d< ||d< |S )	N
User-AgentzIcom.android.chrome/131.0.6778.200 (Linux;Android 13) AndroidXMedia3/1.8.0r   parserF   playUrlr   r2   r	   )r   flagpidvipFlagsr   r2   r	   r	   r   playerContent4  s   zSpider.playerContentc                 C   s   g dS )N)   z
video/MP2TrF   r	   )r   paramr	   r	   r   
localProxy@  s   zSpider.localProxyc                 C   s$   ddl m}m} |d}||d|S )Nr   )subcompilez<.*?>rF   )rer   r   )r   srcr   r   cleanr	   r	   r   r   C  s   zSpider.removeHtmlTagsr   zrMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36N)__name__
__module____qualname__r   r   r   r   r   r   r4   r_   rk   rn   rl   rx   r   r   r   r   r   r   r2   r	   r	   r	   r   r      s*    n(r   )sysr   timehashlibbase64r   difflibr   urllib.parser   r   Zconcurrent.futuresr   r   pathrR   base.spiderr   r	   r	   r	   r   <module>   s   