
    yfzn                    J   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
Z
ddlmZmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/  G d d	e      Z0 G d
 de0      Z1 G d de0      Z2 G d de0      Z3 G d de0      Z4 G d de0      Z5 G d de5      Z6 G d de5      Z7 G d de      Z8 G d de8      Z9 G d de8      Z: G d de8      Z; G d  d!e;      Z< G d" d#e;      Z= G d$ d%e;      Z> G d& d'e;      Z? G d( d)e;      Z@ G d* d+e      ZA G d, d-e      ZB G d. d/e      ZC G d0 d1eC      ZD G d2 d3eC      ZE G d4 d5e      ZF G d6 d7e      ZG G d8 d9eG      ZH G d: d;eG      ZI G d< d=e      ZJy)>    N   )InfoExtractorSearchInfoExtractor   )
Cryptodome)	HTTPError)ExtractorErrorGeoRestrictedErrorInAdvancePagedListOnDemandPagedListbool_or_none
clean_htmldetermine_extfilter_dictfloat_or_noneformat_fieldget_element_by_classint_or_nonejoin_nonemptymake_archive_idmerge_dictsmimetype2extparse_countparse_qs	qualitiessmuggle_urlsrt_subtitles_timecodestr_or_nonetraverse_objtry_callunified_timestampunsmuggle_urlurl_or_noneurlencode_postdatavariadicc                   p    e Zd Z ej                  d      Zd Zd Zd ZddZ	d Z
d Zd	 Zd
 ZddZd Zy)BilibiliBaseIEz-(\d+)\.m4s\?c                 0    t        |dd f      D ci c]  }|d   t        |dd       c}t        |dddd	t        hf      t        |d
      }|rj                  |       D cg c]  }t        |ddd      t        t        |dd            t        |dt        j
                  hf      dt        |j                  d      d      t        |j                  d            t        |j                  d            d }}|j                   fdt        |d      D               j                         t        t        |d            z
  }|r= j                  ddj                  fd|D               d j                                 |S c c}w c c}w )Nsupport_formatsc                     |d   S )Nquality _vs     ;/usr/lib/python3/dist-packages/yt_dlp/extractor/bilibili.py<lambda>z0BilibiliBaseIE.extract_formats.<locals>.<lambda>6   s    aPYl     r+   new_descriptiondisplay_descdash)Ndolbyaudio.)r5   flacr7   baseUrlbase_urlurlmimeType	mime_typecodecsnone	bandwidth  scalesizeid)r;   extacodecvcodectbrfilesize	format_idc              3     K   | ]J  }t        |d dd      t        t        |dd            t        t        |dd            t        |j	                  d            t        |j	                  d            |j	                  d	      rd
nddddj	                  t        |j	                  d                  t        |j	                  d      d      t        |j	                  d            t        |j	                  d            t        |dj
                  j                  hdfdt        hfd      j	                  |j	                  d            d M yw)r9   r:   r;   r<   r=   	frameRate
frame_ratewidthheightr>   r?   NDVHDR10)~   }   rE   r@   rA   rB   rD   )r9   r:   r   Fget_all)r;   rF   fpsrO   rP   rH   rG   dynamic_rangerI   rJ   r+   rK   format)r   r   r   r   get_FORMAT_ID_REsearchr   ).0videoaudiosformat_namesselfs     r0   	<genexpr>z1BilibiliBaseIE.extract_formats.<locals>.<genexpr>G   s!     H    y*eDUJ LM e[,!OP 7!34!%))H"56ii) &fD#'g6::;uyyQU;WX ;!7tD#EIIf$56"599T?3%/$2D2D2K2K1LaP}%u6 #&&uyy7
 Hs   EE)r5   r^   .).r+   z
Format(s) z, c              3   (   K   | ]	  }|     y wNr,   )r]   ir`   s     r0   rb   z1BilibiliBaseIE.extract_formats.<locals>.<genexpr>[   s     1[a,q/1[s   zK are missing; you have to login or become premium member to download them. )r   dictappendr   strlowerr   rZ   r   r   extendkeysset	to_screenjoin_login_hint)	ra   	play_infor
flac_audior7   formatsmissing_formatsr_   r`   s	   `      @@r0   extract_formatszBilibiliBaseIE.extract_formats3   s    ").?AZ-[\
 iL,q*;^LL

 i&/7CRVQW)XY!)-FG
MM*%    y*eDUJ LM"58cii[*AB ;!7tD#EIIf$56$UYYt_5
   	 H  $I/EF!H 	H$ '++-LJZ4[0\\NNZ		1[?1[(['\ ][[_[k[k[mZnp q U
s   F)BFc                 @    | j                  d|||ddd|       d   S )Nz)https://api.bilibili.com/x/player/playurli  )bvidcidfnvalz"Downloading video formats for cid querynotedata_download_json)ra   video_idrx   s      r0   _download_playinfoz!BilibiliBaseIE._download_playinfo`   s@    ""7#C$?5cU; # = >DE 	Er2   c           
          d}t        |j                  d      xs g       D ]4  \  }}||dz    dt        |d          dt        |d          d|d    d	z  }6 |S )
N bodyr   
from --> tocontent

)	enumeraterZ   r   )ra   	json_datasrt_dataidxlines        r0   json2srtzBilibiliBaseIE.json2srtf   s    "9==#8#>B? 	3ICC!G9B24<@AG]^bcg^hGiFjjl O,D2 3H	3 r2   Nc           
         ddd| ddgi}t        | j                  d||r||dn||dd	| 
      d      }t        |dd f      }|sPt        |d      rD| j                  d      j                  d      s$| j	                  d| j                          d       |D ]K  }|j                  |d   g       j                  d| j                  | j                  |d   |            d       M |S )Ndanmakuxmlzhttps://comment.bilibili.com/z.xmlrF   r;   $https://api.bilibili.com/x/player/v2aidrx   rw   rx   zExtracting subtitle info rz   )r}   subtitle	subtitlesc                     |d   xr |d   S )Nsubtitle_urllanr,   r-   s     r0   r1   z/BilibiliBaseIE._get_subtitles.<locals>.<lambda>z   s    1^K\Kiabchai r2   allow_submithttps://api.bilibili.comSESSDATAz7CC subtitles (if any) are only visible when logged in. T)	only_oncer   srtr   rF   r}   )	r   r   _get_cookiesrZ   report_warningro   
setdefaultrg   r   )ra   r   rx   r   r   subtitle_info	subs_listss           r0   _get_subtitleszBilibiliBaseIE._get_subtitlesn   s/   6se4@ 
	 %T%8%82H.1#c*QT7U,SE2 &9 &4 6JK !>i0jk	\-H$$%?@DDZP##&]^b^n^n^p]q$r  C#  D 	A  52.55d&9&9!N:KX&VW7 	
 r2   c           
      t    |xr |xr | j                  d|||ddd      }t        |dddd	d
ddf      xs d S )Nr   r   zExtracting chaptersF)r{   r|   fatalr}   view_points.r   r   r   )title
start_timeend_time)r   r   )ra   r   rx   chapterss       r0   _get_chapterszBilibiliBaseIE._get_chapters   sl     53 54#6#62CsSV?W&e $7 $5 Hv}c D
 '   		r2   c           
   #      K   t        j                  d      D ]T  }t        | j                  d| d| d|d| d      d      }|s y t	        | j
                  |      D ]  }|E d {     V y 7 	w)	Nr   z'https://api.bilibili.com/x/v2/reply?pn=z&oid=z*&type=1&jsonp=jsonp&sort=2&_=1567227301685zExtracting comments from page F)r|   r   )r}   replies)	itertoolscountr   r   map_get_all_children)ra   r   r   r   childrens        r0   _get_commentszBilibiliBaseIE._get_comments   s     ??1% 		$C"##=cU%uLvw >seDE $ S $	%G
  6 6@ $###$		$ $s   A$A2&A0'
A2c              #   "  K   t        |d      t        |d      |j                  d      t        |d      |j                  d      |j                  d      xs dd t        | j                  t        |d	            D ]  }|E d {     y 7 w)
N)memberunamer   midrpidr   messagectimeparentroot)author	author_idrE   text	timestampr   )r   .)r   rZ   r   r   )ra   replyr   s      r0   r   z BilibiliBaseIE._get_all_children   s     "5*=>%e->?))F# (>?7+ii)3V
 	
 D22LHX4YZ 	 H	 s   BBBBc           
   #      K   | j                  d|dd|id|i| j                               }t        |dddd	 f      D ]6  }| j                  |d
   t        t        |j                  d                   8 y w)Nz/https://api.bilibili.com/pgc/web/season/sectionDownloading season info	season_idReferer)r|   r{   headersresultmain_sectionepisodesc                 ,    t        |d         xr |d   S )N	share_urlrE   )r#   r-   s     r0   r1   z:BilibiliBaseIE._get_episodes_from_season.<locals>.<lambda>   s    [;8DQtW r2   r   rE   )r   geo_verification_headersr   
url_resultBiliBiliBangumiIEr   rZ   )ra   ss_idr;   season_infoentrys        r0   _get_episodes_from_seasonz(BilibiliBaseIE._get_episodes_from_season   s     ))=u*;2FGt'D'D'FG * I
 "+.*D0F G 	gE //%"46GUZU^U^_cUdIeff	gs   A6A8c                 (   |xs i }| j                  d|||dd       }|j                  i       j                  t        |ddfddt        hfd	t
        hfd
fd             |   j                  t        |ddt        hfddddddt
        hfd	t
        hfdt        hfdfdf             |   |j                  |   d	   i       <   t        |ddf      D ]0  }|d   |vsd	|d	   i||d   <   | j                  ||||d   |       2 |S )Nz,https://api.bilibili.com/x/stein/edgeinfo_v2)graph_versionedge_idrw   zExtracting divisions from edge rz   r}   
story_listc                     |d   k(  S )Nr   r,   )r.   r/   r   s     r0   r1   z/BilibiliBaseIE._get_divisions.<locals>.<lambda>   s    AiL\cLc r2   r   rx   )r   rx   FrU   edges	questions.choicesrE   option)r   rx   r   )r   r   r   )	cid_edges)r   r   updater   rh   r   _get_divisions)ra   r   r   r   r   r   division_datachoices       `   r0   r   zBilibiliBaseIE._get_divisions   s   O	++:H$1gxX27)< , > 	"%,,?c!C5)}-f ) 	  	gl=6u%c9c ;-0}-!C5)D D
 ;  	 DI>	U7^E2B7@"57Is*CD 	lFi -,16%=+AfY'(##HmUF9DUaj#k	l r2   c              #   N  K   t        | j                  d|d||d      dddt        hf      }| j                  ||dd	|iid      }|j	                         D ]  \  }}| j                  ||      }i || d
| |j                  d       dt        |j                               d   j                  d       | j                  |      t        j                  |d       d|j                  dd       t        |j                  d      d      | j                  ||      d  y w)Nz(https://api.bilibili.com/x/player/wbi/v2zExtracting graph versionr   r{   r}   interactionr   r   rx   r.   r    - r   F)ensure_asciir   descriptionr   
timelengthrA   rB   )rE   r   rs   r   durationr   )r   r   r   r   itemsr   rZ   listvaluesru   jsondumpsr   extract_subtitles)ra   r   rx   metainfor   r   r   rp   s           r0   _get_interactive_entriesz'BilibiliBaseIE._get_interactive_entries   sE    $:H*8C2P   R ]Ok]C	E
 ''-!eS\ARTUV	#//+ 
	JC//#>I!
!C5)$LL12#d5<<>6J16M6Q6QRY6Z5[\//	:"&**U"G!H8<<XegiKjJkl))--*ETR!33HcB 
	s   D#D%rd   )__name__
__module____qualname__recompiler[   ru   r   r   r   r   r   r   r   r   r   r,   r2   r0   r'   r'   0   sH    BJJ/0M+ZE.
$
 	g8r2   r'   c                   \   e Zd ZdZdddddddd	d
eeddeeddddddddddddddeeeedddidddd d!d"d#d$d%dd&d'd(d	d)d*eed+ed,d-d.igd/d0d1d%dd&d'd(d	d)d*eed+ed,d-d.d2d3d4d5dd6ed7d8d9d:d;d<eeed	d=d>d?didd@dddddAdddd	d
eeeedBddidCdDdEdFddGdHdIdJedKdLdMdNeeed	dOddiddPdQdRddSdTdUdVdWdXdYeed	dZddidd[d\d]dd^d_d`dadbdcddeed	dZddiddedfdgdhdidjdkedldmdneeed	dodpd$dqddrdidjdsedldtdneeed	duigd/dvdwdxdyddzd{d|d}d~ddxddddd	dd2dddddddddddddddddddddgZd Zy)
BiliBiliIEzdhttps?://(?:www\.)?bilibili\.com/(?:video/|festival/\w+\?(?:[^#]*&)?bvid=)[aAbB][vV](?P<id>[^/?#&]+)z+https://www.bilibili.com/video/BV13x41117TLBV13x41117TLu(   阿滴英文｜英文歌分享#6 "Closermp4u   滴妹今天唱Closer給你聽! 有史以来，被推最多次也是最久的歌曲，其实歌词跟我原本想像差蛮多的，不过还是好听！ 微博@阿滴英文65880958u   阿滴英文 re:^https?://.*\.(jpg|jpeg|png)$g-P@20170301i*zX)rE   r   rF   r   uploader_iduploader	thumbnailr   tagscomment_countupload_dater   
like_count
view_countr;   	info_dictzold av URL versionz(http://www.bilibili.com/video/av1074402/zre:^https?://.*\.(jpg|jpeg)$u	   菊子桑156160BV11x411K7CNu   【金坷垃】金泡沫g(\Es@20140420iSSz$md5:ce18c2a2d2193f0df2917d270f2e5923)r  rF   r  r  rE   r   r   r  r   r   r  r
  r  r	  skip_downloadT)r|   r;   r  params	Anthologyz+https://www.bilibili.com/video/BV1bK411W797BV1bK411W797u/   物语中的人物是如何吐槽自己的OP的rE   r      r  BV1bK411W797_p1uR   物语中的人物是如何吐槽自己的OP的 p01 Staple Stable/战场原+羽川zcount:10ie^u   打牌还是打桩	15025998420200516z$md5:e3c401cf7bc363118d1783dd74068a68gjtV@)rE   rF   r   r	  r   r  r  r  r  r
  r  r  r   r   )r|   r;   r  playlist_countplaylistzSpecific page of Anthologyz/https://www.bilibili.com/video/BV1bK411W797?p=1r|   r;   r  zvideo has subtitlesz+https://www.bilibili.com/video/BV12N4y1M7rhBV12N4y1M7rhz$md5:96e8bb42c2b432c0d4ce3434a61479c1z$md5:afde2b7ba9025c01d9e3dde10de221e4gxs@20220709u   小夫太渴iCb
1326814124zcount:2)rE   rF   r   r	  r   r   r  r  r   r  r
  r  r  r  r   listsubtitlesz)https://www.bilibili.com/video/av8903802/z$md5:3b1b9e25b78da4ef87e9b548b88ee76a)rE   rF   r   r  r   r   r  r  r  r   r	  r
  r  r  r;   r  r  zvideo has chapterz,https://www.bilibili.com/video/BV1vL411G7N7/BV1vL411G7N7u.   如何为你的B站视频添加进度条分段iRma20211018z$md5:a9a3d6702b3a94518d419b2e9c320a6du   爱喝咖啡的当麻g`"@1680903zcount:6)rE   rF   r   r   r  r   r	  r  r   r  r   r
  r  r  r  z video redirects to festival pagez+https://www.bilibili.com/video/BV1wP4y1P72hBV1wP4y1P72hu   牛虎年相交之际，一首传统民族打击乐《牛斗虎》祝大家新春快乐，虎年大吉！【bilibili音乐虎闹新春】ia20220204z$md5:8681a0d4d2c06b4ae27e59c8080a7fe6u   叨叨冯聊音乐g^In@	528182630)rE   rF   r   r   r  r   r  r   r  r  r  r  znewer festival videozIhttps://www.bilibili.com/festival/2023honkaiimpact3gala?bvid=BV1ay4y1d77fBV1ay4y1d77fu7   【崩坏3新春剧场】为特别的你送上祝福！i@cc20230121z$md5:58af66d15c6a0122dc30c8adfd828dd8u	   果蝇轰gS^@8469526zinteractive/split-path videoz,https://www.bilibili.com/video/BV1af4y1H7ga/BV1af4y1H7gauI   【互动游戏】花了大半年时间做的自我介绍~请查收！！i>v/a20210901z$md5:01113e39ab06e28042d74ac356a08786u   钉宫妮妮Ninicoi  8881297)rE   r   r   r  r   r	  r  r   r  r
  r  r  r  !   BV1af4y1H7ga_400950101u\   【互动游戏】花了大半年时间做的自我介绍~请查收！！ - 听见猫猫叫~z$md5:db66ac7a2813a94b8291dbce990cc5b2g(\5'@)rE   rF   r   r   r  r   r	  r  r   r  r
  r  r  r  z301 redirect to bangumi linkz+https://www.bilibili.com/video/BV1TE411f7f1288525u@   李永乐老师 钱学森弹道和乘波体飞行器是什么？u   我和我的祖国4780u   幕后纪实28609r   u0   钱学森弹道和乘波体飞行器是什么？i   g@i|r]20191021)rE   r   rF   series	series_idseasonr   season_numberepisode
episode_idepisode_numberr   r   r  r  z,https://www.bilibili.com/video/BV1jL41167ZG/BV1jL41167ZGu`   一场大火引发的离奇死亡！古典推理经典短篇集《不可能犯罪诊断书》！)rE   r   rF   zsupporter-only videor;   r  skipz,https://www.bilibili.com/video/BV1Ks411f7aQ/BV1Ks411f7aQu)   【BD1080P】狼与香辛料I【华盟】login requiredz,https://www.bilibili.com/video/BV1GJ411x7h7/BV1GJ411x7h7u4   【官方 MV】Never Gonna Give You Up - Rick Astleyzgeo-restrictedc                     | j                  |      | j                  |      \  }}| j                  |j                        s| j	                  |j                        S | j                  d|d      }d|v}|r|d   }n| j                  d|dd      }|s;t        |d	      d
k(  r| j                          t        |d	      dk(  rt        dd      t        |dt        hf      }|sxt        |d      dk(  r^t        d|      xs d}	t        t        d|	      xs d dt        d|	      xs dz         }
t        d|
 d| j                          d      t        d      |d   }|d   |j                  d      c}| xr) t        | j                  ddddd       dt        !      xs g }t!        |      d"kD  }t#        t%        |      j                  d#d g      d$         }|r1|s/| j'                        r| j)                  ||t*        fd%&      S |r%|xs d"}|d'|d(d)t        ||d"z
  d*f      xs d z  }|j                  d+      }t-        |d d,|xs d"       }|rt        |d-|d"z
  d.f      n|j                  d.      }i }|r;| j/                  |      }t        |d/dd0t0        hfd1d2t"        hfd3fd4d5fd6d7      }i t        |d8d9d:t0        hfdd;d2t"        hfd<dd=t2        hfd>      |t        |d?d@t"        hfdAt"        hfd;dBt"        hfdCd7       t-        |d dD       |rt5        | |      gnd |dE|idF}t        |dG      }|rJ | j6                  | j9                  ||      fi |t        |ddHt"        hf      | j;                  |      dIS i |t=        j                  dJ      dKL      | j?                  ||      | jA                  |      | jC                  |      | j;                  |      dMS )NNwindow\.__INITIAL_STATE__\s*=initial state	videoData	videoInfozwindow\.__playinfo__\s*=z	play infoFr   )errortrueCodemilziThis video may be deleted or geo-restricted. You might want to try a VPN or a proxy server (with --proxy)Texpectedr}   codeiS z
tips-toastr   z
belongs-tou   ，levelz This is a supporter-only video: z. zFailed to extract play inforw   r   z*https://api.bilibili.com/x/player/pagelistjsonp)rw   rQ  zExtracting videos in anthology)r   r{   r|   expected_typer   pc                     d d| d    S )Nhttps://www.bilibili.com/video/z?p=pager,   )r   r   s    r0   r1   z*BiliBiliIE._real_extract.<locals>.<lambda>  s    'FxjPSTYZ`TaSb%c r2   )iegetterz p02d partr   z%s_partpagesrx   )rH  upNameupMidvideoStatuslikesectionEpisodesc                     |d   k(  S )Nrw   r,   r.   r/   r   s     r0   r1   z*BiliBiliIE._real_extract.<locals>.<lambda>1  s    ai8>S r2   cover)r  r  r  r  rU   )upDatanamerg  r   stat)r	  .tag_namepic)r  r  r  r	  r  descpubdate)	viewCount)ri  viewr   )r   r   r  r
  z_p%dr   )rE   _old_archive_idsr   http_headers)rightsis_stein_gater   )r   __post_extractorr   rA   rB   )r   r   r   rs   rt  )"	_match_id_download_webpage_handle_match_valid_urlr;   r   _search_jsonr   raise_login_requiredr	   rf   r   r   ro   rZ   r   r   lenr   r   _yes_playlistplaylist_from_matchesr   r   r   r   r#   r   playlist_resultr   extract_commentsr   r   r   ru   )ra   r;   webpageurlhinitial_stateis_festival
video_dataplay_info_objrp   toastmsgr   page_list_jsonis_anthologypart_idr   old_video_idrx   festival_infor   is_interactiver   s                        @r0   _real_extractzBiliBiliIE._real_extract  s   >>#&55c8D$$TXX.??488,,))*JGUdfno!6&{3J --+Wk8SX . ZM /DEM--//DEM(Waeg g %]VdV4DEIv6%?0wGM2E$/eDJK3O/?E2GHC ):3%r$BRBRBTAUVaeg g$%BCC&{3J$V,jnnW.E% ) (\<hHw#G5   7 $.( .
 ,. 	 >*Q.hsm//dV<R@AD,>,>x,R--%Jc . e e lGr'#a^gPQkSYEZ([(a_a'bccEnnU##CA/GHIPl:1e'DEV`VdVdejVk//#>I(3 +W{mD,f{mD/1SU\]	9
 M
=. (%+?*FF[MJ1)5;-@+ 
 
 :%'+7>N"('K=!A	(
 
 J|GT6BCDIU|!D E[_&,%
* &j2MN'4''--hXFJR ,][*WbVc<d e(,(=(=c(BW ))--*ETR ..sC8!33HcB//	:$($9$9#$> r2   N)r   r   r   
_VALID_URLr   int_TESTSr  r,   r2   r0   r   r      s   xJ = ? J%&< %#
& %98## /%#A 
  #D)'* < F
 'm"'@0*!!$)!E"
 6 -@#i#<,& %A
( &< ;A%&#' <"
" #D)), ; ?%A#%&< 
" T
%, $= E#%A/$! <
" #D)), 3<  a#%A,&<
 #D)#& 'Z N#%A# $<
 #D)#& /= `#%A,$ <
 .w')E0"(!$!!@
 '%L /<W*$ I"! #%<
* > w

 ' > @

 ! > K

 !GFRjr2   r   c                       e Zd ZdZ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d*gZd+ Zy,)-r   z;https?://(?:www\.)?bilibili\.com/bangumi/play/ep(?P<id>\d+)z.https://www.bilibili.com/bangumi/play/ep21495/21495r  u   悠久之翼774	   第二季1182r   u   forever／ef   u   12 forever／efgl)3@i(N20111104r  rE   rF   r7  r8  r9  r   r:  r;  r<  r=  r   r   r   r  r  r  z.https://www.bilibili.com/bangumi/play/ep267851267851   鬼灭之刃4358u	   立志篇26801r   u   残酷u   1 残酷g/$E@i ͨ\20190406zGeo-restrictedr?  z,a making-of which falls outside main sectionz.https://www.bilibili.com/bangumi/play/ep345120345120u   炭治郎篇   u   #1 炭治郎篇gt@i䛉_20201016r  c                 h   | j                  |      | j                  |      }d|v rt        d      d|v r| j                  d       d|i| j	                         }| j                  dddd	|
      }|j                  d      dk(  }t        |ddt        hf      xs i }| j                  |      }|s|sd|v sd|v r| j                  d       | j                  dddi|
      d   }t        fdt        t        |ddt        hf      d      D        di f      \  }|j                  d      xr( t        fdt        t        |d            D        d      \  }	}
|j                  d      }|dt        |ddt        hfdd t        hfd!t        hfd"      t        |d#t        hfd$t        hfd%hfd&t        hfd' hd(      t        |
      t              |	t!        |j                  d)      d*+      | j#                  |j                  d,      |-      | j%                  |      |d.S )/Nu$   您所在的地区无法观看本片zThis video is restrictedu-   正在观看预览，大会员免费看全片z&This video is for premium members onlyr   z2https://api.bilibili.com/pgc/player/web/v2/playurlzExtracting episode4048)ry   ep_id)r{   r   rO  i]r   
video_infou   成为大会员抢先看u   开通大会员观看z,https://api.bilibili.com/pgc/view/web/seasonzGet episode detailsr  c              3   f   K   | ](  \  }}t        |j                  d             k(  r||f * yw)rE   N)r   rZ   )r]   r   epr<  s      r0   rb   z2BiliBiliBangumiIE._real_extract.<locals>.<genexpr>  s6      -8!#r266$<(J6 "I-8s   .1)r   )section.r   .r   r   c              3   x   K   | ]1  \  }}|j                  d       k(  r|dz   |j                  d      f 3 yw)r   r   season_titleN)rZ   )r]   r   er   s      r0   rb   z2BiliBiliBangumiIE._real_extract.<locals>.<genexpr>  s@      :
17auu[!Y. 1WaeeN+,:
s   7:)seasons.)NNr   )rE   rs   r7  series_titler8  square_cover)r7  r8  r  
long_titler   c                     | xs S rd   r,   )xr=  s    r0   r1   z1BiliBiliBangumiIE._real_extract.<locals>.<lambda>  s    aFY> r2   pub_timec                 (    | xr t        ddd|       S )Nr   r  r\  delim	from_dictr   r/   s    r0   r1   z1BiliBiliBangumiIE._real_extract.<locals>.<lambda>  s    A$f-UXde*f r2   )r;  r=  r   r   r   rA   rB   rx   r   )r<  r9  r   r:  r   r   rt  rq  )ru  _download_webpager
   ry  r   r   rZ   r   rf   ru   nextr   rh   r   r#   r   r   r   r~  )ra   r;   r  r   rp   premium_onlyrs   bangumi_infoepisode_infor:  r  r   r<  r=  r   s               @@@r0   r  zBiliBiliBangumiIE._real_extract  s   ^^C(
((j91W<$%?@@<G%%&NOcET%B%B%DE''@* &:(N ( 	 !}}V,6 X|dV,LMSQS	&&y1L,F',QUlpwUw%%&NO**:JH]J' + ::BD (, -8%.|I3QUPVW0YZ[&]-8 ;<R(B$
 !$$[1	&/ 'D :
;D\+;<<>:
 	5#| u% 
 <#^cU;&k]C,{m<* 
 <(3%0#*[M<Y;Z"[(;-8fg	* 
 %!,/$Y/*%immL&AN//
L<L<LU<SY\/] $ 5 5c :#+
 	
r2   Nr   r   r   r  r  r  r,   r2   r0   r   r   [  s    OJ @$!%! & #%<
( @$! " #%<
" !'* ??$! %" & #%<
O;Fz=
r2   r   c                   f    e Zd ZdZ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gdgZd Zy) BiliBiliBangumiMediaIEz<https?://(?:www\.)?bilibili\.com/bangumi/media/md(?P<id>\d+)z1https://www.bilibili.com/bangumi/media/md2409789124097891zCAROLE & TUESDAYz$md5:42417ad33d1eaa1c93bfd2dd1626b829rE   r   r      r;   r  playlist_mincountz.https://www.bilibili.com/bangumi/media/md1565/1565u   攻壳机动队 S.A.C. 2nd GIGz$md5:46cac00bafd645b97f4d6df616fc576d   r  68540r  u   攻壳机动队1077r  r   u   再启动 REEMBODYr   u   1 再启动 REEMBODYgSח@iT20150227r  r  r;   r  r  r  c                    | j                  |      }| j                  ||      }| j                  d|d|      }|d   d   } | j                  | j	                  ||      |fi t        |ddt        hfdt        hfdf      S )NrE  r  	mediaInfor   r   evaluater   r   )ru  r  rx  r}  r   r   rh   )ra   r;   media_idr  r  r   s         r0   r  z$BiliBiliBangumiMediaIE._real_extract  s    >>#&((h7)),gRk*;7#t##**5#6=;!C5) *SE29 +  	r2   Nr  r,   r2   r0   r  r    s    PJB'A

   @5A

 +#%#!"/%"#/$')@
 #FJr2   r  c                   f    e Zd ZdZ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gdgZd Zy)BiliBiliBangumiSeasonIEz?(?x)https?://(?:www\.)?bilibili\.com/bangumi/play/ss(?P<id>\d+)z-https://www.bilibili.com/bangumi/play/ss26801r  r  z$md5:e2cc9848b6f69be6db79fc2a82d9661br  r  r  z,https://www.bilibili.com/bangumi/play/ss22512251u   玲音z$md5:1fd40e3df4c08d4d9d89a6a34844bdc4   r  50188r  1526TVr   WEIRDz1 WEIRDgs@i`P20120725r  r  r  c                     | j                  |      }| j                  ||      }t        | j                  d|d|      dddt        hfdt        hfdfd	      } | j
                  | j                  ||      |fi |S )
Nz-<script[^>]+type="application/ld\+json"[^>]*>infoitemListElement.rh  r   r  FrU   )ru  r  r   rx  rh   r}  r   )ra   r;   r   r  r   s        r0   r  z%BiliBiliBangumiSeasonIE._real_extract9  s    s#((e4NPWY_afg 3% -u5&   $t##D$B$B5#$NPUbYabbr2   Nr  r,   r2   r0   r  r    s    SJ>#A

   >A

 "##!""%"#"$')@
 #FJ
cr2   r  c                        e Zd ZddiZd Zd Zy)BilibiliCheeseBaseIEr   https://www.bilibili.com/c                    t        |dfdfd      }|d   |d   }}t        |d      dk(  rt        d	d
      t        |d      s| j                  d       | j                  d||ddd| j                  d      d   }t              t              | j                  |      t        j                         t        j                  d dt        |dt        hfd hdt        hfdt        hfdt        hfdt        hfdt        hfdt        hfd      t        |d d!t        hfd d"t
        hfd#      | j                  ||$      | j                  |      | j                  d%S )&Nr   c                 &    |d   t              k(  S )NrE   )r  )r.   r/   r  s     r0   r1   z7BilibiliCheeseBaseIE._extract_episode.<locals>.<lambda>K  s    QtWE
%: r2   FrU   r   rx   	ep_statusrU  z)This course episode is not yet available.TrM  playablez8You need to purchase the course to download this episodez0https://api.bilibili.com/pugv/player/web/playurl   r   )avidrx   r  ry   fourkzDownloading playinfo)r{   r   r|   r}   z'https://www.bilibili.com/cheese/play/ep)rE   r<  rs   extractor_key	extractorwebpage_urlr   c                 (    | xr t        ddd|       S )Nindexr   r   r  r  r  s    r0   r1   z7BilibiliCheeseBaseIE._extract_episode.<locals>.<lambda>a  s    A$c-PUab*c r2   r   r   r  rf  release_dateplay)r;  r   	alt_titler   r=  r  r   r  up_infor   r   )r  r  r  )r   rt  rq  )r   r	   ry  r   _HEADERSr   ru   BilibiliCheeseIEie_keyIE_NAMErh   r   r#   r   r~  )ra   r   r  r  r   rx   rp   s     `    r0   _extract_episodez%BilibiliCheeseBaseIE._extract_episodeI  s   #K:2<EJL&U(;Sk2b8 !LW[\\L*5%%&`a''>sURRSTMM(> ( @ AGH	 e$%e,++I6-446)11DUGL
 <#cU+cd(3%0'+7#*[M":%}5,{m<%}5	* 	
" ;&#7 )5;-@) #
* //s/D $ 5 5c : MM/
 	
r2   c                 R    | j                  d| d| || j                  d      d   S )Nz.https://api.bilibili.com/pugv/view/web/season?=r   )r   r|   r}   )r   r  )ra   	query_keyr   s      r0   _download_season_infoz*BilibiliCheeseBaseIE._download_season_infor  sB    ""<YKq
SU]MM(A # CCIK 	Kr2   N)r   r   r   r  r  r  r,   r2   r0   r  r  F  s    67H'
RKr2   r  c                   @    e Zd ZdZdddddddd	dd
ddddeddgZd Zy)r  z:https?://(?:www\.)?bilibili\.com/cheese/play/ep(?P<id>\d+)z-https://www.bilibili.com/cheese/play/ep229832229832r     1 - 课程先导片   视频课 · 3分41秒	   马督工	316568752   课程先导片r      e20230924r  rE   rF   r   r  r  r  r;  r<  r=  r   r   r  r  r  r  c                 h    | j                  |      }| j                  | j                  d|      |      S )Nr  )ru  r  r  )ra   r;   r  s      r0   r  zBilibiliCheeseIE._real_extract  s1    s#$$T%?%?%OQVWWr2   N)r   r   r   r  r  r  r  r,   r2   r0   r  r  x  sK    NJ>*5#&("#%<
 F(Xr2   r  c                   p    e Zd ZdZdddddddd	d
ddddddddddedigddidddddddddgZd Zd Zy)BilibiliCheeseSeasonIEz:https?://(?:www\.)?bilibili\.com/cheese/play/ss(?P<id>\d+)z+https://www.bilibili.com/cheese/play/ss59185918uB   【限时五折】新闻系学不到：马督工教你做自媒体u?   帮普通人建立世界模型，降低人与人的沟通门槛r  r  r  r  r  r  r  r  r  r   r   r  r  r  r  playlist_items1)r;   r  r  r     zpaid video in listr;   r  r  r@  c              #   ^   K   t        |dd df      D ]  }| j                  ||        y w)Nr   c                     |d   S )Nepisode_can_viewr,   r-   s     r0   r1   z<BilibiliCheeseSeasonIE._get_cheese_entries.<locals>.<lambda>  s    K]I^ r2   rE   )r   r  )ra   r   r  s      r0   _get_cheese_entriesz*BilibiliCheeseSeasonIE._get_cheese_entries  s8     !+
<^`d/ef 	<E''U;;	<s   +-c           
          | j                  |      }| j                  d|      } | j                  | j                  |      |fi t	        |dt
        hfdt
        hfd      S )Nr   r   r   r  )ru  r  r}  r  r   rh   )ra   r;   r   r   s       r0   r  z$BilibiliCheeseSeasonIE._real_extract  so    NN3'	00iH#t##$$[19;!C5) *SE2)  	r2   N)r   r   r   r  r  r  r  r  r,   r2   r0   r  r    s    NJ<Y\
 .9'*,&"#')@!
 $ $S)36 =Y\

 $	5#FJ<	r2   r  c                       e Zd Zd Zy)BilibiliSpaceBaseIEc                 `     d       |      }t        fd|d   |d         }||fS )Nr   c                 0     | r |             S       S rd   r,   )r   
fetch_page
first_pageget_entriess    r0   r1   z7BilibiliSpaceBaseIE._extract_playlist.<locals>.<lambda>  s    sJsOK 
K r2   
page_count	page_size)r   )ra   r  get_metadatar  metadata
paged_listr  s    ` `  @r0   _extract_playlistz%BilibiliSpaceBaseIE._extract_playlist  s?    ]

+'K\"H[$9;
 ##r2   N)r   r   r   r  r,   r2   r0   r  r    s    $r2   r  c                   <    e Zd ZdZdddidddddid	dgZd
 Zd Zy)BilibiliSpaceVideoIEzGhttps?://space\.bilibili\.com/(?P<id>\d+)(?P<video>/video)?/?(?:[?#]|$)z(https://space.bilibili.com/3985676/videorE   3985676   r  z*https://space.bilibili.com/313580179/video	313580179\   c                   	 | j                  d|d      }d }t        |ddd|hf      xs d}t        |ddd	|hf      xs d
}||z   	g }dD ]%  t        	fd      }|s|j                  |       ' dj	                  |      d d S )Nz,https://api.bilibili.com/x/web-interface/navFrI  c                 T    | | j                  d      dz   d  j                  d      d   S )N/r   .r   )rfindsplit)r  s    r0   r1   z9BilibiliSpaceVideoIE._extract_signature.<locals>.<lambda>  s+    1773<!#3#4!5!;!;C!@!C r2   r}   wbi_imgimg_url 34478ba821254d9d93542680e3b86100sub_url 7e16a90d190a4355a78fd00b32a38de6)@.   /   r  r   5                2   
      :      -   #   r  +   r
  1   r0  	   *               '   r  &   )   r  %   0      r     7   (   =   r     r   r   <   3            r  6      8   ;      ?   9   >      $      "   ,   4   c                          S rd   r,   )positionsession_keys   r0   r1   z9BilibiliSpaceVideoIE._extract_signature.<locals>.<lambda>  s    H0E r2   r   r4  )r   r   r    rg   rn   )
ra   playlist_idsession_datakey_from_urlimg_keysub_keysignature_valueschar_at_positionrd  re  s
           @@r0   _extract_signaturez'BilibiliSpaceVideoIE._extract_signature  s    **+Y[fns*tC69i,HJ pMo 	69i,HJ pMo 	 '
 	:H
  ((EF ''(89	: ww'("--r2   c                    	  j                  |      j                  dd      \  }|s j                  d        j                        	 	fd}d } fd} j	                  |||      \  }} j                  |      S )NrE   r^   ztA channel URL was given. Only the channel's videos will be downloaded. To download audios, add a "/audio" to the URLc                    dddd| dz   dddt        t        j                               d	
}t        j                  t        j
                  j                  |        j                               j                         |d
<   	 j                  dd|  |      }|d   dk(  rt        dd      |d   S # t        $ rF}t        |j                  t              r&|j                  j                  dk(  rt        dd       d }~ww xY w)Nr   rm  truewebr   rR  r   i )
keywordr   orderorder_avoidedplatformpnpstidweb_locationwtsw_ridz/https://api.bilibili.com/x/space/wbi/arc/searchDownloading page r|   r{   i  zKRequest is blocked by server (412), please add cookies, wait and try later.TrM  rO  iozKRequest is blocked by server (401), please add cookies, wait and try later.r}   )r  timehashlibmd5urllibparse	urlencodeencode	hexdigestr   r	   
isinstancecauser   status)page_idxr{   responser  rf  ra   	signatures       r0   r  z6BilibiliSpaceVideoIE._real_extract.<locals>.fetch_page  s   ""!'!l '499;'E %[[FLL,B,B5,I+J9+)V)])])_`jjlE'N../`/:CTU]T^A_gl / n 4'$alpr rF## " aggy1aggnn6K(eptv v	s   B5 5	D>AC??Dc                 X    | d   d   }| d   d   }t        j                  ||z        |dS )NrX  rw  r   r  r  )mathceil)	page_datar  entry_counts      r0   r  z8BilibiliSpaceVideoIE._real_extract.<locals>.get_metadata!  s>    !&)$/I#F+G4K"iii(?@& r2   c              3   |   K   t        | d      xs g D ]$  }j                  d|d    t        |d          & y w)N)r   vlistrW  rw   )r   r   r   r  r   ra   s     r0   r  z7BilibiliSpaceVideoIE._real_extract.<locals>.get_entries)  sL     %i1BCIr too(Gf&WYcejkqerssts   9<)rw  grouprm   rm  r  r}  )
ra   r;   is_video_urlr  r  r  r  r  rf  r  s
   `       @@r0   r  z"BilibiliSpaceVideoIE._real_extract  s    $($9$9#$>$D$DT7$S!\NN K L ++K8		$8		t  $55j,P[\*##J<<r2   N)r   r   r   r  r  rm  r  r,   r2   r0   r  r    sH    [J9)
 ! <+
  F..1=r2   r  c                   (    e Zd ZdZdddiddgZd Zy)	BilibiliSpaceAudioIEz/https?://space\.bilibili\.com/(?P<id>\d+)/audioz*https://space.bilibili.com/313580179/audiorE   r"  r   r  c                       j                  |       fd}d } fd} j                  |||      \  }} j                  |      S )Nc                 L    j                  dd|  | dz   dddd      d   S )	Nz;https://api.bilibili.com/audio/music-service/web/song/upperr|  r   rR  rQ  )uidrv  rw  rs  rQ  r}  r}   r~   )r  rf  ra   s    r0   r  z6BilibiliSpaceAudioIE._real_extract.<locals>.fetch_page>  sM    &&M{(
3)ARRS^ef ' h iop pr2   c                     | d   | d   dS )N	pageCountpageSizer  r,   )r  s    r0   r  z8BilibiliSpaceAudioIE._real_extract.<locals>.get_metadataD  s    '4&z2 r2   c              3      K   | j                  dg       D ]$  }j                  d|d    t        |d          & y w)Nr}   !https://www.bilibili.com/audio/aurE   )rZ   r   BilibiliAudioIEr  s     r0   r  z7BilibiliSpaceAudioIE._real_extract.<locals>.get_entriesJ  sK     "vr2 woo(I%PT+&WYhjoptjuvvws   ;>)ru  r  r}  )ra   r;   r  r  r  r  r  rf  s   `      @r0   r  z"BilibiliSpaceAudioIE._real_extract;  sQ    nnS)	p		w  $55j,P[\*##J<<r2   Nr  r,   r2   r0   r  r  1  s*    CJ;+
  F=r2   r  c                   ,     e Zd ZddZd Z fdZ xZS )BilibiliSpaceListBaseIEc              #      K   t        |g t        |t        t        t        t
        f      d|t        h      D ]  }| j                  d| t        |         y w)N.rW  )r   r%   rh   bytesrf   rl   r   r   )ra   r  	bvid_keys
ending_keyrw   s        r0   _get_entriesz$BilibiliSpaceListBaseIE._get_entriesS  sf      ,shy3tUXBY.Z,s\_,sak,snqmr,st 	^D//$CD6"JJX\]]	^s   AAc                 Z    | j                  d| |d      }| j                  d|dd      S )Nzhttps://space.bilibili.com/FrI  u)   (?s)<title\b[^>]*>([^<]+)的个人空间-r  )r  _search_regex)ra   r  rf  r  s       r0   _get_uploaderz%BilibiliSpaceListBaseIE._get_uploaderW  s@    ((+Fse)Lkaf(g!!"NPWYckp!qqr2   c                 |    t         |   |||      \  }}|j                  dd        |j                  dd        ||fS )Nr  r  )superr  pop)ra   r  r  r  r  	page_list	__class__s         r0   r  z)BilibiliSpaceListBaseIE._extract_playlist[  sC    #g7
LR]^)\4([$'""r2   )rw   )r   r   r   r  r  r  __classcell__)r  s   @r0   r  r  R  s    ^r# #r2   r  c            
       6    e Zd ZdZddddddeedd	d
dgZd Zy)BilibiliCollectionListIEzWhttps?://space\.bilibili\.com/(?P<mid>\d+)/channel/collectiondetail/?\?sid=(?P<sid>\d+)zEhttps://space.bilibili.com/2142762/channel/collectiondetail?sid=574452142762_57445u7   【完结】《底特律 变人》全结局流程解说r   u   老戴在此2142762zThttps://archive.biliimg.com/bfs/archive/e0e543ae35ad3df863ea7dea526bc32e70f4c091.jpg)rE   r   r   r  r  r   r  r  r8  r  c                     	  j                  |      j                  dd      \  	 d	  	fd} fd} fd} j                  |||      \  }}  j                  |fi |S )Nr   sidr.   c           
      J    j                  dd|  | dz   dd      d   S )Nz>https://api.bilibili.com/x/polymer/space/seasons_archives_listr|  r   rR  )r   r   page_numr  r}  r}   r~   r  r   rf  ra   r  s    r0   r  z:BilibiliCollectionListIE._real_extract.<locals>.fetch_pagew  sK    &&P$5hZ"@!A\^_ ' a bhi ir2   c                     | d   d   }| d   d   }t        j                  ||z        |j                        dt        | ddt        hfddt        hfddt
        hfdd	t        hfdd
t        hfd      S )NrX  r  totalr  r  r  metarh  r   r   ptimerf  )r   r   r  r   r  )r  r  r  r   rh   r   r   r#   )r  r  r  r   rf  ra   s      r0   r  z<BilibiliCollectionListIE._real_extract.<locals>.get_metadata}  s    !&)+6I#F+G4K"iii(?@& ..sK@ y$fse4$*MC5#A$*EK=#A"('K=!A"('K=!A+ 	 r2   c                 (    j                  | d      S Narchivesr  r  ra   s    r0   r  z;BilibiliCollectionListIE._real_extract.<locals>.get_entries      $$Y
;;r2   )rw  r  r  r}  )
ra   r;   r  r  r  r  r  r   rf  r  s
   `      @@@r0   r  z&BilibiliCollectionListIE._real_extracts  sy    ((-33E5ASQsen	i	 	<  $55j,P[\*#t##JHxHHr2   Nr   r   r   r  r  rh   r  r  r,   r2   r0   r  r  b  s>    kJV!N&$o	
   FIr2   r  c                   8    e Zd ZdZddddddddeed		d
dgZd Zy)BilibiliSeriesListIEzUhttps?://space\.bilibili\.com/(?P<mid>\d+)/channel/seriesdetail/?\?\bsid=(?P<sid>\d+)zMhttps://space.bilibili.com/1958703906/channel/seriesdetail?sid=547718&ctype=01958703906_547718   直播回放
   靡烟miya
1958703906=a20211127)	rE   r   r   r  r  r   r  modified_timestampmodified_date  r  c                    	
  j                  |      j                  dd      \  
 d
 t         j                  d
 d      ddd	t        hfddd
t        hfdddt
        hfdddt        hfdddt        hfd      	 
fd}	 fd} fd} j                  |||      \  }}  j                  |fi |S )Nr   r  r.   z3https://api.bilibili.com/x/series/series?series_id=FrI  r}   r  rh  r   r   mtime)r   r   r  r   r  c           
      J    j                  dd|  | dz   dd      d   S )Nz*https://api.bilibili.com/x/series/archivesr|  r   rR  )r   r8  rv  rw  r}  r}   r~   r  s    r0   r  z6BilibiliSeriesListIE._real_extract.<locals>.fetch_page  sJ    &&<$5hZ"@!8a<rR ' T U[\ \r2   c                     | d   d   }| d   d   }t        j                  ||z        |j                        dS )NrX  rD   r  r  )r  r  r  )r  r  r  r   rf  playlist_metara   s      r0   r  z8BilibiliSeriesListIE._real_extract.<locals>.get_metadata  sY    !&)&1I#F+G4K"iii(?@& ..sK@  	 r2   c                 (    j                  | d      S r  r  r  s    r0   r  z7BilibiliSeriesListIE._real_extract.<locals>.get_entries  r  r2   )	rw  r  r   r   rh   r   r   r  r}  )ra   r;   r  r  r  r  r  r   rf  r  r  s   `      @@@@r0   r  z"BilibiliSeriesListIE._real_extract  s    ((-33E5ASQsen$T%8%8A#G\a &9 &
 ffse4"FMC5A"FEK=A &'K=A#)67[M"J
	\		<  $55j,P[\*#t##JHxHHr2   Nr  r,   r2   r0   r  r    sA    iJ^%#)$'#%"% 

 ! F !Ir2   r  c                   F    e Zd ZdZdddddddd	eed
eeddddddgZd Zy)BilibiliFavoritesListIEzlhttps?://(?:space\.bilibili\.com/\d+/favlist/?\?fid=|(?:www\.)?bilibili\.com/medialist/detail/ml)(?P<id>\d+)zDhttps://space.bilibili.com/84912/favlist?fid=1103407912&ftype=create
1103407912   【V2】（旧）r      晓月春日84912_20201109Sre:http://i\d\.hdslb\.com/bfs/archive/14b83c62aa8871b79083df1e9ab4fbc699ad16fe\.jpg)rE   r   r   r  r  r   r  r  r  r  r  r  rT  r  z6https://www.bilibili.com/medialist/detail/ml1103407912Tr;   only_matchingc                    | j                  |      }| j                  d| d|d      }|d   dk(  r| j                  d       | j                  | j                  d	| |d
      d      } | j                  ||fi t        |dddt        hfdt        hfddt        hfddt        hfdt        hfdt        hfdt        hfddt        hfddt        hfd	f      S )Nz9https://api.bilibili.com/x/v3/fav/resource/list?media_id=z&pn=1&ps=20zDownloading favlist metadata)r|   rO  rL  zAThis is a private favorites list. You need to log in as its ownerr  z8https://api.bilibili.com/x/v3/fav/resource/ids?media_id=zDownload favlist entriesr}   r  r   introupperrh  r   r   r  rf  cnt_infor  thumb_up)	r   r   r  r  r   r  r  r  r  )
ru  r   ry  r  r}  r   rh   r   r   r#   )ra   r;   fid	list_infoentriess        r0   r  z%BilibiliFavoritesListIE._real_extract  s)   nnS!''GuKX4 ( 6	 V$%%*m%n##D$7$7FseL0 %8 %239; $t##GS 
LVU[u%#cU+ &3%0#U[M:!K=1#*[M":!K=1%v}=%zK=A
^
 
M 
5 
 
	r2   Nr  r,   r2   r0   r  r    sZ     AJU(&"#%"% o
  !$ H#F,r2   r  c                   *    e Zd ZdZdddidddgZd Zy	)
BilibiliWatchlaterIEz7https?://(?:www\.)?bilibili\.com/watchlater/?(?:[?#]|$)z*https://www.bilibili.com/watchlater/#/listrE   
watchlaterr   rB  r  c                     t        | j                  |      j                  d      dd      }| j                  d|      }|d   dk(  r| j	                  d       | j                  |d	      }| j                  ||d
      S )N
DedeUserIDvaluer  z<https://api.bilibili.com/x/v2/history/toview/web?jsonp=jsonprO  iz0You need to login to access your watchlater listr  )r}   r   u   稍后再看r  )getattrr   rZ   r   ry  r  r}  )ra   r;   list_idwatchlater_infor  s        r0   r  z"BilibiliWatchlaterIE._real_extract  s    $++C044\BG\Z--JGU6"d*%%*\%]##O5EF##G~#NNr2   Nr  r,   r2   r0   r  r    s*    KJ;L) 	 FOr2   r  c                       e Zd ZdZdddddddd	d
ddddddddddddeeeedgdddiddddid
ddddd d!d"d#d$d%d&d'dd(ddid'ddd)dd*id+d,dd-dd*id+d,dgZd. Zd/ Zy0)1BilibiliPlaylistIEzDhttps?://(?:www\.)?bilibili\.com/(?:medialist/play|list)/(?P<id>\w+)z3https://www.bilibili.com/list/1958703906?sid=5477185_547718r  r  r  r  r  )rE   r   r  r  r   r  r  r  zShttps://www.bilibili.com/list/1958703906?sid=547718&oid=687146339&bvid=BV1DU4y1r7tzBV1DU4y1r7tzr  uB   【直播回放】8.20晚9:30 3d发布喵 2022年8月20日21点场20220820r   i
cr  g%s@zbilibili 687146339_part1)rE   rF   r   r  r   r   r  r  r  r   r	  r
  r  r  rp  
noplaylistTr#  zbhttps://www.bilibili.com/medialist/play/1958703906?business=space_series&business_id=547718&desc=1rE   zredirect urlr  z*https://www.bilibili.com/list/ml11034079123_1103407912r  r  r  r  r  r  )rE   r   r  r  r   r  r  rT  z4https://www.bilibili.com/medialist/play/ml1103407912z(https://www.bilibili.com/list/watchlaterr  r   rB  z2https://www.bilibili.com/medialist/play/watchlaterc           
   #     K   t        j                  d      D ]b  }| j                  d||d|d    d|       d   }| j                  |dd	
      E d {    t	        |d      |d<   |j                  dd      rb y  y 7 *w)Nr   z5https://api.bilibili.com/x/v2/medialist/resource/listzgetting playlist biz_idz page rz   r}   
media_listbv_id)r  )r  rU  rE   oidhas_moreF)r   r   r   r  r   rZ   )ra   r{   r  r  r  s        r0   _extract_medialistz%BilibiliPlaylistIE._extract_medialistV  s     !* 	H++Gu->uX>OvV^U_+` ,  I ((LW(UUU'	3KLE%L==U3	
 Vs   AB A>%B :B c                    | j                  |      }t        t        |      d      }| j                  ||      s| j	                  d| t
              S | j                  ||      }| j                  d|d|      }t        |ddt        hf      dk7  r~t        |ddt        hf      }t        |dd	t        hf      }|d
k(  r|dk(  r| j                  d       n)|dk(  r| j                  d       n|dk(  rt        dd      t        d| d|       dddt        |ddt        hfddt        hfdt        hfdt        hfdt        ht        ht        j                  hfd      }d|d    d|d     it        |d!d"t        hfd#d$t        hfd#d%t        hfd&t        hfd't        hfd(f      }	 | j                   | j#                  ||      fi |	S ))N)rw   r   rW  rE  rF  rJ  rO     rK  r   ipr  z4You need to login to access your watchlater playlistrL  z:This is a private playlist. You need to login as its owneri+  zPlaylist is no longer availableTrM  zCould not access playlist: r\  r_  F)rw  with_currentr  typerE   rx  	sortFiledrl  )r  r  rx  
sort_fieldrl  r.   r  mediaListInfor   r  rh  r   r   rf  )r   r  r  r   r  )ru  r   r   r{  r   r   r  rx  r   r   ry  r	   r   rh   ri   r#   r}  r  )
ra   r;   r  rw   r  r  
error_codeerror_messager{   r  s
             r0   r  z BilibiliPlaylistIE._real_extracta  s   ..%HSM;7!!'40??%DTF#KZXX((g6))*JGUdfmn+'GHCO%mgzK=5YZJ()k]8[\MT!g&=))*`at#))*fgu$$%FQUVV #>zl!M?![\\ !

 =#Vk];%tk];}-*[M:,+L+ 

 U6]O1U8_$56	
=?!C5)$fse4 '>%}5%}5= + 	
 $t##D$;$;E7$KXxXXr2   N)	r   r   r   r  r   r  r  r  r  r,   r2   r0   r  r    s   XJD#$'#%
 ! e Y%#'$<  !; <
"  &'* t*
 ! < (&"#%o
   F.
   :L) 	 DL) 	}CFJ	)Yr2   r  c                   D    e Zd ZdZdZdZdddddddid	gZd
 Zd Zd Z	y)BilibiliCategoryIEzBilibili category extractori@B z7https?://(?:www\.)?bilibili\.com/v/[a-zA-Z]+\/[a-zA-Z]+z&https://www.bilibili.com/v/kichiku/madzkichiku: madr  r;  playlistend)r;   r  r  r  c           	   #      K   | j                  ||||dd|d|      }t        |dt              }|st        d|z        |D ]   }| j	                  d|d	   z  d
|d	          " y w)N
Search_keyrv  Extracting results from page z of rz   )r}   r  rR  z)Failed to retrieve video list for page %dz!https://www.bilibili.com/video/%srw   BiliBili)r   r   r   r	   r   )ra   api_url	num_pagesr{   r  parsed_json
video_listr^   s           r0   _fetch_pagezBilibiliCategoryIE._fetch_page  s     ))Uh"G<DiP * R "+/CSWX
 !Lx!WXX 	`E//3eFmCZQVW]Q^` `	`s   A'A)c           	      L   dddddddi}||vr(t        d| d	t        |j                                      |||   vr+t        d
| dt        ||   j                                      ||   |   }d|z  }| j                  |||dd      }t	        |dt
              }t        |j                  d            t        |j                  d            }
}	|	|
st        d      t        j                  |	|
z        }t        t        j                  | j                  |||      |
      S )Nkichikur  rS   rT        )madmanual_vocaloidguidetheatrecoursezThe category z( isn't supported. Supported categories: zThe subcategory z= isn't supported for this category. Supported subcategories: zPhttps://api.bilibili.com/x/web-interface/newlist?rid=%d&type=1&ps=20&jsonp=jsonpr	  r  r   )r}   rX  rR  r   rD   z-Failed to calculate either page count or size)r	   r   rk   r   r   rf   r   rZ   r  r  r   	functoolspartialr  )ra   categorysubcategoryr{   rid_map	rid_valuer  	page_jsonr  r   rD   r  s               r0   _entrieszBilibiliCategoryIE._entries  s    #&
 7" z)RSWX_XdXdXfSgRhik kgh// ";-/mnrsz  |D  tE  tJ  tJ  tL  oM  nN  OP PH%k2	dgpp''UZ]>^'_	 ,<DQ	!)--"89;y}}U[G\;]t= !PQQIIedl+	 !2!2gy%"9:>@ 	@r2   c                     t         j                  j                  |      j                  j	                  d      dd \  }}|d|}| j                  | j                  |||      ||      S )Nr&  r   rS  : )r  r  urlparsepathr)  r}  r)  )ra   r;   r$  r%  r{   s        r0   r  z BilibiliCategoryIE._real_extract  sa     & 5 5c : ? ? E Ec J1Q O+$k2##DMM(K$OQVX]^^r2   N)
r   r   r   r  _MAX_RESULTSr  r  r  r)  r  r,   r2   r0   r  r    sM    +GLKJ7 #
  2

 
F`@@_r2   r  c                   \    e Zd ZdZdZdZddddddd	d
ddddedddeeeddgdigdgZd Z	y)BiliBiliSearchIEzBilibili video searchi 
bilisearchuX   bilisearch3:靡烟 出道一年，我怎么还在等你单推的女人睡觉后开播啊r:  uL   靡烟 出道一年，我怎么还在等你单推的女人睡觉后开播啊r  r  BV1n44y1Q7scr  um   “出道一年，我怎么还在等你单推的女人睡觉后开播啊？”【一分钟了解靡烟miya】ic20221201z$md5:43343c0973defff527b5a4b403b4abf9r  gDl^@r  r  zbilibili 988222410_part1)rE   rF   r   r   r  r   r	  r  r   r  r
  r  r  r  rp  )r;   r  r  r  c              #     K   | j                  d      j                  d      s(| j                  ddt        j                          d       t        j                  d      D ]f  }| j                  d|d| |||dd	dd
dd	dd
      d   j                  d      }|s y |D ]&  }| j                  |d   dt        |d                ( h y w)Nr   buvid3z.bilibili.cominfocr   z4https://api.bilibili.com/x/web-interface/search/typer  r   r   rp  r^   )
r  rr  rX  contextr   tids_2__refresh__search_typetids	highlightr}  r}   r   arcurlr  r   )
r   rZ   _set_cookieuuiduuid4r   r   r   r   rh   )ra   r{   r  videosr^   s        r0   _search_resultsz BiliBiliSearchIE._search_results  s       !;<@@J_h4::<.8NO!* 	VH((F4XJ?"'$$! ! #)#*!"H )   3x=   VooeHoz3uU|CTUUV#	Vs   CC
N)
r   r   r   IE_DESCr.  _SEARCH_KEYr   r  r  rB  r,   r2   r0   r0  r0    s{    %GLKi`c

 $ I')E(#+!$!!@%?$@
  F8Vr2   r0  c                       e Zd ZddZy)BilibiliAudioBaseIENc                 B    |sd|i}| j                  d|z   ||      d   S )Nr  z3https://www.bilibili.com/audio/music-service-c/web/r   r}   r~   )ra   r-  r  r{   s       r0   	_call_apizBilibiliAudioBaseIE._call_api
  s;    CLE""ADHu # $& 	&r2   rd   )r   r   r   rH  r,   r2   r0   rF  rF  	  s    &r2   rF  c                   H    e Zd ZdZddddddedd	d
ddigiddddeddZd Zy)r  z4https?://(?:www\.)?bilibili\.com/audio/au(?P<id>\d+)z(https://www.bilibili.com/audio/au1003142 fec4987014ec94ef9e666d4d158ad03b1003142m4au   【tsukimi】YELLOW / 神山羊tsukimiu   YELLOW的mp3版！   originrF   lrczre:^https?://.+\.jpgiE]20190803u   tsukimi-つきみぐー)rE   rF   r   artistr
  r   r   r   r  r   r  r  r  )r;   r  r  c                    | j                  |      }| j                  d|      }|d   d   t        |j                  d            ddg}|D ]%  }|j	                  di       j                  d|i       ' | j                  d	|      }|d
   }|j                  d      xs i }d }	|j                  d      }
|
rdd|
igi}	||||j                  d      t        |j                  d            |j                  d      t        |j                  d            |	|j                  d      t        |j                  d            |j                  d      t        |j                  d            dS )Nr;   cdnsr   rD   r?   )r;   rJ   rH   rq  r   z	song/infor   	statisticlyricrO  r   commentr  r   rf  passtimer   r  )rE   r   rs   rR  r
  r   r   r   r  r   r  r  )ru  rH  r   rZ   r   r   )ra   r;   au_id	play_datars   a_formatsongr   rU  r   rV  s              r0   r  zBilibiliAudioIE._real_extract,  sl   s#NN5%0	V$Q'#IMM&$9:
    	H3::3< 	
 ~~k51WHH[)/R		!5 I hhx((y)AB88G,#DHHZ$89"'*$TXXj%9:)%immF&;<
 	
r2   N)r   r   r   r  r  _TESTr  r,   r2   r0   r  r    s[    HJ916 /5 
 1#%1#
E0)
r2   r  c                   *    e Zd ZdZdddddddZd	 Zy
)BilibiliAudioAlbumIEz4https?://(?:www\.)?bilibili\.com/audio/am(?P<id>\d+)z&https://www.bilibili.com/audio/am1062410624u)   每日新曲推荐（每日11:00更新）u,   每天11:00更新，为你推送最新音乐r  rA  )r;   r  r  c                    | j                  |      }| j                  d||ddd      d   }g }|D ]V  }t        |j                  d            }|s |j	                  | j                  d|z   t        j                         |             X |rX| j                  d|      xs i }|j                  d	      }|r/|D ]  }	||	d
<   	 | j                  ||||j                  d            S | j                  ||      S )Nzsong/of-menur   d   )r  rv  rw  r}   rE   r  z	menu/infor   albumr  )	ru  rH  r   rZ   rg   r   r  r  r}  )
ra   r;   am_idsongsr  r\  r  
album_dataalbum_titler   s
             r0   r  z"BilibiliAudioAlbumIE._real_extractd  s   s#E5#EGGMO  	0Ddhhtn-CNN4??3c9&&(#/ 0		0 U;ArJ$..1K$ 1E%0E'N1++UK1HJ J ##GU33r2   Nr   r   r   r  r]  r  r,   r2   r0   r_  r_  X  s)    HJ7@I

 E4r2   r_  c                        e Zd ZdZdddZd Zy)BiliBiliPlayerIEzAhttps?://player\.bilibili\.com/player\.html\?.*?\baid=(?P<id>\d+)zHhttp://player.bilibili.com/player.html?aid=92494333&cid=157926707&page=1Tr  c                 v    | j                  |      }| j                  d|z  t        j                         |      S )Nz"http://www.bilibili.tv/video/av%s/)rY  r   )ru  r   r   r  )ra   r;   r   s      r0   r  zBiliBiliPlayerIE._real_extract  s<    >>#&08;  "X  7 	7r2   Nrh  r,   r2   r0   rj  rj    s    UJYE
7r2   rj  c                   P    e Zd ZdZdZddiZd Zd Zdddd	Zdddd
Z	d Z
d Zy)BiliIntlBaseIEz$https://api.bilibili.tv/intl/gatewaybiliintlr   r  c                     | j                   | j                  |z   g|i |} |j                  d      r|d   dv r| j                          n|d   dk(  r| j	                          n |j                  d      r<t        |d         |d   k7  r(|j                  dd       d| j                   d|d    }n|j                  dd      }|j                  d	      rt        |      | j                  |        |j                  d
      S )NrO  )i$ i% i^ i! r   errnote Unable to download JSON metadatar+   said: r   r}   )	r   _API_URLrZ   ry  raise_geo_restrictedrh   r  r	   r   )ra   endpointargskwargsr   errmsgs         r0   rH  zBiliIntlBaseIE._call_api  s   "t""4==8#;MdMfM488FF|==))+f)))+488I&3tF|+<Y+O &

96X YZZ\]a]i]i\jjqrv  xA  sB  rC  DF#ZZ	3UVF::g&(00''/txxr2   c           
      b    dj                  d t        t        |dd f            D              }|S )Nr   c           	   3   x   K   | ]2  \  }}|d z    dt        |d          dt        |d          d|d     4 yw)r   r   r   r   r   r   N)r   )r]   re   r   s      r0   rb   z*BiliIntlBaseIE.json2srt.<locals>.<genexpr>  s[      P4 1ugR.tF|<=UCYZ^_cZdCeBffhimnwixhyzPs   8:r   c                 (    |d   xr |d   xr |d   S )Nr   r   r   r,   )r.   ls     r0   r1   z)BiliIntlBaseIE.json2srt.<locals>.<lambda>  s    Qy\%Kai%KAdG r2   )rn   r   r   )ra   r   r}   s      r0   r   zBiliIntlBaseIE.json2srt  sC    {{ P$\$K9M &N OP P r2   Nr  r   c                   | j                  d|xs |dddt        dd||d            xs i }i }t               }t        |d	d
t        hf      D ]  }t        |ddt
        hf      D ]  }||v r|j                  |       t        |      }|j                  d      xs d}	|dk(  r%|j                  |	g       j                  d|d       c|dk(  rc| j                  ||xs |ddt        |dd       d|	 dd      }
|
s|j                  |	g       j                  d| j                  |
      d       | j                  d|xs |         |S )Nz/web/v2/subtitleFzDownloading subtitles listz!Unable to download subtitles listrq  en_US)ru  s_localer<  r   )r   r|   rp  r{   )r   video_subtitle.)Nassr   r;   lang_keyenr  r   r   zDownloading subtitleslangz for %sz ()zUnable to download subtitles)r   r|   rp  r   r   zUnexpected subtitle extension)rH  r   rl   r   rf   r#   addr   rZ   r   rg   r   r   r   r   )ra   r  r   sub_jsonr   fetched_urlssubr;   sub_extsub_langsub_datas              r0   r   zBiliIntlBaseIE._get_subtitles  s   >>E-7Z!##	  "    	 	u+JCRVQW*XY 	WC#C*>})UV W,&  %',77:.6$e#((26==$"?  &#22U\c4\#vy5Y4ZZ\]e\ffgh >  3  @H
  !,,Xr:AA#($(MM($;C 
 ''(GRUV1W	W6 r2   c                   | j                  d|xs |ddt        d||d            }|d   }g }|j                  d      xs g D ]  }|j                  d	      xs i }|j                  d
      xs i }|j                  d      s?|j                  |d   d|j                  d      |j                  d      |j                  d      |j                  d      d|j                  d      |j                  d      d	        |j                  d      xs g D ]\  }|j                  d      s|j                  |d   d|j                  d      |j                  d      d|j                  d      d       ^ |S )Nz/web/playurlzDownloading video formatsz Unable to download video formatsrq  )ru  r  r   )r|   rp  r{   playurlr^   video_resourcestream_infor;   r  
desc_wordsrO   rP   r@   r?   r>   rD   )	r;   rF   format_noterO   rP   vbrrG   rH   rJ   audio_resource)r;   rF   abrrG   rH   rJ   )rH  r   rZ   rg   )	ra   r  r   
video_jsonrs   vid	video_resr  auds	            r0   _get_formatszBiliIntlBaseIE._get_formats  s{   ^^ELS/J6k!K ? $ 
  	*
>>'*0b 	C 017RI/52J=='NN ')~~l;"w/#--1 }}[1 #--1%MM&1
 
	  >>"239r 
	C775>NN5zww{+''(+ GGFO 
	 r2   c                     |j                  d      xs |j                  d      |j                  d      |j                  d      t        |j                  d            t        | j                  d|j                  d      xs ddd 	            d
S )Ntitle_displayr   rl  rf  formatted_pub_datez^E(\d+)(?:$| - )r   zepisode numberdefault)r   r   r  r   r=  )rZ   r!   r   r  )ra   r  s     r0   _parse_video_metadataz$BiliIntlBaseIE._parse_video_metadata  s    ^^O4O
w8O%>>&1#0*:>>:N+OP)$*<*<#Z^^O%D%JL\fj += +l m
 	
r2   c                 `   t         j                  st        dd      | j                  dd dd      d   }t         j                  j	                  |d	         }t         j
                  j                  |      j                  |d
   |z   j                  d            }| j                  dd t        |t        j                  |      j                  d      dddd      dd      }|j                  d      r<|j                  d      r t        d| j                   d|d    d      t        d      y )Nz'pycryptodomex not found. Please installTrM  zEhttps://passport.bilibili.tv/x/intl/passport-login/web/key?lang=en-USzDownloading login keyzUnable to download login key)r|   rp  r}   keyhashzutf-8zPhttps://passport.bilibili.tv/x/intl/passport-login/web/login/password?lang=en-USasciirp  r  )usernamepasswordkeep_mer  	isTrustedz
Logging inzUnable to log in)r}   r|   rp  rO  r   zUnable to log in: rr  )r   RSAr	   r   	importKey
PKCS1_v1_5newencryptr  r$   base64	b64encodedecoderZ   r  )ra   r  r  key_data
public_keypassword_hash
login_posts          r0   _perform_loginzBiliIntlBaseIE._perform_login  s?   ~~ !JUYZZ&&SUY(2P ' RRXZ  ^^--huo>
"--11*=EExPVGWZbGbFjFjkrFst((^`dk}$",,];BB7K!## l "+= ) ?
 >>&!~~i($'9$,,wzZcOdNe%fquvv$%788	 "r2   )r   r   r   rs  _NETRC_MACHINEr  rH  r   r   r  r  r  r,   r2   r0   rm  rm    sE    5HN67H $ '+ 'R %)d &P
9r2   rm  c                   n   e Zd ZdZdddddddd	d
d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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-d.d/d0d1d2d3edd4ddd4d5ddd6d7ddgd8d9d:id;d<d=dd>d?d@dAedBdCd9d:id;dDdEddFdGdHdIdJdKdLdM	ddNd:dOdPd:dOdQd:dOdRd:dOg
ZedYdT       ZdU ZdZdVZ	dW Z
dX ZyS)[
BiliIntlIEzzhttps?://(?:www\.)?bili(?:bili\.tv|intl\.com)/(?:[a-zA-Z]{2}/)?(play/(?P<season_id>\d+)/(?P<ep_id>\d+)|video/(?P<aid>\d+))z,https://www.bilibili.tv/en/play/34613/341736341736r  zE2 - The First Night.re:^https://pic\.bstarstatic\.com/ogv/.+\.png$r   20201009z	Episode 2i,_$md5:297b5a17155eb645e14a14b385ab547er   gsh|S@z<Untitled Chapter 1>r   r   r   gx&%d@Introg@g'1@Outro)
rE   rF   r   r  r=  r  r;  r   r   r   r  z0https://www.bilibili.tv/en/play/1033760/1100500611005006z	E3 - Who?r:  z$md5:e1a775e71a35c43f141484715470ad09z	Episode 320211219i|Sag      V@g     c@g     T@gq=
#@)
rE   rF   r   r  r=  r   r;  r  r   r   z0https://www.bilibili.tv/en/play/1005144/1013179010131790z$E140 - Two Heartbeats: Kabuto's Trap   )rE   rF   r   r  r=  zZAccording to the copyright owner's request, you may only watch the video after you log in.r?  z,https://www.bilibili.tv/en/play/34580/340317340317i_20201030r
  zE5 - My Own Steelz$md5:2b17ab10aebb33e3c2a54da9e8e487e2z.re:https?://pic\.bstarstatic\.com/ogv/.+\.png$z	Episode 5g     N@g     `@g     (@g     @)rE   rF   r   r  r=  r   r   r  r;  r
  r   getcommentsTr#  z+https://www.bilibili.tv/en/video/2045730385
2045730385z$md5:693b6f3967fb4e7e7764ea817857c33aijc20221108zUThat Time I Got Reincarnated as a Slime: Scarlet Bond - Official Trailer 3| AnimeStanzRre:https://pic\.bstarstatic\.(?:com|net)/ugc/f6c363659efd2eabe5683fbb906b1582\.jpg)rE   rF   r   r   r  r   r
  r  z0https://www.bilibili.tv/en/play/1048837/1124648911246489zE1 - Operation 'Strix' <Owl>$md5:b4434eb1a9a97ad2bccb779514b89f17ipQbzLhttps://pic.bstarstatic.com/ogv/62cb1de23ada17fb70fbe7bdd6ff29c29da02a64.pngz	Episode 1r   20220409)	rE   rF   r   r   r   r  r;  r=  r  z-https://www.biliintl.com/en/play/34613/341736r  z'https://bilibili.tv/en/video/2019955076z(https://www.bilibili.tv/video/2019955076z+https://www.bilibili.tv/EN/video/2019955076Nc                      |rd| d|  S d|  S )Nz https://www.bilibili.tv/en/play/r&  z!https://www.bilibili.tv/en/video/r,   )r   r8  s     r0   	_make_urlzBiliIntlIE._make_url  s%    5i[(LL28*==r2   c           	      :   t        |i       \  }}|j                  d      r|S | j                  |      }| j                  d|di       xs | j	                  |ddd       }t        |dd	d
t              xs i }|r2|s0| j                  d| d      }t        |dddfdft        d      }t        | j                  |      t        d|      xs | j                  d|      t        d|      xs | j                  d|      d| j                  |i             S )Nr   z&window\.__INITIAL_(?:DATA|STATE)__\s*=zpreload stater  __initialStateF)r   traverse)OgvVideoepDetail)UgcVideorG  )ugcarchiverR  $/web/v2/ogv/play/episodes?season_id=&platform=websections.r   c                 &    t        |d         k(  S )Nr<  )rh   re  s     r0   r1   z4BiliIntlIE._extract_video_metadata.<locals>.<lambda>  s    #ao:NRZ:Z r2   )rS  rV   zbstar-meta__titlezog:titlezbstar-meta__desczog:descriptionr  )r"   rZ   r  rx  _search_nuxt_datar   rf   rH  r   r  r   _html_search_meta_search_json_ld)	ra   r;   r   r   smuggled_datar  initial_datar  season_jsons	     `      r0   _extract_video_metadataz"BiliIntlIE._extract_video_metadata  sp   *33]W%  ((h7 GRackuwx g%%gx9IQVae%f 	 "24MOaquw }z| 	 Z..+OPY{Zg)hjrsK%kC-Z4!52J
 &&z2-'2 a595K5KJX_5`3& 1  f484J4JK[]d4e	5
 ##GXr#BD 	Dr2   c              #     K   | j                  d|d| d| dd||d      }t        |d      D ]  }t        |d	      t        |d
      t        |d      t        |d      |j                  d      t        |j                  d            |j                  d      t	        |j                  d            d  t        |d      s%| j                  ||d   d   d   |      E d {    y y 7 w)Nz(https://api.bilibili.tv/reply/web/detailzDownloading reply comment of r   rq  r_  )ru  rw  r   r  r}  r}   r   .r   rh  r   r   facer   r   r  r   
ctime_text)r   r   author_thumbnailr   rE   r  r   r   r}   cursoris_endr}   r  r  )r   r   rZ   r   r!   _get_comments_reply)ra   root_idnext_id
display_idcomment_api_raw_datar   s         r0   r  zBiliIntlIE._get_comments_reply  s    #226
0	WIF!	  3   $$8:RS 
	G&w0BC)'3DE$0:L$M$W.DEkk&))'++l*CD!++h/.w{{</HI	 	
	 02NO//-f5h?GU U U PUs   C C+"C)#C+c              #   X  K   t        j                  d      D ]  }| j                  d|d|dz    d|d||rdnddd	      }t        |d
      D ]  }t        |d      t        |d      t        |d      t        |d      |j	                  d      t        |j	                  d            t        |j	                  d            t        t        |d            d |j	                  d      s| j                  |j	                  d      |      E d {     t        |d      s y  y 7 w)Nr   z&https://api.bilibili.tv/reply/web/rootzDownloading comment page r   rq  r_  r:  )ru  rv  rw  r   r  	sort_typer}  r  r  r   r  r   r   r  r  )r   r  )r   r   r  r   rE   r  r   author_is_uploaderr   )r  r  )	r   r   r   r   rZ   r   r!   boolr  )ra   r   r  re   r  r   s         r0   r   zBiliIntlIE._get_comments  s:    # 	A#'#6#68(0Q8 %#!&AA!" $7 
$  ((<>VW b*74FG!-g7H!I(4W>P(Q(2HI!++f-"-gkk,.G"H!27;;|3L!M*.|GEW/X*Y	 	 ;;w'#77F8KX`7aaab 02NO9	2 bs   C'D**%D*D(D*$D*c                 *   | j                  |      j                  ddd      \  }}}|xs |}d }|r| j                  d| d|d      xs i }|j                  d      r\t	        t        |d	      d
      t	        t        |d      d
      ddt	        t        |d      d
      t	        t        |d      d
      ddg}d|i| j                  |||      | j                  ||      | j                  ||      || j                  ||      | j                  dS )Nr   r  r   z$/web/v2/ogv/play/episode?episode_id=r  FrI  r@  )r@  opening_start_timerA   )r@  opening_end_timer  r  )r@  ending_start_time)r@  ending_end_timer  rE   r}  )rs   r   r   rt  rq  )rw  r  rH  rZ   r   r   r  r  r   r~  r  )ra   r;   r   r  r   r   r   intro_ending_jsons           r0   r  zBiliIntlIE._real_extract  sS    $ 5 5c : @ @gW\ ]	5#<C $6ug]K !/ !' !-*,  !$$V, #0=NPn0oqu"v -l;LNj.kmq r$
 #0=NPm0npt"u -l;LNi.jlp q$	 (
**3)D
 ((u#(>//e/E  $ 5 5h F MM
 	
r2   rd   )r   N)r   r   r   r  r  r  staticmethodr  r  r  r   r  r,   r2   r0   r  r    s    OJ >+J%"#A"/
 %# 
 '$ 
: B JA"%# /
 #! 
 %$ 
: B<J!
 n >#%(AJ"  /
 #! 
 %" 
4 4
9B =A#%l n	
 4
$ B5A#g"%

 ?
 9 : =SMF^ > >
D:U6>
r2   r  c            	       r    e Zd ZdZdZdddddg dd	ed
ddidddddg dded
ddddddddgZd Zd Zy)BiliIntlSeriesIEzbiliIntl:serieszehttps?://(?:www\.)?bili(?:bili\.tv|intl\.com)/(?:[a-zA-Z]{2}/)?(?:play|media)/(?P<id>\d+)/?(?:[?#]|$)z%https://www.bilibili.tv/en/play/34613r5  34613zTONIKAWA: Over the Moon For Your  )zSlice of lifeComedyRomancer  )rE   r   r   
categoriesr  r  r  T)r;   r  r  r  z(https://www.bilibili.tv/en/media/10488371048837u   SPY×FAMILYr  )	AdventureActionr  z.re:^https://pic\.bstarstatic\.com/ogv/.+\.jpg$r  r  z&https://www.biliintl.com/en/play/34613r  z&https://www.biliintl.com/EN/play/34613c           	   #     K   | j                  d| d|      }t        |dt              D ]V  }t        |d         }| j	                  t        t        j                  ||      | j                  |            t        |       X y w)Nr  r  )r  .r   .rR  r<  )	rH  r   rf   rh   r   r   r  r  r  )ra   r8  series_jsonr;  r<  s        r0   r)  zBiliIntlSeriesIE._entriesR  s     nn'KI;Vc%dfop#K1Scgh 	'GW\23J//+$$Z;**73# :' '	's   BBc                    | j                  |      }| j                  d| d|      j                  d      xs i }| j                  | j	                  |      ||j                  d      |j                  d      t        |dt              t        |j                  d            t        |j                  d	            
      S )Nz'/web/v2/ogv/play/season_info?season_id=r  r9  r   r   )styles.r   rR  horizontal_coverro  )r  r  r  )	ru  rH  rZ   r}  r)  r   r   r#   r   )ra   r;   r8  series_infos       r0   r  zBiliIntlSeriesIE._real_extract[  s    NN3'	nn'NykYf%girsww  yA  B  H  FH##MM)$i1I;??[hKi#K1IYde!+//2D"EFS^_j_n_nou_vSw $ y 	yr2   N)	r   r   r   r  r  r  r  r)  r  r,   r2   r0   r  r  .  s    GyJ66A@J
 T
 :"A;J
   8 89FB'yr2   r  c            	           e Zd ZdZdddddddd	d
dddddddgZddddddddddddddddddddddZ e e ee                  Z	d Z
d  Zd! Zy")#
BiliLiveIEz3https?://live\.bilibili\.com/(?:blanc/)?(?P<id>\d+)zhttps://live.bilibili.com/19633989u   周六杂谈回，其他时候随机游戏。 | 
录播：@下播型泛式录播组。 | 
直播通知群（全员禁言）：666906670，902092584，59971⑧481 （功能一样，别多加）flvu-   太空狼人杀联动，不被爆杀就算赢zYhttps://i0.hdslb.com/bfs/live/new_room_cover/e607bc1529057ef4b332e1026e62cf46984c314d.jpgiQ@eb)rE   r   rF   r   r  r   znot liver?  zwhttps://live.bilibili.com/196?broadcast_type=0&is_room_feed=1?spm_id_from=333.999.space_home.strengthen_live_card.clickTr  z#https://live.bilibili.com/blanc/196lowu   流畅)rK   r  high_resu   高清ultra_high_resu   超清blue_rayu   蓝光sourceu   原画4Kr6   u   杜比)P         i  i'  i N  i0u  c                     | j                  d| ||      }|j                  d      dk7  rt        |j                  d      xs d      |j                  d      xs i S )Nzhttps://api.live.bilibili.com/r   rO  r   r   rq  r}   )r   rZ   r	   )ra   r-  room_idr{   
api_results        r0   rH  zBiliLiveIE._call_api  sb    ((+I$)PRYaf(g
>>&!Q& 	!:!`>`aa~~f%++r2   c              #   &  K   |j                  d      xs g D ]u  }|j                  d      |k7  r|d   D ]V  }|d    |d    |d    |j                  d      |j                  d      | j                  |      d	| j                  |    X w y w)
Ncodec
current_qnurl_infohostr:   extraformat_name
codec_name)r;   rF   rH   r+   )rZ   _quality_FORMATS)ra   qnfmtr  r  s        r0   _parse_formatszBiliLiveIE._parse_formats  s     WWW%+ 
	Eyy&",!*- &v./j0A/B8GCTBUV77=1#ii5#}}R0	
 mmB' 
	s   BBc                    | j                  |      }| j                  d|d|i      }|j                  d      dk(  rt        dd      g }| j                  j                         D ]T  }| j                  d|||d	d
dddd	d      }t        |d      xs g D ]#  }|j                  | j                  ||             % V ||j                  d      |j                  d      |j                  d      j                  d      |dd|idS )Nzroom/v1/Room/get_inforE   live_statusr   zStreamer is not liveTrM  z'xlive/web-room/v2/index/getRoomPlayInfoz0,1z0,20rq  )r  r%  r  rY   mask
no_playurlru  protocol)playurl_infor  stream.rY   .r   r   
user_cover	live_timer   )rE   r   r   r  r   rs   is_liverq  )	ru  rH  rZ   r	   r$  rk   r   rj   r'  )ra   r;   r  	room_datars   r%  stream_datar&  s           r0   r  zBiliLiveIE._real_extract  s    ..%NN#:GdG_U	=='1, !7$GG--$$& 	=B..)RT["!!!	^ 	K $K1jkqoq =t222s;<=	= ]]7+$==7"|4$53
 	
r2   N)r   r   r   r  r  r$  r  r   r   r#  rH  r'  r  r,   r2   r0   r  r  d  s    GJ / `Dt#
  I 5F(  9%h?+HE%h?%h?!$7$X>H Id8n56H, 
r2   r  )Kr  r"  r  r   r   r  r   r~  urllib.parser  r?  commonr   r   dependenciesr   networking.exceptionsr   utilsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r'   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r0  rF  r  r_  rj  rm  r  r  r  r,   r2   r0   <module>r:     s         	    6 % -       Bo] odv vr}
 }
@4^ 4n1cn 1ch/K> /KdX+ X641 4n	$- 	$X=. X=v=. =B#1 # /I6 /Id3I2 3Il/5 /dO2 O&{Y0 {Y|A_ A_H5V* 5Vp&- &C
) C
L$4. $4N7} 7O9] O9dL
 L
^3y~ 3ylU
 U
r2   