o
    ia                    @   s  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
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/m0Z0 G dd	 d	eZ1G d
d de1Z2G dd de1Z3G dd de1Z4G dd de1Z5G dd de1Z6G dd de6Z7G dd de6Z8G dd de1Z9G dd de9Z:G dd de9Z;G dd de9Z<G d d! d!e<Z=G d"d# d#e<Z>G d$d% d%e<Z?G d&d' d'e<Z@G d(d) d)e<ZAG d*d+ d+eZBG d,d- d-eZCG d.d/ d/eZDG d0d1 d1eDZEG d2d3 d3eDZFG d4d5 d5eZGG d6d7 d7eZHG d8d9 d9eZIG d:d; d;eIZJG d<d= d=eIZKG d>d? d?eZLdS )@    N   )InfoExtractorSearchInfoExtractor   )
Cryptodome)	HTTPError)ExtractorErrorGeoRestrictedErrorInAdvancePagedListOnDemandPagedListbool_or_none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parse_resolution	qualitiessmuggle_urlsrt_subtitles_timecodestr_or_nonetraverse_objunified_timestampunsmuggle_urlurl_or_noneurlencode_postdatavariadicc                   @   s   e Zd ZddiZedZdZi Ze	dd Z
dd Zd	d
 Zdd Zdd Zd"ddZdd Zd#ddZdd Zdd Zdd Zdd Zd#ddZd#d d!ZdS )$BilibiliBaseIERefererzhttps://www.bilibili.com/z-(\d+)\.m4s\?   c                 C   s   t | ddS )Nhttps://api.bilibili.comSESSDATA)bool_get_cookiesgetself r.   M/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/bilibili.pyis_logged_in7   s   zBilibiliBaseIE.is_logged_inc                    s^   t t|d tdd t|d fddfD ddi}|r-| d	| d
|    d S d S )N.qualityc                 S   s   g | ]	}t |d ddqS )new_descriptiondisplay_descr2   r   ).0fmtr.   r.   r/   
<listcomp>=   s    z9BilibiliBaseIE._check_missing_formats.<locals>.<listcomp>support_formatsc                    s   |d  vS Nr2   r.   _vparsed_qualitiesr.   r/   <lambda>@       z7BilibiliBaseIE._check_missing_formats.<locals>.<lambda>delim, z
Format(s) zD are missing; you have to become a premium member to download them. )setr   r   	to_screen_login_hint)r-   	play_infoformatsmissing_formatsr.   r>   r/   _check_missing_formats;   s   z%BilibiliBaseIE._check_missing_formatsc                    sJ  dd t |ddd fD t |dddd	thf t |d
}|r% | dd  D }| fddt |dD  |rE|| t |ddd dthfdtddhfdthfdf}|r||d d tt |ddt	|dkr{|ddni t |dthfdt
hfdjhfdtddhfd t|d |S )!Nc                 S   s   i | ]}|d  t |ddqS )r2   r3   r4   r5   )r6   rr.   r.   r/   
<dictcomp>G   s    z2BilibiliBaseIE.extract_formats.<locals>.<dictcomp>r9   c                 S      |d S r:   r.   r;   r.   r.   r/   r@   I       z0BilibiliBaseIE.extract_formats.<locals>.<lambda>dash)Ndolbyaudio.)rO   flacrQ   c                 S   sf   g | ]/}t |d ddtt |ddt |dtjhfdt|ddd	t|d
t|ddqS )baseUrlbase_urlurlmimeType	mime_typecodecsnone	bandwidth  scalesizeid)rU   extacodecvcodectbrfilesize	format_id)r   r   strlowerr   r+   r   r   )r6   rQ   r.   r.   r/   r8   P   s    
z2BilibiliBaseIE.extract_formats.<locals>.<listcomp>c                 3   s    | ]f}t |d ddtt |ddtt |ddt|dt|d|d	 r,d
nddddt|dt|dddt|dt|dt |djjhdfdthfdd|ddV  qdS )rS   rT   rU   rV   rW   	frameRate
frame_ratewidthheightrX   rY   NDVHDR10)~   }   r_   rZ   r[   r\   r^   )rS   rT   r   Fget_all)rU   r`   fpsrj   rk   rb   ra   dynamic_rangerc   rd   r2   re   format)r   r   r   r   r+   _FORMAT_ID_REsearchr   )r6   videoaudiosformat_namesr-   r.   r/   	<genexpr>Z   s(    

z1BilibiliBaseIE.extract_formats.<locals>.<genexpr>)rO   rw   .durlc                 S   s   t |d S )NrU   r!   r;   r.   r.   r/   r@   o   rA   rU   lengthr[   r\   r^   )rU   durationrd   r   ).rd   )rU   rd   r   http_dash_segments)	fragmentsprotocolr2   
timelength)r2   re   format_noter   )r   dictappendextendrJ   r!   r   r   sumlenr   r+   r   )r-   rG   
flac_audiorH   r   r.   rx   r/   extract_formatsF   sR   





zBilibiliBaseIE.extract_formatsc              	      s   t   | jdd| j k r| jd S | jd|dd}dt|dd	d
dd hf g d}| jd fdd|D d d t   d | jd S )Ntsr   keyz,https://api.bilibili.com/x/web-interface/navzDownloading wbi signnote datawbi_img)img_urlsub_urlc                 S   s   |  dd dd S )N/r   .r   )
rpartition	partitionxr.   r.   r/   r@          z-BilibiliBaseIE._get_wbi_key.<locals>.<lambda>)@.   /      r   5                2   
      :      -   #      +      1   !   	   *               '      &   )      %   0            7   (   =         r   r   <   3   r&            6      8   ;      ?   9   >      $      "   ,   4   c                 3   s    | ]} | V  qd S Nr.   )r6   ilookupr.   r/   r{      s    z.BilibiliBaseIE._get_wbi_key.<locals>.<genexpr>r   )r   r   )time_wbi_key_cacher+   _WBI_KEY_CACHE_TIMEOUT_download_jsonjoinr   update)r-   video_idsession_datamixin_key_enc_tabr.   r   r/   _get_wbi_key   s   

zBilibiliBaseIE._get_wbi_keyc                 C   sZ   t t |d< dd t| D }tj|}t| | 	| 
  |d< |S )Nwtsc              	   S   s*   i | ]\}}|d  tdd t|qS )r   c                 S   s   | dvS )Nz!'()*r.   )charr.   r.   r/   r@      rN   z5BilibiliBaseIE._sign_wbi.<locals>.<dictcomp>.<lambda>)r   filterrf   )r6   kr=   r.   r.   r/   rL      s    z,BilibiliBaseIE._sign_wbi.<locals>.<dictcomp>w_rid)roundr   sorteditemsurllibparse	urlencodehashlibmd5r   encode	hexdigest)r-   paramsr   queryr.   r.   r/   	_sign_wbi   s   
$zBilibiliBaseIE._sign_wbiNc                 C   sp   ||dd|pi }| j r|dd  |d }r#d| d| }nd| }| jd|| ||||d	d
 S )Ni  )bvidcidfnvaltry_lookqnzDownloading video format z	 for cid z"Downloading video formats for cid z-https://api.bilibili.com/x/player/wbi/playurlr   headersr   r   )r0   popr+   r   r   )r-   r   r   r   r   r   r   r   r.   r.   r/   _download_playinfo   s   
z!BilibiliBaseIE._download_playinfoc              
   C   s\   d}t |dp	g D ] \}}||d  dt|d  dt|d  d|d  d	7 }q|S )
Nr   bodyr   
from --> tocontent

)	enumerater+   r   )r-   	json_datasrt_dataidxliner.   r.   r/   json2srt   s   

zBilibiliBaseIE.json2srtc              
   C   s   ddd| ddgi}| j d||r||dn||dd	| | jd
}t|dr5| jd|   dd t|ddddd fD ]}||d g d| |  |d |d q@|S )Ndanmakuxmlzhttps://comment.bilibili.com/z.xmlr`   rU   (https://api.bilibili.com/x/player/wbi/v2aidr   r   r   zExtracting subtitle info r   r   r   )r   need_login_subtitlez-Subtitles are only available when logged in. T)	only_oncer   subtitle	subtitlesc                 S   s   |d o|d S )Nsubtitle_urllanr.   r;   r.   r.   r/   r@          z/BilibiliBaseIE._get_subtitles.<locals>.<lambda>r  srtr  r`   r   )r   _HEADERSr   report_warningrF   
setdefaultr   r  )r-   r   r   r  r  
video_infosr.   r.   r/   _get_subtitles   s,   



zBilibiliBaseIE._get_subtitlesc              	   C   sD   |o|o| j d|||ddd| jd}t|dddd	d
ddfp!d S )Nr  r  zExtracting chaptersF)r   r   fatalr   r   view_points.r  r  r  )title
start_timeend_time)r   r  r   )r-   r  r   chaptersr.   r.   r/   _get_chapters   s   

zBilibiliBaseIE._get_chaptersc                 c   sh    t dD ]+}t| jd| d| d|d| ddd}|s# d S t| j|D ]}|E d H  q)qd S )	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)r-   r  r  r,  childrenr.   r.   r/   _get_comments   s   zBilibiliBaseIE._get_commentsc                 c   sd    t |dt |d|dt |d|d|dpddV  t| jt |d	D ]}|E d H  q(d S )
N)memberunamer3  midrpidr  messagectimeparentroot)author	author_idr_   text	timestampr;  )r,  .)r   r+   r/  r0  )r-   replyr1  r.   r.   r/   r0     s   z BilibiliBaseIE._get_all_childrenc              	   c   sd    | j d|dd|id|i|  d}t|dddd	d
 fD ]}| |d tt|dV  qd S )Nz/https://api.bilibili.com/pgc/web/season/sectionDownloading season info	season_idr%   )r   r   r   resultmain_sectionepisodesc                 S   s   t |d o	|d S )N	share_urlr_   r}   r;   r.   r.   r/   r@          z:BilibiliBaseIE._get_episodes_from_season.<locals>.<lambda>rG  r_   )r   geo_verification_headersr   
url_resultBiliBiliBangumiIEr   r+   )r-   ss_idrU   season_infoentryr.   r.   r/   _get_episodes_from_season   s   
 z(BilibiliBaseIE._get_episodes_from_seasonc                    s  |pi }| j d|| |dd  d}| i t|dd fddd	thfd
thfdfdd |  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 |  ||  d
 i  < t| ddfD ]}|d |vrd
|d
 i||d < | j||||d |d qn|S )Nz,https://api.bilibili.com/x/stein/edgeinfo_v2)graph_versionedge_idr   zExtracting divisions from edge r   r   r   
story_listc                       |d  kS )NrQ  r.   r;   rQ  r.   r/   r@   	  rA   z/BilibiliBaseIE._get_divisions.<locals>.<lambda>r'  r   )r'  r   Frp   edges	questions.choicesr_   option)rQ  r   r?  )r'  rX  rQ  )	cid_edges)r   r!  r   r   rf   r   _get_divisions)r-   r   rP  rV  rQ  rZ  division_datachoicer.   rU  r/   r[    s:   

	zBilibiliBaseIE._get_divisionsc           	      c   s    t | jd|d||d|ddddthf}| ||dd	|iid}| D ]O\}}| j|||d
did}i || d| |d dtt|	 d | 
|tj|dd d|dd t|ddd| ||dV  q&d S )Nr  zExtracting graph versionr  r   r   r   interactionrP  r   r   r   r   r   r<   r'   - F)ensure_asciir  descriptionr   r   r[   r\   )r_   r'  rH   rc  r   r  )r   r   r   r[  r   r   r+   nextitervaluesr   jsondumpsr   extract_subtitles)	r-   r   r   metainfor   rP  rZ  rV  rG   r.   r.   r/   _get_interactive_entries  s,   $
z'BilibiliBaseIE._get_interactive_entriesNNr   )__name__
__module____qualname__r  recompileru   r   r   propertyr0   rJ   r   r   r   r   r  r$  r+  r2  r0  rO  r[  rk  r.   r.   r.   r/   r$   1   s(    

@




r$   c                   @   s  e Zd ZdZdddddddd	d
eeddeedgdddddddddddddeeeeddg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/d0gd1igd2d3id4d5d6d'dd(d)d*d	d+d,eed-ed.d/d0gd1d7d8ddddd9dddd	d
eeeedgd:ddid;d<d=i d>d?d@ddAdBdCdDdEdFdGdHdIedJdKdLdMdNdOdPdQdRedSedTedUd	dVdWgddiddXdYdZdd[d\d]d^d_d`daeed	dbgdcd7dddedfddgdhdidjdkdldmeed	dngdcd7dodpdqdrdsdtduedvdweeeed	dxgdydzd{d|d}giiid~d&dddrddigddddddddddddeeeed	dgdd7dddddddedddeeed	dgddd&ddddddedddeeed	dgdigdddddddddddddddddddd7ddddddddddddddddddd7ddi d>dÓd@ddAdēdIedGdœdLdƓdEdǓdJdȓdCdɓdNdʓdRedSedTedUd	dd̓dVdgddiddМdddddԜdd֜dddddԜdd֜dddddԜdd֜ddddgZdd ZdS )
BiliBiliIEzthttps?://(?:www\.)?bilibili\.com/(?:video/|festival/[^/?#]+\?(?:[^#]*&)?bvid=)(?P<prefix>[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*zXzbilibili 8903802_part1)r_   r'  r`   rc  uploader_iduploader	thumbnailr   tagscomment_countupload_dater@  
like_count
view_count_old_archive_idsrU   	info_dictzold av URL versionz(http://www.bilibili.com/video/av1074402/BV11x411K7CNu   【金坷垃】金泡沫u	   菊子桑156160g(\Es@20140420iSSz$md5:ce18c2a2d2193f0df2917d270f2e5923zre:^https?://.*\.(jpg|jpeg)$zbilibili 1074402_part1)r_   r`   r'  rz  ry  r   r~  r@  rc  r  r}  r  r|  r{  r  skip_downloadT)r   rU   r  r   	Anthologyz+https://www.bilibili.com/video/BV1bK411W797BV1bK411W797u/   物语中的人物是如何吐槽自己的OP的r_   r'  r   r  BV1bK411W797_p1uR   物语中的人物是如何吐槽自己的OP的 p01 Staple Stable/战场原+羽川zcount:10ie^u   打牌还是打桩	15025998420200516z$md5:e3c401cf7bc363118d1783dd74068a68gjtV@zbilibili 498159642_part1)r_   r`   r'  r|  r@  r{  rz  ry  r  r}  r~  r  rc  r   r  playlist_items2)r   rU   r  playlist_countplaylistr   zSpecific page of Anthologyz/https://www.bilibili.com/video/BV1bK411W797?p=1r   rU   r  z)https://www.bilibili.com/video/av8903802/z$md5:3b1b9e25b78da4ef87e9b548b88ee76ar_   r`   r'  r~  rc  r@  ry  rz  r{  r   r|  r}  r  r  r  rU   r  r   zvideo has chapterz,https://www.bilibili.com/video/BV1vL411G7N7/r_   BV1vL411G7N7r`   r'  u.   如何为你的B站视频添加进度条分段r@  iRmar~  20211018rc  z$md5:a9a3d6702b3a94518d419b2e9c320a6dr|  rz  u   爱喝咖啡的当麻r   g`"@ry  1680903r*  zcount:6r}  r  r  r{  r  zbilibili 463665680_part1z video redirects to festival pagez+https://www.bilibili.com/video/BV1wP4y1P72hBV1wP4y1P72hu   牛虎年相交之际，一首传统民族打击乐《牛斗虎》祝大家新春快乐，虎年大吉！【bilibili音乐虎闹新春】ia20220204z$md5:8681a0d4d2c06b4ae27e59c8080a7fe6u   叨叨冯聊音乐g^In@	528182630zbilibili 893839363_part1)r_   r`   r'  r@  r~  rc  rz  r   ry  r  r  r{  r  znewer festival videozIhttps://www.bilibili.com/festival/2023honkaiimpact3gala?bvid=BV1ay4y1d77fBV1ay4y1d77fu7   【崩坏3新春剧场】为特别的你送上祝福！i@cc20230121z$md5:58af66d15c6a0122dc30c8adfd828dd8u	   果蝇轰gS^@8469526zbilibili 778246196_part1zlegacy flv/mp4 videoz0https://www.bilibili.com/video/BV1ms411Q7vw/?p=4BV1ms411Q7vw_p4uX   [搞笑]【动画】云南方言快乐生产线出品 p04 新烧包谷之漫游桃花岛i߶V20160317u!   云南方言快乐生产线出品u   一笑颠天3916081zbilibili 4120229_part4)r_   r'  r@  r~  rc  r   rz  ry  r  r}  r  r|  r{  r  extractor_argsbilibiliprefer_multi_flv32r   BV1ms411Q7vw_p4_0flvgʡx@)r_   r`   r'  r   )r   rU   r  r   r  r  zlegacy mp4-only videoz+https://www.bilibili.com/video/BV1nx411u79KBV1nx411u79Ku9   【练习室】201603声乐练习《No Air》with VigoVanioY20171025u4   @ZERO-G伯远
声乐练习 《No Air》with Vigo VangjtT@u   伯远10584494zbilibili 15700301_part1)r_   r`   r'  r@  r~  rc  r   rz  ry  r}  r  r  r|  r{  r  zinteractive/split-path videoz,https://www.bilibili.com/video/BV1af4y1H7ga/BV1af4y1H7gauI   【互动游戏】花了大半年时间做的自我介绍~请查收！！i>v/a20210901z$md5:01113e39ab06e28042d74ac356a08786u   钉宫妮妮Ninicoi  8881297zbilibili 292734508_part1)r_   r'  r@  r~  rc  r|  rz  r   ry  r}  r  r  r{  r  r   BV1af4y1H7ga_400950101u\   【互动游戏】花了大半年时间做的自我介绍~请查收！！ - 听见猫猫叫~z$md5:db66ac7a2813a94b8291dbce990cc5b2g(\5'@r_   r`   r'  r@  r~  rc  r|  rz  r   ry  r}  r  r  r{  r  )r   rU   r  r  r  z3redirect from bvid to bangumi link via redirect_urlz+https://www.bilibili.com/video/BV1TE411f7f1288525u@   李永乐老师 钱学森弹道和乘波体飞行器是什么？u   我和我的祖国4780u   幕后纪实28609r   u0   钱学森弹道和乘波体飞行器是什么？i   g@i|r]20191021zre:https?://.*\.(jpg|jpeg|png)$)r_   r'  r`   series	series_idseasonrC  season_numberepisode
episode_idepisode_numberr   r@  r~  r{  z2redirect from aid to bangumi link via redirect_urlz0https://www.bilibili.com/video/av1148681621412031933368u   PV 引爆变革的起点goʑO@u   时光代理人5183u	   第三季r   105212u   引爆变革的起点iiZzh20250718)r_   r'  r`   r   r  r  r  r  rC  r  r  r  r@  r~  r{  z)video has subtitles, which requires loginz+https://www.bilibili.com/video/BV12N4y1M7rhBV12N4y1M7rhz$md5:96e8bb42c2b432c0d4ce3434a61479c1z$md5:afde2b7ba9025c01d9e3dde10de221e4gxs@20220709u   小夫太渴iCb
1326814124r  zcount:2zbilibili 898179753_part1listsubtitleszlogin required for subtitle)r   rU   r  r   skipz,https://www.bilibili.com/video/BV1jL41167ZG/BV1jL41167ZGu`   一场大火引发的离奇死亡！古典推理经典短篇集《不可能犯罪诊断书》！)r_   r'  r`   zsupporter-only videorU   r  r  z,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-restrictedz)has - in the last path segment of the urlz<https://www.bilibili.com/festival/bh3-7th?bvid=BV1tr4y1f7p2&)r   rU   only_matchingc                    s    |dd\} }j||d\}} |js%|jS ||d< jd|dd d}|sjd|d	i dd
rHtdddddi}|	 }|dkr[| |d< n|dkrc|d< j
ddd||d}t|dddthf}	|	rt|	r|	tS tdt|ddkr  t|ddkrtdddd |v}
|
r|d! }n|d  }|d |d"}|
 rtj
d#d$d%d&d'|d(dtd)pg }t|d*k}tt|d+d gd, }|r|srj||tfd-d.d/S |r!|pd*}|d0|d1d2t||d* d3fpd4 7 }|d t d d5|p.d* }|r?t|d6|d* d7fn|d7i }|
rdt|d8d!d9thfd:d;thfd<fd=d.d>fd?d$d@}i t|dAdBdCthfd dDd;thfdEd dFthfdG|t|dHdIthfdJthfdDdKthfdLd$d@ t|d dM |rt|gnd |d|idNt|dO}|r׈jj|dfi t|d dPthf dQS d }jrtjdR|dSd ddthf}|sj |dTd*idU}!||dVrDt|dWdXdYthfpi }t"d"dZ|d[d\ d]#  }s.td^| ddd_t|d`dat$hfv rDj%db| dc t|ddsɇfded.t|dffdgd.t&hfD ]}'t!j |dh|idUfdid. q](| tdjd. }|rt|tk rɈ)dksdl*dmdn |D }tdod. |r+dp| dq ntfdrd.pt,|dsd. dtgtduri dv fdwdxt-dy dz D t.|d{d|d}d~S i t.|d{d|d}/ 0 dS )Nr_   prefixr   r%   window\.__INITIAL_STATE__\s*=initial statedefaultz\bwindow\._riskdata_\s*=risk	v_voucherz1You have exceeded the rate limit. Try again laterTexpectedplatformwebBVr   AVr  z8https://api.bilibili.com/x/web-interface/wbi/view/detailzDownloading redirection URLz"Failed to download redirection URL)r   errnoter   r   r   Viewredirect_urlzUnable to extract initial state)errortrueCodemilziThis video may be deleted or geo-restricted. You might want to try a VPN or a proxy server (with --proxy)	videoData	videoInfor'  z*https://api.bilibili.com/x/player/pagelistFjsonp)r   r  zExtracting videos in anthology)r%  r   r   r   expected_typer   pc                    s   d  d| d  S )Nhttps://www.bilibili.com/video/z?p=pager.   )rN  r   r.   r/   r@     rH  z*BiliBiliIE._real_extract.<locals>.<lambda>)iegetterz p02d partr   z%s_partpagesr   )r  upNameupMidvideoStatuslikesectionEpisodesc                    rT  )Nr   r.   r;   r  r.   r/   r@     rA   cover)rz  ry  r  r{  rp   )upDatanamer  r6  stat)r|  .tag_namepic)rz  ry  r  r|  r{  descpubdate)	viewCount)r  viewrA  )rc  r@  r  r}  z_p%d)r_   r  r'  http_headers)rightsis_stein_gater   )r   __post_extractorzwindow\.__playinfo__\s*=z	play infor   r`  is_upower_exclusiveelecFullInfo	show_info
high_level	sub_titleu   ，)	from_dictrB   z. z This is a supporter-only video: u   试看accept_description.zDThis is a supporter-only video, only the preview will be extracted: r  rO   c                    s   | t  dv S )Nr1   r5   r   )rH   r.   r/   r@         accept_qualityc                    s
    | S r   r.   r;   has_qnr.   r/   r@     s   
 r   c                    s    |d  S r:   r.   r;   r
  r.   r/   r@     r  c                 S   rM   Nr   r.   r;   r.   r.   r/   r@     rN   r  rC   c                 s   s,    | ]}| d  d| d dV  qdS )r    (re   )Nr+   )r6   fr.   r.   r/   r{     s    
z+BiliBiliIE._real_extract.<locals>.<genexpr>c                 S   s   | d S r  r  r;   r.   r.   r/   r@     rA   z$Dropping incompatible flv format(s) zZ since mp4 is available. To extract flv, pass --extractor-args "bilibili:prefer_multi_flv"c                    s   |d t  dd kS )Nr2   r  r   )int_configuration_argr;   r,   r.   r/   r@   "  s    c                 S   s   | d S r:   r.   r   r.   r.   r/   r@   #  rN   )r   )r   r   multi_videoc              
      sv   g | ]7\}}d   d| d d i |dd  dig|dkr+nd|dkr5 nddqS )r_   r<   r'  r  re   r   N)r_   r'  r  rH   r  r   )r+   ri  extract_comments)r6   r  fragment)r  r   rH   rj  r-   r   r.   r/   r8   +  s    

z,BiliBiliIE._real_extract.<locals>.<listcomp>r   r   r   r[   r\   )_typeentriesr   )rH   r   r*  r  r   )1_match_valid_urlgrouprI  _download_webpage_handlerU   rJ  _search_jsonr+   r   upperr   r   r   r!   rK  suitableraise_login_requiredlistr   r   r   _yes_playlistplaylist_from_matchesrs  r   r   r   playlist_resultrk  r  r0   r   r   r   r   rF   rf   r   r  r   rJ   r  r   rE   maxr  r   r+  ri  )r-   rU   r  r   webpageurlhinitial_stater   detailnew_urlis_festival
video_datar'  page_list_jsonis_anthologypart_idold_video_idfestival_infois_interactiverG   r  msgr   flv_formatsdropped_fmtsr.   )r  r   rH   r  rj  r-   r   r/   _real_extract  sP  



*
$



	










zBiliBiliIE._real_extractN)	rm  rn  ro  
_VALID_URLr  r  float_TESTSr4  r.   r.   r.   r/   rs  2  s   	
(	
			    _rs  c                   @   s   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-d.d/d0dd"d#d$d%d&d1d0d2d3d4d5d6dddgZd7d8 Zd9S ):rK  z;https?://(?:www\.)?bilibili\.com/bangumi/play/ep(?P<id>\d+)z.https://www.bilibili.com/bangumi/play/ep21495/21495ru  u   悠久之翼774	   第二季1182r   u   forever／efr   u   12 forever／efgl)3@i(N20111104rw  r_   r`   r  r  r  rC  r  r  r  r  r'  r   r@  r~  r{  r  znew playurlSSRData schemez.https://www.bilibili.com/bangumi/play/ep678060678060u   去你家吃饭好吗619842542u6   吴老二：你家大公鸡养不熟，能煮熟吗…r   uI   一只小九九丫 吴老二：你家大公鸡养不熟，能煮熟吗…gp@i/$c20220916r  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   炭治郎篇r   u   #1 炭治郎篇gt@i䛉_20201016c                    s  |  | |  }| j| |d}d|v rtdd|v r"| d ||d< | jd|d d	d d
p=| jd dd d|d}|d}d|v rK|d }d|v rS|d }|d u r\|d}d|v rd|d }t|ddd ddt	ht
f}|dk}t|dthfpi }| |}	|	s|r|   n|sd|v sd|v r| d t|dt
dd hfr| d|    | jd  d!d" i|dd }
t fd#d$tt|
d%d&thfd'D d'i f\}|
d(otfd)d$tt|
d*D d+\}}|d,} |	d-t|
d.d/thfd.d0thfd1thfd2t|d3thfd4thfd5dhfd6thfd7d hd8 t|t|t|d9d:d;| j |d<|d=| |d|id>S )?Nr  u$   您所在的地区无法观看本片zThis video is restrictedu-   正在观看预览，大会员免费看全片z&This video is for premium members onlyr%   zplayurlSSRData\s*=zembedded page infor  )end_patternr  z2https://api.bilibili.com/pgc/player/web/v2/playurlzExtracting episodei/  )r   ep_idr^  coderawr   rD  pluginsc                 S   s   |d dkS )Nr  AreaLimitPanelr.   r;   r.   r.   r/   r@     rA   z1BiliBiliBangumiIE._real_extract.<locals>.<lambda>configis_blocki]r"  u   成为大会员抢先看u   开通大会员观看))
play_checkplay_detailplay_video_typec                 S   s   | dv S )N)PLAY_PREVIEWpreviewr.   r   r.   r.   r/   r@     rN   z\Only preview format is available, you have to become a premium member to access full video. z,https://api.bilibili.com/pgc/view/web/seasonzGet episode detailsrJ  c                 3   s.    | ]\}}t |d  kr||fV  qdS )r_   N)r   r+   )r6   r  ep)r  r.   r/   r{     s    z2BiliBiliBangumiIE._real_extract.<locals>.<genexpr>)rF  )section.rF  .r   rC  c                 3   s4    | ]\}}| d  kr|d | dfV  qdS )rC  r   season_titleNr  )r6   r  e)rC  r.   r/   r{     s    )seasons.rl  r  )r_   rH   r  series_titler  square_cover)r  r  r{  
long_titler'  c                    s   | p S r   r.   r   )r  r.   r/   r@     rN   pub_timec                 S      | o	t ddd| dS )Nr'  r]  r  rB   r  r   r=   r.   r.   r/   r@     rH  )r  r  r@  r'  r   r[   r\   r   r  )r  r  rC  r  r   r  r   r  )	_match_idrI  _download_webpager	   r  r  r   r+   r   r)   anyr   r   raise_geo_restrictedr   rF   rd  r  rf   r   r!   r   r   ri  r  )r-   rU   r   r$  rG   status_codegeo_blockedpremium_onlyr"  rH   bangumi_infoepisode_infor  rX  r  r.   )r  r  rC  r/   r4    s   












zBiliBiliBangumiIE._real_extractNrm  rn  ro  r5  r7  r4  r.   r.   r.   r/   rK  C  s    QrK  c                   @   sn   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didgZd d! Zd"S )#BiliBiliBangumiMediaIEz<https?://(?:www\.)?bilibili\.com/bangumi/media/md(?P<id>\d+)z1https://www.bilibili.com/bangumi/media/md2409789124097891zCAROLE & TUESDAYz$md5:42417ad33d1eaa1c93bfd2dd1626b829r_   r'  rc  r   rU   r  playlist_mincountz.https://www.bilibili.com/bangumi/media/md1565/1565u   攻壳机动队 S.A.C. 2nd GIGz$md5:46cac00bafd645b97f4d6df616fc576dr   r  68540ru  u   攻壳机动队1077r:  r   u   再启动 REEMBODYr   u   1 再启动 REEMBODYgSח@iT20150227rw  r=  r  r  rU   r  r  r  r   c              	   C   sj   |  |}| ||}| d|d|}|d d }| j| |||fi t|ddthfdthfdfS )Nr  r&  	mediaInforC  r'  evaluater'  rc  )rd  re  r  r"  rO  r   rf   )r-   rU   media_idr$  r&  rL  r.   r.   r/   r4  #  s   
z$BiliBiliBangumiMediaIE._real_extractNrm  r.   r.   r.   r/   rn    J    	&rn  c                   @   sn   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didgZdd Zd S )!BiliBiliBangumiSeasonIEz?(?x)https?://(?:www\.)?bilibili\.com/bangumi/play/ss(?P<id>\d+)z-https://www.bilibili.com/bangumi/play/ss26801rE  rC  z$md5:e2cc9848b6f69be6db79fc2a82d9661brp  r   rq  z,https://www.bilibili.com/bangumi/play/ss22512251u   玲音z$md5:1fd40e3df4c08d4d9d89a6a34844bdc4r   r  50188ru  1526TVr   WEIRDz1 WEIRDgs@i`P20120725rw  r=  r  r  rw  c                 C   sd   |  |}| ||}t| d|d|dddthfdthfdfdd	}| j| |||fi |S )
Nz-<script[^>]+type="application/ld\+json"[^>]*>infoitemListElement.r  rc  rz  Frp   )rd  re  r   r  rf   r"  rO  )r-   rU   rL  r$  rj  r.   r.   r/   r4  [  s   
z%BiliBiliBangumiSeasonIE._real_extractNrm  r.   r.   r.   r/   r}  3  r|  r}  c                   @   s   e Zd Zdd Zdd ZdS )BilibiliCheeseBaseIEc                    s8  t |d fddfdd}|d |d }}t |dd	kr#td
ddt |ds-| d | jd || ddd| jddd }t t | |t tj	d  dt |dt
hfd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 ||d%| || jd&S )'NrF  c                    s   |d t  kS )Nr_   )r  r;   rJ  r.   r/   r@   k  r  z7BilibiliCheeseBaseIE._extract_episode.<locals>.<lambda>Frp   r  r   	ep_statusr  z)This course episode is not yet available.Tr  playablez8You need to purchase the course to download this episodez0https://api.bilibili.com/pugv/player/web/playurlr   r   )avidr   rJ  r   fourkzDownloading playinfor   r   z'https://www.bilibili.com/cheese/play/ep)r_   r  rH   extractor_key	extractorwebpage_urlr'  c                 S   r_  )Nindexr'  ra  r`  ra  rb  r.   r.   r/   r@     rH  r  r   r  r  release_dateplay)r  r'  	alt_titler   r  r{  r@  r  up_infor4  r6  )rz  ry  rc  )r  r   r  )r   r   r  r   r  r   r   BilibiliCheeseIEie_keyIE_NAMErf   r   r!   ri  r  )r-   rM  rJ  rl  r  r   rG   r.   r  r/   _extract_episodei  sX   



z%BilibiliCheeseBaseIE._extract_episodec                 C   s$   | j d| d| || jddd S )Nz.https://api.bilibili.com/pugv/view/web/season?=rB  )r   r   r   )r   r  )r-   	query_keyr   r.   r.   r/   _download_season_info  s   z*BilibiliCheeseBaseIE._download_season_infoN)rm  rn  ro  r  r  r.   r.   r.   r/   r  h  s    )r  c                   @   sB   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d ZdS )r  z:https?://(?:www\.)?bilibili\.com/cheese/play/ep(?P<id>\d+)z-https://www.bilibili.com/cheese/play/ep229832229832ru     1 - 课程先导片   视频课 · 3分41秒	   马督工	316568752   课程先导片r      e20230924rw  r_   r`   r'  r  rz  ry  r  r  r  r   r@  r~  r{  r  r  c                 C   s   |  |}| | d||S )NrJ  )rd  r  r  )r-   rU   rJ  r.   r.   r/   r4    s   
zBilibiliCheeseIE._real_extractN)rm  rn  ro  r5  r  r7  r4  r.   r.   r.   r/   r    s(    r  c                   @   st   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d Zdd ZdS ) BilibiliCheeseSeasonIEz:https?://(?:www\.)?bilibili\.com/cheese/play/ss(?P<id>\d+)z+https://www.bilibili.com/cheese/play/ss59185918uB   【限时五折】新闻系学不到：马督工教你做自媒体u?   帮普通人建立世界模型，降低人与人的沟通门槛rp  r  r  ru  r  r  r  r  r  r   r  r  r  rw  r  r  1rU   r  r  r   r   zpaid video in listrU   r  rr  r  c                 c   s.    t |ddd dfD ]	}| ||V  qd S )NrF  c                 S   rM   )Nepisode_can_viewr.   r;   r.   r.   r/   r@     rN   z<BilibiliCheeseSeasonIE._get_cheese_entries.<locals>.<lambda>r_   )r   r  )r-   rM  rJ  r.   r.   r/   _get_cheese_entries  s   z*BilibiliCheeseSeasonIE._get_cheese_entriesc                 C   sH   |  |}| d|}| j| ||fi t|dthfdthfdS )NrC  r'  r  rz  )rd  r  r"  r  r   rf   )r-   rU   rC  rM  r.   r.   r/   r4    s   

z$BilibiliCheeseSeasonIE._real_extractN)rm  rn  ro  r5  r  r7  r  r4  r.   r.   r.   r/   r    sJ    %r  c                   @   s   e Zd Zdd ZdS )BilibiliSpaceBaseIEc                    s8    d|}t  fdd|d |d }||fS )Nr   c                    s   | r | S S r   r.   )r  
fetch_page
first_pageget_entriesr.   r/   r@     s    z7BilibiliSpaceBaseIE._extract_playlist.<locals>.<lambda>
page_count	page_size)r
   )r-   r  get_metadatar  metadata
paged_listr.   r  r/   _extract_playlist  s   z%BilibiliSpaceBaseIE._extract_playlistN)rm  rn  ro  r  r.   r.   r.   r/   r    s    r  c                   @   sf   e Zd ZdZdddidddddid	dd
ddidddddddeeed	igddidgZdd ZdS )BilibiliSpaceVideoIEzShttps?://space\.bilibili\.com/(?P<id>\d+)(?P<video>(?:/upload)?/video)?/?(?:[?#]|$)z(https://space.bilibili.com/3985676/videor_   3985676   rq  z*https://space.bilibili.com/313580179/video	313580179\   z(https://space.bilibili.com/3669403/video3669403r  r  3669403_3958082u   合集·直播回放r   u
   月路Yuel)	r  r_   r'  rc  rz  ry  r@  r~  r{  r  7r  c                    sf    dd\ }|sd  fdd}dd }fdd	}|||\}}| S )
Nr_   rw   z{A channel URL was given. Only the channel's videos will be downloaded. To download audios, add a "/upload/audio" to the URLc                    sZ  d t tdp
ddd| d ddd	d
tdtjtjt	ddd
 d d  tdtjtjt	ddd
 d d  dd}zjd | d|  did}W n ty} } zt|jtrx|jjdkrxtddd d }~ww |d }|dkrtddd|dkrtddd|dkrtd | d!|d"pd# |d$ S )%Nr   )orderr   r  truer  r   r&   r   i z[]r   @   )r   r      z0{"ds":[],"wh":[6093,6631,31],"of":[430,760,380]})keywordr6  r  order_avoidedr  pnpstidweb_locationdm_img_list
dm_img_strdm_cover_img_strdm_img_interz/https://api.bilibili.com/x/space/wbi/arc/searchzDownloading space page r%   r  i  z>Request is blocked by server (412), please wait and try later.Tr  rK  ioz>Request is blocked by server (401), please wait and try later.iz#Request is rejected by server (352)zRequest failed (z): r9  zUnknown errorr   )r   r   base64	b64encoder   randomrX  string	printablerandintr   decoder   r   r   
isinstancecauser   statusr+   )page_idxr   responserY  rh  playlist_idr-   rU   r.   r/   r     s`     

z6BilibiliSpaceVideoIE._real_extract.<locals>.fetch_pagec                 S   s,   | d d }| d d }t || |dS )Nr  r  r.  r  r  )mathceil	page_datar  entry_countr.   r.   r/   r  G  s
   z8BilibiliSpaceVideoIE._real_extract.<locals>.get_metadatac              	   3   s    t | dddthfD ]9}t |ddkr5 d|d  d|d	 d
  dt|d  d|d	 d
  V  q d|d  t|d V  qd S )Nr  vlist.)meta	attribute   https://space.bilibili.com/r6  z/lists/r  r_   z?type=seasonr<   r  r   )r   r   rJ  BilibiliCollectionListIErs  r  rN  r,   r.   r/   r  O  s    z7BilibiliSpaceVideoIE._real_extract.<locals>.get_entries)r  r  rE   r  r"  )r-   rU   is_video_urlr  r  r  r<   r  r.   r  r/   r4    s   
'
z"BilibiliSpaceVideoIE._real_extractNrm  rn  ro  r5  r  rf   r7  r4  r.   r.   r.   r/   r    s>    "r  c                   @   s*   e Zd ZdZdddiddgZdd Zd	S )
BilibiliSpaceAudioIEz;https?://space\.bilibili\.com/(?P<id>\d+)/(?:upload/)?audioz1https://space.bilibili.com/313580179/upload/audior_   r  r   rq  c                    sJ    |  fdd}dd }fdd}|||\}}| S )Nc              
      s,   j d d|   | d dddddd S )	Nz;https://api.bilibili.com/audio/music-service/web/song/upperDownloading page r   r&   r  )uidr  r  r  r  r   r   r   r   r  r  r-   r.   r/   r  j  s   z6BilibiliSpaceAudioIE._real_extract.<locals>.fetch_pagec                 S   s   | d | d dS )N	pageCountpageSizer  r.   r  r.   r.   r/   r  p  s   z8BilibiliSpaceAudioIE._real_extract.<locals>.get_metadatac                 3   s8    |  dpg D ]} d|d  t|d V  qd S )Nr   !https://www.bilibili.com/audio/aur_   )r+   rJ  BilibiliAudioIEr  r,   r.   r/   r  v  s    z7BilibiliSpaceAudioIE._real_extract.<locals>.get_entries)rd  r  r"  )r-   rU   r  r  r  r<   r  r.   r  r/   r4  g  s   
z"BilibiliSpaceAudioIE._real_extractNrm  r.   r.   r.   r/   r  ]  s    r  c                       s.   e Zd ZdddZdd Z fddZ  ZS )	BilibiliSpaceListBaseIEr   c              	   c   sN    t |g t|ttttfd|thR D ]}| d| t|V  qd S )N.r  )r   r#   rf   bytesr   rD   rJ  rs  )r-   r  	bvid_keys
ending_keyr   r.   r.   r/   _get_entries  s   0z$BilibiliSpaceListBaseIE._get_entriesc                 C   s(   | j d| |dd}| jd|dddS )Nr  Fr%  u)   (?s)<title\b[^>]*>([^<]+)的个人空间-rz  )re  _search_regex)r-   r  r  r$  r.   r.   r/   _get_uploader  s   z%BilibiliSpaceListBaseIE._get_uploaderc                    s4   t  |||\}}|dd  |dd  ||fS )Nr  r  )superr  r   )r-   r  r  r  r  	page_list	__class__r.   r/   r    s   z)BilibiliSpaceListBaseIE._extract_playlist)r   )rm  rn  ro  r  r  r  __classcell__r.   r.   r  r/   r    s    
r  c                
       s`   e Zd ZddgZddddddeed	d
ddddddddgZe fddZdd Z	  Z
S )r  zWhttps?://space\.bilibili\.com/(?P<mid>\d+)/channel/collectiondetail/?\?sid=(?P<sid>\d+)z=https?://space\.bilibili\.com/(?P<mid>\d+)/lists/(?P<sid>\d+)z<https://space.bilibili.com/2142762/lists/3662502?type=season2142762_3662502u)   合集·《黑神话悟空》流程解说u   黑神话悟空 相关节目u   老戴在此2142762zThttps://archive.biliimg.com/bfs/archive/22302e17dc849dd4533606d71bc89df162c3a9bf.jpg)r_   r'  rc  rz  ry  r@  r~  r{  r   rq  z0https://space.bilibili.com/2142762/lists/3662502TrU   r  zEhttps://space.bilibili.com/2142762/channel/collectiondetail?sid=57445c                    s   t |rdS t |S )NF)BilibiliSeriesListIEr  r  )clsrU   r  r.   r/   r    s   z!BilibiliCollectionListIE.suitablec                    sz    dd\   d  fdd} fdd}fdd	}|||\}}j|fi |S )
Nr6  sidr<   c              
      0   j dd|  di | d dddd S )	NzBhttps://api.bilibili.com/x/polymer/web-space/seasons_archives_listr  r%   r   r&   )r6  rC  page_numr  r   r   r   r   r  r  r6  r  r-   r	  rU   r.   r/   r       z:BilibiliCollectionListIE._real_extract.<locals>.fetch_pagec              
      st   | d d }| d d }t || | 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 )Nr  r  totalr  r  rz  r  r  rc  r6  ptimer  )r'  rc  ry  r@  r{  )r  r  r  r   rf   r   r   r!   r  )r6  r  r-   r.   r/   r    s   





z<BilibiliCollectionListIE._real_extract.<locals>.get_metadatac                         | dS Narchivesr  r  r,   r.   r/   r       z;BilibiliCollectionListIE._real_extract.<locals>.get_entries)r  r  r  r"  r-   rU   r  r  r  r  r  r.   r  r/   r4    s   z&BilibiliCollectionListIE._real_extract)rm  rn  ro  r5  r  rf   r7  classmethodr  r4  r  r.   r.   r  r/   r    s4    
r  c                   @   sF   e Zd ZddgZdddddddd	eed
	dddddgZdd ZdS )r  zUhttps?://space\.bilibili\.com/(?P<mid>\d+)/channel/seriesdetail/?\?\bsid=(?P<sid>\d+)zahttps?://space\.bilibili\.com/(?P<mid>\d+)/lists/(?P<sid>\d+)/?\?(?:[^#]+&)?type=series(?:[&#]|$)z>https://space.bilibili.com/1958703906/lists/547718?type=series1958703906_547718   直播回放
   靡烟miya
1958703906=a20211127)	r_   r'  rc  rz  ry  r@  r~  modified_timestampmodified_date  rq  zMhttps://space.bilibili.com/1958703906/channel/seriesdetail?sid=547718&ctype=0Tr  c              
      s    dd\   d tjd 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d} fdd}fdd}|||\}}j|fi |S )Nr6  r	  r<   z3https://api.bilibili.com/x/series/series?series_id=Fr  r   r  r  rc  r:  mtime)r'  rc  ry  r@  r  c              
      r
  )	Nz*https://api.bilibili.com/x/series/archivesr  r%   r   r&   )r6  r  r  r  r  r   r  r  r  r.   r/   r    r  z6BilibiliSeriesListIE._real_extract.<locals>.fetch_pagec                    s:   | d d }| d d }t || | dS )Nr  r^   r  r  )r  r  r  r  )r6  r  playlist_metar-   r.   r/   r    s   
z8BilibiliSeriesListIE._real_extract.<locals>.get_metadatac                    r  r  r  r  r,   r.   r/   r    r  z7BilibiliSeriesListIE._real_extract.<locals>.get_entries)	r  r  r   r   rf   r   r   r  r"  r  r.   )r6  r  r#  r-   r	  rU   r/   r4    s"   

z"BilibiliSeriesListIE._real_extractNr  r.   r.   r.   r/   r    s,    r  c                   @   sH   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d ZdS )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)r_   r'  rc  rz  ry  r@  r~  r  r   r{  r  r  r   rq  z6https://www.bilibili.com/medialist/detail/ml1103407912Tr  c                 C   s   |  |}| jd| d|dd}|d dkr| jdd | | jd	| |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 metadatar   rK  r  zAThis is a private favorites list. You need to log in as its ownerr1  z8https://api.bilibili.com/x/v3/fav/resource/ids?media_id=zDownload favlist entriesr   r  r'  intror  r  r6  r:  r"  r  cnt_infor  thumb_up)	r'  rc  rz  ry  r@  r  r{  r  r  )
rd  r   r  r  r"  r   rf   r   r   r!   )r-   rU   fid	list_infor  r.   r.   r/   r4  "  s0   





z%BilibiliFavoritesListIE._real_extractNr  r.   r.   r.   r/   r$  
  s.    r$  c                   @   s.   e Zd ZdZdddddddgZd	d
 ZdS )BilibiliWatchlaterIEz7https?://(?:www\.)?bilibili\.com/watchlater/?(?:[?#]|$)z*https://www.bilibili.com/watchlater/#/listzre:\d+   稍后再看r  r   r  r  c                 C   sX   t | |ddd}| d|}|d dkr| jdd | |d	}| j||d
dS )N
DedeUserIDvalue
watchlaterz<https://api.bilibili.com/x/v2/history/toview/web?jsonp=jsonprK  iz0You need to login to access your watchlater listr,  )r   r  r3  r  )getattrr*   r+   r   r  r  r"  )r-   rU   list_idwatchlater_infor  r.   r.   r/   r4  H  s   z"BilibiliWatchlaterIE._real_extractNrm  r.   r.   r.   r/   r2  <  s    
r2  c                   @   s   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+eed,d-d.dd/dd0id-d1dgZd2d3 Zd4d5 Z	d6S )7BilibiliPlaylistIEzDhttps?://(?:www\.)?bilibili\.com/(?:medialist/play|list)/(?P<id>\w+)z3https://www.bilibili.com/list/1958703906?sid=5477185_547718r  r  r  r  r  )r_   r'  rz  ry  r@  r~  r!  rq  zShttps://www.bilibili.com/list/1958703906?sid=547718&oid=687146339&bvid=BV1DU4y1r7tzBV1DU4y1r7tzru  uB   【直播回放】8.20晚9:30 3d发布喵 2022年8月20日21点场20220820r   i
crw  g%s@zbilibili 687146339_part1r  
noplaylistTr  zbhttps://www.bilibili.com/medialist/play/1958703906?business=space_series&business_id=547718&desc=1r_   zredirect urlr  z*https://www.bilibili.com/list/ml11034079123_1103407912r&  r'  r(  r)  r*  r+  )r_   r'  rz  ry  r@  r~  r{  r   z4https://www.bilibili.com/medialist/play/ml1103407912z(https://www.bilibili.com/list/watchlaterzre:2_\d+r3  )r_   r'  rz  ry  r   r  z2https://www.bilibili.com/medialist/play/watchlaterr6  zredirect url & login requiredc              	   c   sr    t dD ]0}| jd||d|d  d| dd }| j|dd	d
E d H  t|d|d< |dds6 d S qd S )Nr   z5https://api.bilibili.com/x/v2/medialist/resource/listzgetting playlist biz_idz page rR  r   
media_listbv_id)r  )rA  r  r_   oidhas_moreF)r-  r.  r   r  r   r+   )r-   r   r8  r  r  r.   r.   r/   _extract_medialist  s   z%BilibiliPlaylistIE._extract_medialistc           
      C   s  |  |}tt|d}| ||s| d| tS | ||}| d|d|}t|dtdd t	f}|rp|d d	krp|
d
}|dkrO|dkrO| d n|dkrY| d n
|dkrctdddtd| 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tfd)thfd*f}	| j| ||fi |	S )+N)r   r   r  r  r  )r  	listErrorc                 S   rM   )NrK  r.   r;   r.   r.   r/   r@     rN   z2BilibiliPlaylistIE._real_extract.<locals>.<lambda>rK     r  ipr6  z4You need to login to access your watchlater playlistr  z:This is a private playlist. You need to login as its owneri+  zPlaylist is no longer availableTr  zCould not access playlist: r  r9  r   F)r  with_currentr  typer_   r  	sortFiledr  )rI  r@  r  
sort_fieldr  r<   r@  mediaListInfor'  r  r  r6  r:  r  )r'  rz  ry  r@  r{  )rd  r   r   r   rJ  rs  re  r  allrf  r+   r  r   r   r   r   rf   rg   r   r!   r"  rE  )
r-   rU   r8  r   r$  r&  r  
error_coder   r  r.   r.   r/   r4    sL   







z BilibiliPlaylistIE._real_extractN)
rm  rn  ro  r5  r  r  rf   r7  rE  r4  r.   r.   r.   r/   r:  R  s    	Jr:  c                   @   sJ   e Zd ZdZdZdZdddddddid	gZd
d Zdd Zdd Z	dS )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)rU   r  rr  r   c                 c   sr    | j ||||dd| d| d}t|dtd}|s#td| |D ]}| d|d	 d
|d	 V  q%d S )N
Search_keyr  Extracting results from page z of rR  )r   r  r  z'Failed to retrieve video list for page z!https://www.bilibili.com/video/{}r   BiliBili)r   r   r  r   rJ  rt   )r-   api_url	num_pagesr   r  parsed_json
video_listrw   r.   r.   r/   _fetch_page  s   zBilibiliCategoryIE._fetch_pagec                 C   s   dddddddi}||vrt d| d	t|  ||| vr2t d
| dt||   || | }d| }| j|||ddd}t|dtd}t|dt|d}	}
|	d u sc|
sgt dt	|	|
 }t
t| j||||
S )Nkichikur   rn   r         )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  rQ  r   )r   r  r  r.  r^   z-Failed to calculate either page count or size)r   r  keysr   r   r   r   r+   r  r  r   	functoolspartialrY  )r-   categorysubcategoryr   rid_map	rid_valuerU  	page_jsonr  r.  r^   rV  r.   r.   r/   _entries  s:   

zBilibiliCategoryIE._entriesc                 C   sF   t j|jddd \}}| d| }| | |||||S )Nr   r   r   : )r   r   urlparsepathsplitr"  rk  )r-   rU   rf  rg  r   r.   r.   r/   r4    s    z BilibiliCategoryIE._real_extractN)
rm  rn  ro  r  _MAX_RESULTSr5  r7  rY  rk  r4  r.   r.   r.   r/   rO    s     rO  c                   @   s^   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d Z	dS )BiliBiliSearchIEzBilibili video searchi 
bilisearchuX   bilisearch3:靡烟 出道一年，我怎么还在等你单推的女人睡觉后开播啊r   uL   靡烟 出道一年，我怎么还在等你单推的女人睡觉后开播啊r  r  BV1n44y1Q7scru  um   “出道一年，我怎么还在等你单推的女人睡觉后开播啊？”【一分钟了解靡烟miya】ic20221201z$md5:43343c0973defff527b5a4b403b4abf9r  gDl^@r  rw  zbilibili 988222410_part1r  )rU   r  r  r  c                 c   s    |  dds| ddt  d tdD ]6}| jd|d| |||dd	dd
dd	dd
dd d}|s= d S |D ]}| |d dt	|d V  q?qd S )Nr'   buvid3z.bilibili.cominfocr   z4https://api.bilibili.com/x/web-interface/search/typerS  r   r   r  rw   )
rR  r  r  contextr   tids_2__refresh__search_typetids	highlightr  r   rD  arcurlrT  r  )
r*   r+   _set_cookieuuiduuid4r-  r.  r   rJ  rf   )r-   r   r  videosrw   r.   r.   r/   _search_results9  s:   z BiliBiliSearchIE._search_resultsN)
rm  rn  ro  IE_DESCrp  _SEARCH_KEYr  r  r7  r  r.   r.   r.   r/   rq    s:    rq  c                   @   s   e Zd ZdddZdS )BilibiliAudioBaseIENc                 C   s$   |sd|i}| j d| ||dd S )Nr	  z3https://www.bilibili.com/audio/music-service-c/web/rb  r   r  )r-   rn  r	  r   r.   r.   r/   	_call_apiR  s   zBilibiliAudioBaseIE._call_apir   )rm  rn  ro  r  r.   r.   r.   r/   r  Q  s    r  c                   @   sJ   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d ZdS )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版！   originr`   lrczre:^https?://.+\.jpgiE]20190803u   十六夜tsukimiつきみぐ)r_   r`   r'  artistr}  rc  r   r  r{  r@  r~  rz  r  )rU   r   r  c                 C   s   |  |}| d|}|d d t|dddg}|D ]}|di d|i q| d	|}|d
 }|dp;i }d }	|d}
|
rLdd|
igi}	||||dt|d|dt|d|	|dt|d|dt|ddS )NrU   cdnsr   r^   rY   )rU   rd   rb   r  r%   z	song/infor'  	statisticlyricr  r=  commentr-  r   r  passtimer4  r  )r_   r'  rH   r  r}  rc  r   r  r{  r@  rz  r  )rd  r  r   r+   r!  r   )r-   rU   au_id	play_datarH   a_formatsongr'  r  r  r  r.   r.   r/   r4  t  sB   


zBilibiliAudioIE._real_extractN)rm  rn  ro  r5  r  _TESTr4  r.   r.   r.   r/   r  Z  s.    r  c                   @   s,   e Zd ZdZdddddddZd	d
 ZdS )BilibiliAudioAlbumIEz4https?://(?:www\.)?bilibili\.com/audio/am(?P<id>\d+)z&https://www.bilibili.com/audio/am1062410624u   新曲推荐u,   每天11:00更新，为你推送最新音乐rp  r   )rU   r  r  c           
      C   s   |  |}| d||dddd }g }|D ]}t|d}|s"q|| d| t | q|rV| d|p:i }|d	}|rV|D ]}	||	d
< qD| ||||dS | ||S )Nzsong/of-menur   d   )r	  r  r  r   r_   r  z	menu/infor'  albumr-  )	rd  r  r   r+   r   rJ  r  r  r"  )
r-   rU   am_idsongsr  r  r	  
album_dataalbum_titlerN  r.   r.   r/   r4    s2   


z"BilibiliAudioAlbumIE._real_extractNrm  rn  ro  r5  r  r4  r.   r.   r.   r/   r    s    
r  c                   @   s"   e Zd ZdZdddZdd ZdS )BiliBiliPlayerIEzAhttps?://player\.bilibili\.com/player\.html\?.*?\baid=(?P<id>\d+)zHhttp://player.bilibili.com/player.html?aid=92494333&cid=157926707&page=1Tr  c                 C   s&   |  |}| jd| dt |dS )Nzhttp://www.bilibili.tv/video/avr   )r  r   )rd  rJ  rs  r  )r-   rU   r   r.   r.   r/   r4    s
   

zBiliBiliPlayerIE._real_extractNr  r.   r.   r.   r/   r    s    r  c                   @   s   e Zd ZdZdi ddddddd	ed
dgdddddddddededddddddededgZdd  Zd!S )"BiliBiliDynamicIEzFhttps?://(?:t\.bilibili\.com|(?:www\.)?bilibili\.com/opus)/(?P<id>\d+)z)https://t.bilibili.com/998134289197432852r_   BV1TAmBYVEJrr`   ru  ry  
1192648858r}  r  zbilibili 113457567568273_part1r{  zLhttp://i2.hdslb.com/bfs/archive/50091efd965d9f13ff6814f7ad374f90ab21e77d.jpgr   gCl	@r~  20241110rz  u   何同学工作室r  r  r'  u>   美国小朋友就玩这个？！何同学工作室11月开箱rc  up   本期产品信息：
机器狗
气味模拟器
Cloudboom Strike LS
无弦吉他
蓝牙磁带音箱
神奇画板r@  i 0gr|  r*  r  c                 C   sz   |  |}| jd|d|iddid}t|dddd	d
ddtht| jhf
}|r2| |r8||  |kr8tddd| |S )Nz8https://api.bilibili.com/x/polymer/web-dynamic/v1/detailr_   z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36r^  r   item)Norigmodulesmodule_dynamic))major)archivepgc)
additional)reservecommonjump_urlzNo valid video URL foundTr  )	rd  r   r   r!   rf  _proto_relative_urlr  r   rJ  )r-   rU   post_id	post_data	video_urlr.   r.   r/   r4    s   


zBiliBiliDynamicIE._real_extractN)rm  rn  ro  r5  r  r  r7  r4  r.   r.   r.   r/   r    sL    	
r  c                   @   s\   e Zd ZdZdZddiZdd Zdd Zd	d	d
ddZd	d	d
ddZ	dd Z
dd Zd	S )BiliIntlBaseIEz$https://api.bilibili.tv/intl/gatewaybiliintlr%   zhttps://www.bilibili.tv/c                 O   s   | j | j| g|R i |}|dr_|d dv r|   n@|d dkr*|   n5|drKt|d |d krK|dd d| j d|d  }n|dd}|d	rZt|| | |d
S )NrK  )i$ i% i^ i! r9  r   Unable to download JSON metadatarl   said: r%  r   )	r   _API_URLr+   r  rg  rf   r  r   r   )r-   endpointargskwargsrg  errmsgr.   r.   r/   r    s   


$


zBiliIntlBaseIE._call_apic              	   C   s&   d dd tt|ddd fD S )Nr  c              	   s   sF    | ]\}}|d   dt |d  dt |d  d|d  V  qdS )r   r  r  r  r  r  N)r   )r6   r   r  r.   r.   r/   r{     s
    0
z*BiliIntlBaseIE.json2srt.<locals>.<genexpr>r  c                 S   s   |d o|d o|d S )Nr  r  r  r.   )r<   lr.   r.   r/   r@     r   z)BiliIntlBaseIE.json2srt.<locals>.<lambda>)r   r  r   )r-   rg  r.   r.   r/   r    s
   
zBiliIntlBaseIE.json2srtNrJ  r  c                C   s   | j d|p|dddtdd||ddpi }i }t }t|d	d
thfD ]i}t|ddthfD ]]}||v r6q/|| t|}|dpEd}	|dkrW|	|	g 
d|d q/|dkr| j||pa|ddt|dd d|	 ddd}
|
r|	|	g 
d| |
d q/| d|p| q/q$|S )Nz/web/v2/subtitleFzDownloading subtitles listz!Unable to download subtitles listr  en_US)r  s_localer  r  )r%  r   r  r   )r  video_subtitle.)Nassr  rU   lang_keyenr  r  rg  zDownloading subtitleslangz for %sr  r  zUnable to download subtitles)r%  r   r  r  r  zUnexpected subtitle extension)r  r   rD   r   r   r!   addr   r+   r!  r   r   r   r  r   )r-   rJ  r  sub_jsonr  fetched_urlssubrU   sub_extsub_langsub_datar.   r.   r/   r$    sR   
	


zBiliIntlBaseIE._get_subtitlesc          	      C   s  | j d|p|ddtd||dd}|d }g }|dpg D ]9}|d	p'i }|d
p.i }|ds5q||d d|d|d|d|dd|d|dd	 q|dp_g D ]}|dshq`||d d|d|dd|dd q`|S )Nz/web/playurlzDownloading video formatsz Unable to download video formatsr  )r  rJ  r  )r   r  r   playurlrw   video_resourcestream_inforU   ru  
desc_wordsrj   rk   rZ   rY   rX   r^   )	rU   r`   r   rj   rk   vbrra   rb   rd   audio_resource)rU   r`   abrra   rb   rd   )r  r   r+   r   )	r-   rJ  r  
video_jsonrH   vid	video_resr"  audr.   r.   r/   _get_formatsD  sL   




	zBiliIntlBaseIE._get_formatsc                 C   sR   | dp	| d| d| dt| dt| jd| dp!ddd d	d
S )Ntitle_displayr'  r  r  formatted_pub_datez^E(\d+)(?:$| - )r   zepisode numberr  )r'  rc  r{  r@  r  )r+   r   r   r  )r-   r*  r.   r.   r/   _parse_video_metadatal  s   z$BiliIntlBaseIE._parse_video_metadatac              
   C   s   t js	tddd| jdd dddd }t j|d	 }t j||d
 |  }| jdd t	|t
|dddddddd}|dr`|dr\td| j d|d  ddtdd S )Nz'pycryptodomex not found. Please installTr  zEhttps://passport.bilibili.tv/x/intl/passport-login/web/key?lang=en-USzDownloading login keyzUnable to download login key)r   r  r   r   hashzPhttps://passport.bilibili.tv/x/intl/passport-login/web/login/password?lang=en-USasciir  r  )usernamepasswordkeep_mer  	isTrustedz
Logging inzUnable to log in)r   r   r  rK  r9  zUnable to log in: r  )r   RSAr   r   	importKey
PKCS1_v1_5newencryptr   r"   r  r  r  r+   r  )r-   r  r  key_data
public_keypassword_hash
login_postr.   r.   r/   _perform_loginv  s4   
	
zBiliIntlBaseIE._perform_login)rm  rn  ro  r  _NETRC_MACHINEr  r  r  r$  r  r  r  r.   r.   r.   r/   r    s    )(
r  c                   @   sr  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d^dTdUZdVdW Zd_dXdYZ	dZd[ Z
d\d] ZdSS )`
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341736ru  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)
r_   r`   r'  r{  r  r~  r  r@  rc  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=
#@)
r_   r`   r'  r{  r  rc  r  r~  r@  r*  z0https://www.bilibili.tv/en/play/1005144/1013179010131790z$E140 - Two Heartbeats: Kabuto's Trap   )r_   r`   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     @)r_   r`   r@  r~  r  r'  rc  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)r_   r`   rc  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)	r_   r`   r'  rc  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                 C   s   |r
d| d|  S d|  S )Nz https://www.bilibili.tv/en/play/r   z!https://www.bilibili.tv/en/video/r.   )r   r  r.   r.   r/   	_make_url!	  s   
zBiliIntlIE._make_urlc           	         s   t |i \}}|dr|S | | }| jd|d i dp'| j| ddd d}t|dd	d
tdp2i }|rQ|sQ| d| d }t|ddd fddftdd}t| 	|t
d|p`| d|t
d|pj| d|d| j| i dS )Nr'  z&window\.__INITIAL_(?:DATA|STATE)__\s*=zpreload stater  __initialStateF)r%  traverse)OgvVideoepDetail)UgcVideor  )ugcr  r  $/web/v2/ogv/play/episodes?season_id=&platform=websections.rF  c                    s   t |d  kS )Nr  )rf   r;   r  r.   r/   r@   8	  r  z4BiliIntlIE._extract_video_metadata.<locals>.<lambda>)r  rq   zbstar-meta__titlezog:titlezbstar-meta__desczog:descriptionrz  )r    r+   re  r  _search_nuxt_datar   r   r  r   r  r   _html_search_meta_search_json_ld)	r-   rU   r   rC  smuggled_datar$  initial_datar*  season_jsonr.   r  r/   _extract_video_metadata'	  s@   



z"BiliIntlIE._extract_video_metadatac                 c   s    | j d|d| d| dd||dd}t|dD ]*}t|d	t|d
t|dt|d|dt|d|dt|ddV  qt|ds\| ||d d d |E d H  d S d S )Nz(https://api.bilibili.tv/reply/web/detailzDownloading reply comment of ra  r  r   )r  r  r<  rd  r  r   r,  .r3  r  r5  r3  facer8  r7  r  r;  
ctime_text)r=  r>  author_thumbnailr?  r_   r  r;  r@  r   cursoris_endr   r  rd  )r   r   r+   r   r   _get_comments_reply)r-   root_idnext_id
display_idcomment_api_raw_datar,  r.   r.   r/   r  D	  s2   


zBiliIntlIE._get_comments_replyc                 c   s    t dD ]g}| jd|d|d  d|d||rdndddd	}t|d
D ]>}t|dt|dt|dt|d|dt|dt|dtt|ddV  |drd| j|d|dE d H  q&t|drm d S qd S )Nr   z&https://api.bilibili.tv/reply/web/rootzDownloading comment page r   r  r   r   )r  r  r  rC  rI  	sort_typer  r  r  r5  r  r8  r7  r  r  )r3  rI  )r=  r>  r  r?  r_   r  r@  author_is_uploaderr.  )r!  r  )	r-  r.  r   r   r+   r   r   r)   r  )r-   r   rJ  r   r"  r,  r.   r.   r/   r2  _	  s<   



zBiliIntlIE._get_commentsc                 C   s   |  |ddd\}}}|p|}d }|rL| jd| d|ddp"i }|drLtt|d	d
tt|dd
ddtt|dd
tt|dd
ddg}d|i| |||| j||d| j||d|| 	||| j
dS )NrC  rJ  r  z$/web/v2/ogv/play/episode?episode_id=r  Fr  r  )r  opening_start_timer[   )r  opening_end_timer  r  )r  ending_start_time)r  ending_end_timer  r_   r  )rH   r  r*  r   r  )r  r  r  r+   r   r   r  r  ri  r  r  )r-   rU   rC  rJ  r  r   r*  intro_ending_jsonr.   r.   r/   r4  ~	  s<   


zBiliIntlIE._real_extractr   )r   N)rm  rn  ro  r5  r  r7  staticmethodr  r  r  r2  r4  r.   r.   r.   r/   r    s   !  
r  c                	   @   sv   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d Zdd ZdS )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/34613r   34613zTONIKAWA: Over the Moon For Your  )zSlice of lifeComedyRomancer  )r_   r'  rc  
categoriesr{  r  r  T)rU   rr  r  r   z(https://www.bilibili.tv/en/media/10488371048837u   SPY×FAMILYr  )	AdventureActionr-  z.re:^https://pic\.bstarstatic\.com/ogv/.+\.jpg$r   rq  z&https://www.biliintl.com/en/play/34613r  z&https://www.biliintl.com/EN/play/34613c                 c   s^    |  d| d|}t|dtdD ]}t|d }| tt||| |t|V  qd S )Nr  r  )r  .rF  .r  r  )	r  r   r   rf   rJ  r   r  r  r  )r-   r  series_jsonr  r  r.   r.   r/   rk  	  s   
zBiliIntlSeriesIE._entriesc                 C   sp   |  |}| d| d|dpi }| j| |||d|dt|dtdt|dt|d	d
S )Nz'/web/v2/ogv/play/season_info?season_id=r  r  r'  rc  )styles.r'  r  horizontal_coverr  )r/  r{  r  )	rd  r  r+   r"  rk  r   r   r!   r   )r-   rU   r  series_infor.   r.   r/   r4  	  s   
zBiliIntlSeriesIE._real_extractN)	rm  rn  ro  r  r5  r  r7  rk  r4  r.   r.   r.   r/   r+  	  sD    	!	r+  c                	   @   s   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d  Z
d!d" Zd#d$ Zd%S )&
BiliLiveIEz3https?://live\.bilibili\.com/(?:blanc/)?(?P<id>\d+)zhttps://live.bilibili.com/19633989u   周六杂谈回，其他时候随机游戏。 | 
录播：@下播型泛式录播组。 | 
直播通知群（全员禁言）：666906670，902092584，59971⑧481 （功能一样，别多加）r  u-   太空狼人杀联动，不被爆杀就算赢zYhttps://i0.hdslb.com/bfs/live/new_room_cover/e607bc1529057ef4b332e1026e62cf46984c314d.jpgiQ@eb)r_   rc  r`   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   流畅)re   r   high_resu   高清ultra_high_resu   超清blue_rayu   蓝光sourceu   原画4KrP   u   杜比)P         i  i'  i N  i0u  c                 C   sD   | j d| ||d}|ddkrt|dpd|dp!i S )Nzhttps://api.live.bilibili.com/rb  rK  r   r9  r  r   )r   r+   r   )r-   rn  room_idr   
api_resultr.   r.   r/   r  	  s   zBiliLiveIE._call_apic                 c   s|    | dpg D ]3}| d|krq|d D ]$}|d  |d  |d  | d| d| |d	| j| V  qqd S )
Ncodec
current_qnurl_infohostrT   extraformat_name
codec_name)rU   r`   rb   r2   )r+   _quality_FORMATS)r-   r   r7   rD  rF  r.   r.   r/   _parse_formats	  s   zBiliLiveIE._parse_formatsc                 C   s   |  |}| d|d|i}|ddkrtdddg }| jD ]%}| d|||d	d
dddd	d}t|dp8g D ]}|| || q9q ||d|d|d|d|dd|idS )Nzroom/v1/Room/get_infor_   live_statusr   zStreamer is not liveTr  z'xlive/web-room/v2/index/getRoomPlayInfoz0,1z0,20r  )rB  r   rD  rt   mask
no_playurlr  r   )playurl_infor  stream.rt   .r'  rc  
user_cover	live_timer%   )r_   r'  rc  r{  r@  rH   is_liver  )rd  r  r+   r   rL  r   r   rM  )r-   rU   rB  	room_datarH   r   stream_datar7   r.   r.   r/   r4  
  s:   


zBiliLiveIE._real_extractN)rm  rn  ro  r5  r7  rL  r*  r   r  rK  r  rM  r4  r.   r.   r.   r/   r7  	  s>    
r7  )Mr  rd  r   r-  rg  r  r  rp  r  r   urllib.parser   r  r  r   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$   rs  rK  rn  r}  r  r  r  r  r  r  r  r  r  r$  r2  r:  rO  rq  r  r  r  r  r  r  r  r+  r7  r.   r.   r.   r/   <module>   sn    x        98507g"?<2 D8	F')   7