
    hj                         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mZ d dlZej                  j                  d       d dlmZ  G d de      Zy)    N)datetime)quoteunquotez..)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dZddZd Zd Zd Zd ZdZdddZy)r   c                      y)N
   B站视频 selfs    $/storage/emulated/0/lz/py/sy/bili.pygetNamezSpider.getName   s    	    c                 V    	 t        j                  |      | _        y #  i | _        Y y xY wN)jsonloads
extendDict)r   extends     r   initzSpider.init   s%    ZZ'4?4?s    	(c                      y r   r
   )r   urls     r   isVideoFormatzSpider.isVideoFormat       r   c                      y r   r
   r   s    r   manualVideoCheckzSpider.manualVideoCheck   r   r   c                    i }i |d<   d}d| j                   v r| j                   d   }d| j                   v rE| j                  | j                   d   d      }d|j                         v r|j                         d   }|dk(  rd}nNt        |      t        k(  r<|j                  d      r+| j                  |d      j                  j                         }	 t        |      t        k(  rt        j                  |d	
      }| j                  |      \  }}}| j                  d      }|rg |d<   ng |d<   d| j                   v rQ| j                  | j                   d   d      }|j                         }d|v r|d   |d   z   |d<   |rd|v r|d   |d<   nd| j                   v sd| j                   v rid| j                   v r| j                   d   j                  d      }n| j                   d   j                  d      }|D ]  }	|d   j                  |	|	d        d|vs|d   g k(  rg 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(d(dd)d)dd*d+dd,d,dd-d.dd/d0dd1d2dd3d4dd5d5dd6d6dd7d7dd8d9dd:d;dd<d<dd=d=dd>d>dd?d?dd@d@ddAdAddBdBddCdDddEdFddGdGddHdHddIdIddJdKddLdLddMdMddNdNddOdOd|d<   |S #  Y xY w)PNfilters cookier   
   timeout{}httpFensure_asciibbloginclassclassesfilter
categoriestype#)	type_nametype_idu   傻屌仙逆u   沙雕仙逆u   沙雕动画u	   纪录片u   纪录片超清u	   演唱会u   演唱会超清u   流行音乐u   音乐超清u   美食u   美食超清u   食谱u   体育u   体育超清u   球星u   教育u   中小学教育u   幼儿教育u   旅游u   风景u   风景4Ku   说案u   知名UP主u   探索发现u   探索发现超清u   鬼畜u   搞笑u   搞笑超清u   儿童u   儿童超清u   动物世界u   动物世界超清u   相声小品u   相声小品超清u   戏曲u   解说u   演讲u	   小姐姐u   小姐姐超清u   荒野求生u   荒野求生超清u   健身u	   帕梅拉u	   太极拳u	   广场舞u   舞蹈u   音乐u   歌曲MVMV4Ku   舞曲u   舞曲超清4Ku   电影u	   电视剧u	   白噪音u   白噪音超清u   考公考证u   平面设计教学u   软件教程Windows)r   fetchr   r-   str
startswithtextstripdictdumps	getCookiegetCachesplitappend)
r   r+   resultr    r_r(   paramscateListcates
             r   homeContentzSpider.homeContent   s   &&& OOH%6tzz$//&)2z61!&&(VVXhFr\6F|sv008JJvrJ*//5576
6ldZZU3F NN6"'!QMM)$'6'?6'?tzz$//&)2z61FFH66Woy(99F7O6)VIt&&DOO*Cdoo%|,2237Hv&,,S1Ht
7O$?@ 	F	fWo3 | >NK  | Yg  sA  MB  |   P[  fw  Cx  |   FQ  \m  yn  |   |J  Uc  od  |   rz  ES  eT  |   bj  u}  U~  |   LT  _m  n  |   |D  OW  oX  |   fn  yJ  YK  |   Yg  r@	  LA	  |   O	W	  b	j	  B	k	  |   y	A
  L
V
  l	W
  |   e
m
  x
@  X
A  |   O\  gt  Bu  |   CQ  \p  vq  |   G  RZ  r[  |   iq  |J  \K  |   Ya  lz  L{  |   IW  bv  |w  |   ES  ^r  xs  |   AI  T\  t]  |   ks  ~F  ^G  |   U]  hp  Hq  |   J  Uf  rg  |   uC  Nb  hc  |   qy  DL  dM  |   [f  q|  N}  |   KV  al  ~m  |   {F  Q\  n]  |   ks  ~F  ^G  |   U]  hp  Hq  |   G  RZ  r[  |   im  x~  \  |   MU  `n  @o  |   }A  LP  pQ  |   _g  rz  R{  |   IT  _j  |k  |   yD  O`  la  |   o}  HV  bW  |   ey  DX  XY  |   gu  @ N   ZO   |   ] f   q z   P {   | 6'?	-3s   )K; ;L c                 n   i }d}d| j                   v r| j                   d   }d| j                   v rE| j                  | j                   d   d      }d|j                         v r|j                         d   }|dk(  rd}nNt        |      t        k(  r<|j                  d      r+| j                  |d      j                  j                         }	 t        |      t        k(  rt        j                  |d	      }| j                  |      \  }}}d
}t        j                  ||| j                  d      }t        j                  | j                  |j                              }	 g |d<   |d   d   }|D ]  }	t	        |	d         j                         }
| j!                  |	d         j                         }|	d   j                         }t#        j$                  dt#        j&                  |	d               }|j                  d      r|dd  }|dk(  r|d   j)                  |
|||d        	 |S #  Y 7xY w#  Y |S xY w)Nr   r    r   r!   r"   r$   r%   Fr&   zhttps://api.bilibili.com/x/web-interface/index/top/feed/rcmd?y_num=1&fresh_type=3&feed_version=SEO_VIDEO&fresh_idx_1h=1&fetch_row=1&fresh_idx=1&brush=0&homepage_ver=1&ps=20   cookiesheadersr#   listdataitemidtitlepic%H:%M:%Sduration00:   z00:00vod_idvod_namevod_picvod_remarks)r   r5   r   r-   r6   r7   r8   r9   r:   r;   r<   requestsgetheaderr   	cleanTextremoveHtmlTagstimestrftimegmtimer?   )r   r@   r    rA   imgKeysubKeyr   rM   vodListvodaidrP   imgremarks                 r   homeVideoContentzSpider.homeVideoContentK   s   && OOH%6tzz$//&)2z61!&&(VVXhFr\6F|sv008JJvrJ*//5576
6ldZZU3F  >>&1&&& 	w#ll3QG!	DNN166*	+$6&>&\&!7s
c$i.


 CG-335E
e*


C]]:t{{3z?'CDFQRjV
6N	  " 
-5.	-s   )H' CH/ 'H,/H4c           	      4   t        |      }i }g }d}|}d| j                  v r| j                  d   }d| j                  v rE| j                  | j                  d   d      }	d|	j                         v r|	j                         d   }|dk(  rd}nNt	        |      t
        k(  r<|j                  d      r+| j                  |d      j                  j                         }	 t	        |      t        k(  rt        j                  |d	      }| j                  |      \  }}
}|d
k(  rP|dkD  r| j                  d      }|sd}d| d| }nd| }| j                  ||| j                  d      }	t        j                  | j                  |	j                              }| j!                  d|d   d          |d   d   }|d   d   r|dz   }|D ]  }|d   dk7  rt        |d   d   d   d   d         j                         }|d   d   d   d   d   j                         }| j#                  |d   d   d   d   d         j                         }|d   d   d   d   d   }|j%                  ||||d        n|d k(  r| j'                  |      }|i dfS d!| d"}| j                  ||| j                  d      }	t        j                  | j                  |	j                              }|d   d#   }|}|D ];  }|d$   }|d   j                         }|d%   }d&}|j%                  d'| ||d(|d)       = nB|j                  d'      r'|d*d  }d+| d,| d-}| j                  ||| j                  d      }	t        j                  | j                  |	j                              }|d   d   r|dz   }n|}|d   d.   }|D ]  }t        |d$         j                         }| j#                  |d         j)                  d/d0      }|d   j                         }t+        j,                  d1t+        j.                  |d2               }|j                  d3      r|d4d  }|j%                  ||||d        n	|j                  d5      r|d*d  }|d6|d7}| j1                  ||
|      }d8}|D ]  }|d9| d:t3        ||          z  } | j                  ||| j                  d      }	t        j                  | j                  |	j                              }||d   d;   d<   k  r|dz   }n|}|dk(  rd5t4         d=d>g}|d   d#   d?   }|D ]  }t        |d         j                         }| j#                  |d         j)                  d/d0      }|d@   j                         }|dA   j7                  dB      }t        |dC         }|dDk\  rTt        |dDz        }t        |dDz        }t9        |      dk(  rdE|z   }t9        |      dk(  rdE|z   }|dBz   |z   dBz   |d   z   }n|dA   }|j%                  ||||d        nG|dFk(  rdG| }| j                  ||| j                  d      }	t        j                  | j                  |	j                              }t9        |d         dHk(  r|dz   }n|}|d   }|D ]
  }|d2   dCk  rt        |d         j                         }|d@   j                         }| j#                  |d         j)                  d/d0      }|dI   dJk7  sit+        j,                  d1t+        j.                  |dI               }t+        j,                  d1t+        j.                  |d2               }|j                  d3      r|d4d  }|j                  d3      r|d4d  }|dKz   |z   }|j%                  ||||d        ndL}|D ]  }|dMk(  r||   }|d9| d:||    z  } |j;                  ||      }| j                  ||| j                  d      }	t        j                  | j                  |	j                              }|d   dN   }|d   dO   }|D ](  }|d   dPk7  rt        |d         j                         }| j#                  | j                  |d               }dQ|d@   j                         z   }|d2   j7                  dB      }t        |dC         }|d   }t9        |      dk(  rdE|z   }|dDk\  rMt        |dDz        }t        |dDz        }t9        |      dk(  rdE|z   }t9        |      dk(  rdE|z   }| dB| dB| }n%t        |      }t9        |      dk(  rdE|z   }| dB| }|j%                  ||||d       + t9        |      } ||d#<   ||d;<   ||dR<   | |dS<   | |dT<   |S #  Y xY w)UNr   r    r   r!   r"   r$   r%   Fr&   u   动态   offsetz`https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&offset=&page=z^https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page=rH   rI   rM   itemshas_morer-   DYNAMIC_TYPE_AVmodulesmodule_dynamicmajorarchiverg   duration_textrP   coverrV   u	   收藏夹z@http://api.bilibili.com/x/v3/fav/folder/created/list-all?up_mid=z&jsonp=jsonprL   rO   media_countz/https://api-lmteam.koyeb.app/files/shoucang.pngzfav&&&folder)rW   rX   rY   vod_tagrZ      z8http://api.bilibili.com/x/v3/fav/resource/list?media_id=z&pn=z&ps=20&platform=web&type=0mediasz&quot;"rR   rS   rT   rU      UP主&&&   )midpspnz0https://api.bilibili.com/x/space/wbi/arc/search?&=pagecount   播放列表)rW   rX   vlistrQ   length:r   <   0u   历史记录z(http://api.bilibili.com/x/v2/history?pn=i,  progress|zYhttps://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={}&page={}tidnumPagesr@   videohttps:	pagecountlimittotal)intr   r5   r   r-   r6   r7   r8   r9   r:   r;   r<   r=   r]   r   r^   setCacher_   r?   	getUseridreplacer`   ra   rb   encWbir   r   r>   lenformat)!r   cidr   r+   extr@   videosr    r   rA   rc   rd   rm   r   rM   re   rf   vidri   rP   rh   useridrC   keyremarkinfosminuteshoursprocess	totalTime
remarkinfosecondshour	lenvideoss!                                    r   categoryContentzSpider.categoryContentw   sC
   	T$&&&) OOH%6tzz$//&)2z61!&&(VVXhFr\6F|sv008JJvrJ*//5576
6ldZZU3F  >>&1&&&H_
Qh]]8$FVlmslttz{  {A  BCjkojp
qCzz#vt{{AzF1
**T^^AFF+
,4==4<12&\'"7
6l:qIs
6{''
c)n-.w7	B5I
J
P
P
RC^,-g6yA/RXXZFI/? @ I) TU\ ]^ddfE
i.)
*7
3I
>w
GC
MM	   kNN6"6nq5LKF8S_	`3zz#vt{{AzF1
**T^^AFF+
,4&\&!79s
d)CL EF
;C
MMu~   ~~h	QR3CC5TFRl	m3zz#vt{{AzF1
**T^^AFF+
,4
6l:qII&\(#7s
c$i.


 CG-55hDE
g,


C]]:t{{3z?'CDFQRjV
MM	   ~~j!	QR3r.6KK/6	;3sQse1U6#;'())C zz#vt{{AzF1
**T^^AFF+
,4
T&\&!'**qII
ai#C5)~FGF&\&!'*7s
c%j/


!CG-55hDE
e*


Ch-%%c*K+a.!G"}BU7R< WE
aEkeGggckG#c)KN:V(mV
MM	 ! , n3D6	:3zz#vt{{AzF1
**T^^AFF+
,4	$v,3qII&\7s
:!
c%j/


!C
e*


CG-55hDE
:"}}ZS_)EFWz4;;s:+GHY5!gU#AB-imi'V]]	  * 
e3s
e|s8SQse1SXJC	 
 
C	3zz#vt{{AzF1
**T^^AFF+
,4F|J'9&\(#7s
6{g
c%j/


!Cs7| <=E
SZ%%'
'CZ&&s+J*Q- GmG
7|qW}W"}2T7R< WD	Q4ZdGggay'+V7|WGgg	7)$V
MM	 1 < &k)&.&.!&&/&/	-{s   )f fc                 h   |d   }|j                  d      r|dd  }d}d| d| d}| j                  || j                  d	      }|j                         d
   d   }|ddd}d}	|D ]  }
t	        j
                  dt	        j                  |
d               }| j                  |
d         j                         j                  dd      j                  dd      }|j                  d      r|dd  }|	d| d| d|
d    dz  }	 |	j                  d      |d<   d|gi}|S d| }| j                  || j                  d	      }t        j                  | j                  |j                              }d |d
   v r/d}|d
   d    D ]!  }|d!j                  |d"   |d#   |d#         z  }# n.d$j                  |d
   d%   d"   |d
   d%   d#   |d
   d%   d#         }|| j                  |d
   d         |d
   d&   |d
   d'   t        j                  |d
   d(         j                  d)      |d
   d*   j                  d+d,      j                  d-d.      j                         |d/}|d
   d0   }d}	|D ]  }
t	        j
                  dt	        j                  |
d               }| j                  |
d1         j                         j                  dd      j                  dd      }|j                  d      r|dd  }|	d| d| d| d2|
d3    d	z   }	 d4| }| j                  || j                  d	      }t        j                  | j                  |j                              }|d
   }|	j                  d      d5z   }	|D ]  }
t	        j
                  dt	        j                  |
d               }|j                  d      r|dd  }| j                  |
d         j                         j                  dd      j                  dd      }|	d6j                  |||
d7   |
d3         z   }	 d8|d9<   |	j                  d      |d<   d|gi}|S ):Nr   r~   r{   r   zNhttps://api.bilibili.com/x/v2/medialist/resource/list?mobi_app=web&type=1&oid=z&biz_id=zO&otype=1&ps=100&direction=false&desc=true&sort_field=1&tid=0&with_current=falserH   rK   r#   rM   
media_listr   r	   )rW   rX   vod_play_fromrR   rS   rP   r.   -$*rT   rU   [z]/z$bvid&&&bv_idvod_play_urlrL   z2https://api.bilibili.com/x/web-interface/view?aid=r!   staffu0   [a=cr:{{"id":"UP主&&&{}","name":"{}"}}/]{}[/a],r   nameu/   [a=cr:{{"id":"UP主&&&{}","name":"{}"}}/]{}[/a]ownerrQ   tnamepubdatez%Y-%m-%d %H:%M:%Sdesc     z


)rW   rX   rY   r/   vod_yearvod_contentvod_directorpagespartrB   r   z=https://api.bilibili.com/x/web-interface/archive/related?aid=z$$$z[{}]/{}${}_{}#rg   u   B站视频$$$相关视频r   )r7   r5   r]   r   r`   ra   rb   r_   r9   r   r   r^   r8   r   r   fromtimestamp)r   didrg   bizIdoidr   rA   	videoListrf   playUrlr   ri   r   r@   rM   directorr   s                    r   detailContentzSpider.detailContentI  s   A#^^Jqr75	3YZ]Y^^fglfm  n}  
~3zz#t{{Az61vvx-9!
3
 7u]]:t{{53D'EFFuW~.446>>sCHPPQTVYZDQRjV6("TF(5>*:!<<G  !s+3~cUO6
=
<SEB#
jjdkk2j6!	DNN166*	+$V8VW%uBII%PU,X]^dXeglmsgtuuH & @FFtF|T[G\]bGceijpeqryez  |B  fC  EI  JP  EQ  RY  EZ  [a  Eb  c8""4<#896l5!VW%%%d6l9&=>GGH[\v,v&..vs;CCFDQWWY	# 6l7#)'eMM*dkk%
2C&DE6


eFm
,
2
2
4
<
<S#
F
N
NsTW
X4ABZF6("TF!C5%,qAA7  HuM#
jjdkk1j5!	DNN166*	+$6l)MM#&'eMM*dkk%
2C&DE6ABZF


eGn
-
3
3
5
=
=c3
G
O
OPSUX
Y4'..vtU5\5QV<XX7  5#oc*#n	&
 
-r   c                 (    | j                  ||d      S )N1)searchContentPage)r   r   quicks      r   searchContentzSpider.searchContent  s    			UC	00r   c                 p   g }|rd|i}|S d}d| j                   v r| j                   d   }d| j                   v rE| j                  | j                   d   d      }d|j                         v r|j                         d   }|dk(  rd}nNt        |      t        k(  r<|j                  d      r+| j                  |d      j                  j                         }	 t        |      t        k(  rt        j                  |d	
      }| j                  |      \  }}}d| d| }	| j                  |	| j                  |d      }t        j                  | j                  |j                              }
d|
d   vrd|idfS |
d   d   }|D ]   }t	        |d         j                         }| j                  | j                  |d               }d|d   j                         z   }	 |d   j                  d      }t!        |d         }|d   }t#        |      dk(  rd|z   }|dk\  rMt	        |dz        }t	        |dz        }t#        |      dk(  rd|z   }t#        |      dk(  rd|z   }| d| d| }n%t	        |      }t#        |      dk(  rd|z   }| d| }|j%                  ||||d       # d|i}|S #  Y xY w#  Y 7xY w)NrL   r   r    r   r!   r"   r$   r%   Fr&   zOhttps://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword=rn   rH   )rK   rJ   r#   r@   rM   rl   rg   rP   r   rQ   rS   r   r   r   r   rV   )r   r5   r   r-   r6   r7   r8   r9   r:   r;   r<   r]   r   r^   r_   r>   r   r   r?   )r   r   r   r   r   r@   r    rA   rB   r   jore   rf   rg   rP   rh   r   r   r   r   ri   s                        r   r   zSpider.searchContentPage  s   &

F6 =& OOH%6tzz$//&)2z61!&&(VVXhFr\6F|sv008JJvrJ*//5576
6ldZZU3F ',&!Q
YZ]Y^^deidjk#
jjdkk61jE!zz$..()"RZ6
A
vJx 'c	SZ			 3t~~c'l;<5	CJ$$&	&3Z&&s+J*Q- GmG 
'laGmGmw"}D'B,G
4yA~$JT
7|qW}WvQwiq	*F'lG
7|qW}Wy'#F	==	 3 @ 
6& 
-W s   )J( 'J0(J-0J5c           
         i }|j                  d      rPdj                  |dd        }| j                  || j                  d      }|j	                         d   }|d   }|d   }	n|j                  d	      }
|
d
   }|
d   }	dj                  ||	      }d}| j                  }d|v r|d   }d|v r;| j                  |d   d      }d|j	                         v r|j	                         d   }|dk(  rd}nNt        |      t        k(  r<|j                  d      r+| j                  |d      j                  j                         }	 t        |      t        k(  rt	        j                  |d      }| j                  |      \  }}}t        t	        j                  |            }d|v rt        |d         }nd}d
|d<   d|d<   d| dt        |       d| d|	 d| 
|d<   | j                  |d<   d j                  |	      |d!<   d"|d#<   |S #  Y xY w)$Nzbvid&&&z5https://api.bilibili.com/x/web-interface/view?bvid={}   r!   r   rM   rg   r   rB   r   rl   zZhttps://api.bilibili.com/x/player/playurl?avid={}&cid={}&qn=120&fnval=4048&fnver=0&fourk=1r   r    r   r"   r$   r%   Fr&   threadr   parser   z3http://127.0.0.1:9978/proxy?do=py&type=mpd&cookies=&url=&aid=&cid=&thread=r   r]   z/https://api.bilibili.com/x/v1/dm/list.so?oid={}danmakuapplication/dash+xmlr   )r7   r   r5   r]   r   r>   r   r-   r6   r8   r9   r:   r;   r<   r   )r   flagpidvipFlagsr@   r   rA   rM   rg   r   idListr    r   cookiesDictrB   rJ   r   s                    r   playerContentzSpider.playerContent  s4   &^^I	@	G	GAB	P3zz#t{{Bz71
&&(6
4	e3	e3IIcN6	3	3dkkloqtu#&*x 6zzz*V$bz11!&&(VVXhFr\6F|sv008JJvrJ*//5576
6ldZZU3F nnV,+q!$**[)*'
8$%66&/&GyPUV[\_V`Uaafgjfkkpqtpuu}  E  ~F  G&-[[&GNNsS&+&	-s   >)H   Hc                 h    |d   dk(  r| j                  |      S |d   dk(  r| j                  |      S y )Nr-   mpdmedia)proxyMpd
proxyMedia)r   rC   s     r   
localProxyzSpider.localProxy  s;    F^u
--
F^w
//&
!!	r   c                      y r   r
   r   s    r   destroyzSpider.destroy  r   r   c                 d   | j                  |      \  }}}|dk(  rdd|gS d}d|d   d   v r|d   d   d   r|g|d   d   d   z   n|g}|D ]  }d|vs n | j                  j                         }d	|v r|d	   |d
<   d|v r||d<   ddd |gS t        j                  ||d      }dd|j
                  gS )Nr      r   r   
backup_urldurlr   mcdn.bilivideo.cnrangeRangez127.0.0.1:7777Locationi.  z
video/MP2TTrK   stream   application/octet-stream)getDashr]   copyr[   r\   content)	r   rC   r   	durlinfos	mediaTyper   urlListr]   rA   s	            r   r   zSpider.proxyMpd	  s   "&,,v"6'9i%&
00	3?KyY_O`abOc?chqrxhyz{h|  ~J  iKgY6*1-l;;  RY  QZ7s#%
  KK6WoF7O#F:tV,,||C51*AII
66r   c                    | j                  |      \  }}}d|v rt        |d         }|d   |   }nd|v rt        |d         }|d   |   }ng dS d}d|v r|d   r|d   g|d   z   n|d   g}	|	D ]  }d	|vs n |dk(  rg dS | j                  j                         }
d
|v r|d
   |
d<   t	        j
                  ||
d      }dd|j                  gS )Nvideoidr   audioidaudio)i  z
text/plainr   r   	backupUrlbaseUrlr   r   r   Tr   r   r   )r   r   r]   r   r[   r\   r   )r   rC   forceRefreshrB   	dashinfosr   dashinfor  r   r   r]   rA   s               r   r   zSpider.proxyMedia  s   LL(/!Y&	"#7 )8F	"#7 )8
!!
#=HH=TYabmYnXi !H[$99u}  H  vI  uJ'c$	  	BY
!!;;&G_6'?ll3t4!
)199	55r   c                    |d   }|d   }t        |d         }d|v r|d   }nd}| j                  j                         }t        j                  |d         }d| d| }	|r| j                  |	       n!| j                  |	      }
|
r|
d	   |
d
   |
d   fS |j                         }| j                  |||d      }t        j                  | j                  |j                              }
|
d   dk7  rdi dfS d|
d   vr|
d   d   d   d   }	 t        t        j                  d|      j                  d            dz
  }t        |      dkD  r#	 | j                  d       dt        |       d| }| j!                  |	|d|
d   |d       ||
d   dfS |
d   d   }|d   }|d   }d}d}g }|d   D ]  }	 t        t        j                  d|d          j                  d            }|j#                  |       |d!   }|d"   }|d#   }|d$   }|d%   }|d&   }|j                         }||d'<   d(t        t        j$                  |             d)t        |       d*| d+| d,| 
}|d-| d.| d/| d0| d1| d2| d3| d4|d5   d6    d7|d5   d8    d9z   }|dz  } d}d} |d:   D ]  }!	 t        t        j                  d|!d          j                  d            }|j#                  |       |!d"   }|!d!   }|!d&   }"|j                         }#| |#d;<   d(t        t        j$                  |             d)t        |       d*| d+| d<|  
}|d=| d.| d1|" d3| d4|!d5   d6    d7|!d5   d8    d9z   }| dz  }  d>| d?| d@|j'                          dA|j'                          dB	}$t)        |      dz
  }| j!                  |	dC|$j+                  dDdE      ||dF       |$j+                  dDdE      |dCfS #  t        t        j                               dz   }Y xY w#  | j                  d       Y xY w#  t        t        j                               dz   }Y ]xY w#  t        t        j                               dz   }Y xY w)GNrg   r   r   r   r   rJ   bilivdmpdcache_rB   r   r  r-   rH   rI   coder   dashrM   r   zdeadline=(\d+)rl   r   iX  zhttp://127.0.0.1:7777zhttp://127.0.0.1:9978/gozhttp://127.0.0.1:7777?url=r   mp4)r   r-   r  	expiresAtrS   minBufferTimer   r  codecs	bandwidth	frameRateheightwidthrO   r   z5http://127.0.0.1:9978/proxy?do=py&type=media&cookies=r   r   r   z	&videoid=z"	      <Representation bandwidth="z
" codecs="z" frameRate="z
" height="z" id="z	" width="z">
	        <BaseURL>z-</BaseURL>
	        <SegmentBase indexRange="SegmentBase
indexRangez#">
	        <Initialization range="Initializationz5"/>
	        </SegmentBase>
	      </Representation>
r  r  z	&audioid=z<	      <Representation audioSamplingRate="44100" bandwidth="z<?xml version="1.0" encoding="UTF-8"?>
	<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" type="static" mediaPresentationDuration="PTzS" minBufferTime="PTzS">
	  <Period>
	    <AdaptationSet mimeType="video/mp4" startWithSAP="1" scanType="progressive" segmentAlignment="true">
	      z|
	    </AdaptationSet>
	    <AdaptationSet mimeType="audio/mp4" startWithSAP="1" segmentAlignment="true" lang="und">
	      z+
	    </AdaptationSet>
	  </Period>
	</MPD>r   r   z&amp;)r-   r   r  r  )r   r]   r   r   r   delCacher=   r5   r^   r8   r   researchgroupr`   r   r   r?   r;   r9   minr   )%r   rC   r  rg   r   r   r   r]   
cookieDictr   rM   rJ   rA   purlr  r  rS   r  	videoinfor   deadlineListr   deadliner  r  r  r  r  void	vidparamsr  	audioinfor  r  aoid	aidparamsr   s%                                        r   r   zSpider.getDash3  s   u#u#u#866;;&zz&+,*
#au%#==
--
4
	?D-tF|;;OO'
jjgvqjA!	DNN166*	+$	&\Q
b"*	4<	
v,v
q
!%
(4'BII/6<<Q?@2EI 
&kAo,	ZZ'( (d}HVHED==$T&\`ijk
fu
$$6l6")z"(O,-)',!e&299.i0@AGGJKH x (O6[!9[!9(O6>5
+4{{}9!9YDU4::V]K^E_D``efklofpeqqvwzv{  |A  BE  AF  FO  PW  OX  Y7A)JW]V^^klukv  wA  BH  AI  IO  PT  OU  U^  _d  ^e e) ##(#7#E"F G!!&}!56F!G H I 9 a<7+ ", )'!e&299.i0@AGGJKH x [!9(O6
+4{{}9!9YDU4::V]K^E_D``efklofpeqqvwzv{  |A  BE  AF  FO  PW  OX  Y7[\e[ffpqwpxx~  @D  E E) ##(#7#E"F G!!&}!56F!G H I 9 a<7% "&N OW  NX  Xl  mz  l{ { 	  	 
	# ,"$)--eC0IXapyz{	S'	"Iu	44U'DIIK 3&I,	ZZ*+&499;#%H0&499;#%Hs0   
1O 
O? /1P1Q "O<?P"P= "Q%c           	      b   d|v rd|v rt        j                  |      }nUt        |j                  d      j	                  d      D cg c]"  }|j                         j	                  dd      $ c}      }| j                  d      }|r|d   }|d   }|||fS d	d
i}t        j                  d||d      }t        j                  |j                        }	|	d   }
|
dk(  r|	d   d   d   j                  dd      d   j	                  d      d   }|	d   d   d   j                  dd      d   j	                  d      d   }| j                  d||t        t        j                               dz   d       |||fS | j                  d|d      }|j                  j                         }d}d}|||fS c c}w )N{};r   rl   r(   rc   rd   
User-AgentrMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36z+http://api.bilibili.com/x/web-interface/navr!   rI   r
  r   rM   wbi_imgimg_url/.sub_urli  )rc   rd   r  zhttps://www.bilibili.com/rH   r   r   )r   r   r:   r9   r>   r=   r[   r\   r8   rsplitr   r   r`   r5   rJ   get_dict)r   r    rJ   cor(   rc   rd   r]   rA   rM   r
  s              r   r<   zSpider.getCookie  s   F]sf}ZZ7fll36G6M6Mc6RS6R288:##C+6RST7MM)$'H6H6
66
!!   F& ll@'[akmn!	AFF	$	f$	QYL#I.55c1=a@FFsKAN6L#I.55c1=a@FFsKAN6==vcRVR[R[R]N^aeNefg
66
!!
jj,fajH!II '&&	&&	  - Ts   'F,c                     d}| j                  ||| j                  d      }t        j                  | j	                  |j
                              }|d   dk(  r|d   d   S y )Nz&http://api.bilibili.com/x/space/myinforH   rI   r
  r   rM   r   )r5   r]   r   r   r^   r8   )r   r    r   rA   rM   s        r   r   zSpider.getUserid  s\    0#
jjfdkk1jE!	DNN166*	+$	&\Q
v,u
 r   c                 6    ddl m}m}  |d      } ||d|      S )Nr   )subcompilez<.*?>r   )r  r6  r7  )r   srcr6  r7  cleans        r   r_   zSpider.removeHtmlTags  s    
'
%	UB	r   c                    ddl m} ddlm} ddlm} g d}||z    |fd|d      d d }t        t        j                               |d	<   t        t        |j                                     }|j                         D 	
ci c]+  \  }	}
|	dj                  t        d
 t        |
                  - }}	}
 ||      } |||z   j                               j                         |d<   |S c c}
}	w )Nr   )md5)reduce)	urlencode)@.   /         5                2   r!      :   rU   -   #      +   rH   1   !   	   *               '      &   )      %   0   r         7   (   =         r   rl   r   3   r            6      8   ;   r{   ?   9   >      $      "   ,   4   c                     | |   z   S r   r
   )siorigs     r   <lambda>zSpider.encWbi.<locals>.<lambda>  s    T!Wr   r   rE  wtsc                 
    | dvS )Nz!'()*r
   )chrs    r   ry  zSpider.encWbi.<locals>.<lambda>  s	    G!3r   w_rid)hashlibr;  	functoolsr<  urllib.parser=  roundr`   r:   sortedro   joinr+   r6   encode	hexdigest)r   rC   rc   rd   r;  r<  r=  mixinKeyEncTabmixinKeykvqueryrx  s               @r   r   zSpider.encWbi  s    $ J.	&$,nbA#2F(		$&-v||~&'&
 lln  q! bggf3SV<== 	 
 F
%)1134>>@&/	-s   0C)r   r+  zhttps://www.bilibili.com)r*  RefererN)F)__name__
__module____qualname__r   r   r   r   rF   rj   r   r   r   r   r   r   r   r   r   r   r<   r   r_   r   retryr]   r
   r   r   r   r      s    *X*XPdCJ1@D*X7&6.e5N!8
& 
 D'r   r   )r  sysr   r`   r   r  r   r   r[   pathr?   base.spiderr   r
   r   r   <module>r     s=    
 
    '    KV Kr   