a
    hn                    @   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.comZSESSDATA)bool_get_cookiesgetself r-   N/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/bilibili.pyis_logged_in7   s    zBilibiliBaseIE.is_logged_inc                    sZ   t t|d tdd t|d fddfD ddi}|rV| d	| d
|    d S )N.qualityc                 S   s   g | ]}t |d ddqS )new_descriptiondisplay_descr1   r   ).0fmtr-   r-   r.   
<listcomp>=   s   z9BilibiliBaseIE._check_missing_formats.<locals>.<listcomp>support_formatsc                    s   |d  vS Nr1   r-   _vZ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formatsZmissing_formatsr-   r=   r.   _check_missing_formats;   s    z%BilibiliBaseIE._check_missing_formatsc                    sR  dd t |ddd fD t |dddd	thf t |d
}|rJ | dd  D }| fddt |dD  |r|| t |ddd dthfdtddhfdthfdf}|rN||d d tt |ddt	|dkr|ddni t |dthfdt
hfdfddhfd tddhfd!t|d |S )"Nc                 S   s   i | ]}|d  t |ddqS )r1   r2   r3   r4   )r5   rr-   r-   r.   
<dictcomp>G   s   z2BilibiliBaseIE.extract_formats.<locals>.<dictcomp>r8   c                 S   s   |d S r9   r-   r:   r-   r-   r.   r>   I   r?   z0BilibiliBaseIE.extract_formats.<locals>.<lambda>dash)Ndolbyaudio.)rJ   ZflacrL   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  Zscalesizeid)rO   extacodecvcodectbrfilesize	format_id)r   r   strlowerr   r*   r   r   )r5   rL   r-   r-   r.   r7   P   s   z2BilibiliBaseIE.extract_formats.<locals>.<listcomp>c                 3   s   | ]}t |d ddtt |ddtt |ddt|dt|d|d	 rVd
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 )rM   rN   rO   rP   rQ   Z	frameRateZ
frame_ratewidthheightrR   rS   NZDVZHDR10)~   }   rX   rT   rU   rV   rW   )rM   rN   r   Fget_all)rO   rY   Zfpsra   rb   r[   rZ   Zdynamic_ranger\   r]   r1   r^   format)r   r   r   r   r*   _FORMAT_ID_REsearchr   )r5   videoZaudiosformat_namesr,   r-   r.   	<genexpr>Z   s$   

z1BilibiliBaseIE.extract_formats.<locals>.<genexpr>)rJ   rj   .Zdurlc                 S   s   t |d S )NrO   r!   r:   r-   r-   r.   r>   o   r?   rO   lengthrU   rV   rW   )rO   durationr]   r   ).r]   )rO   r]   r   Zhttp_dash_segments)	fragmentsprotocolr1   c                    s
     | S Nr*   x)rl   r-   r.   r>      r?   
timelength)r1   r^   format_noterp   )r   dictappendextendrG   r!   r   r   sumlenr   r   r*   )r,   rE   Z
flac_audiorF   rq   r-   rk   r.   extract_formatsF   sT    





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 dataZwbi_img)Zimg_urlZsub_urlc                 S   s   |  dd dd S )N/r   .r   )
rpartition	partitionru   r-   r-   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 rs   r-   )r5   ilookupr-   r.   rm      r?   z.BilibiliBaseIE._get_wbi_key.<locals>.<genexpr>r   )r   r   )time_wbi_key_cacher*   _WBI_KEY_CACHE_TIMEOUT_download_jsonjoinr   update)r,   video_idZsession_dataZ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 )NZwtsc              	   S   s*   i | ]"\}}|d  tdd t|qS )r   c                 S   s   | dvS )Nz!'()*r-   )charr-   r-   r.   r>      r?   z5BilibiliBaseIE._sign_wbi.<locals>.<dictcomp>.<lambda>)r   filterr_   )r5   kr<   r-   r-   r.   rI      s   z,BilibiliBaseIE._sign_wbi.<locals>.<dictcomp>Z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 }rFd| 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   )r/   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,   Z	json_dataZ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rj| jd|   dd t|ddddd fD ]2}||d g d| |  |d |d q|S )NZdanmakuxmlzhttps://comment.bilibili.com/z.xmlrY   rO   (https://api.bilibili.com/x/player/wbi/v2aidr   r   r   zExtracting subtitle info r   r   r   )r   Zneed_login_subtitlez-Subtitles are only available when logged in. T)Z	only_oncer   subtitle	subtitlesc                 S   s   |d o|d S )Nsubtitle_urllanr-   r:   r-   r-   r.   r>      r?   z/BilibiliBaseIE._get_subtitles.<locals>.<lambda>r   srtr   rY   r   )r   _HEADERSr   report_warningrD   
setdefaultrz   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pBd S )Nr   r   zExtracting chaptersF)r   r   fatalr   r   Z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   sf   t dD ]V}t| jd| d| d|d| ddd}|sD d S t| j|D ]}|E d H  qPq
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   sb   t |dt |d|dt |d|d|dp4ddV  t| jt |d	D ]}|E d H  qNd S )
N)memberunamer  midrpidr   messagectimeparentroot)author	author_idrX   text	timestampr  )r  .)r   r*   r  r  )r,   replyr  r-   r-   r.   r     s    z BilibiliBaseIE._get_all_childrenc              	   c   sb   | 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   resultZmain_sectionepisodesc                 S   s   t |d o|d S )N	share_urlrX   rn   r:   r-   r-   r.   r>      r?   z:BilibiliBaseIE._get_episodes_from_season.<locals>.<lambda>r'  rX   )r   geo_verification_headersr   
url_resultBiliBiliBangumiIEr   r*   )r,   ss_idrO   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 q|S )Nz,https://api.bilibili.com/x/stein/edgeinfo_v2)graph_versionedge_idr   zExtracting divisions from edge r   r   r   Z
story_listc                    s   |d  kS )Nr0  r-   r:   r0  r-   r.   r>   	  r?   z/BilibiliBaseIE._get_divisions.<locals>.<lambda>r  r   )r  r   Fre   edgesZ	questions.choicesrX   option)r0  r   r   )r  r4  r0  )	cid_edges)r   r  r   r   r_   r   _get_divisions)r,   r   r/  r3  r0  r6  Zdivision_datachoicer-   r2  r.   r7    s8    

	zBilibiliBaseIE._get_divisionsc           	      c   s   t | jd|d||d|ddddthf}| ||dd	|iid}| D ]\}}| 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  qJd S )Nr   zExtracting graph versionr   r   r   r   Zinteractionr/  r   r   r   r   r   r;   r   - F)ensure_asciir   descriptionr   rw   rU   rV   )rX   r  rF   r=  rp   r   )r   r   r   r7  r   r   r*   nextitervaluesr~   jsondumpsr   extract_subtitles)	r,   r   r   metainfor   r/  r6  r3  rE   r-   r-   r.   _get_interactive_entries  s(    $
z'BilibiliBaseIE._get_interactive_entries)NN)N)N)N)__name__
__module____qualname__r  recompilerh   r   r   propertyr/   rG   r~   r   r   r   r   r  r  r  r  r.  r7  rE  r-   r-   r-   r.   r$   1   s&   

@




r$   c                    @   s4  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=d>dd?d@dAdBedCdDdEdFeeed	dGgdHddiddIdJdKddLdMdNdOdPdQdReed	dSgdTd7dUdVdWddXdYdZd[d\d]d^eed	d_gdTd7d`dadbdcdddedfedgdheeeed	digdjdkdldmdngiiidod&dpdqdcdrdsigdtdudvdwddxdydzd{d|d}d~eeeed	dg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dddddeddddddeeed	ddgd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/BV13x41117TLZBV13x41117TLu(   阿滴英文｜英文歌分享#6 "Closermp4u   滴妹今天唱Closer給你聽! 有史以来，被推最多次也是最久的歌曲，其实歌词跟我原本想像差蛮多的，不过还是好听！ 微博@阿滴英文Z65880958u   阿滴英文 re:^https?://.*\.(jpg|jpeg|png)$g-P@Z20170301i*zXzbilibili 8903802_part1)rX   r  rY   r=  uploader_iduploader	thumbnailrp   tagscomment_countupload_dater!  
like_count
view_count_old_archive_idsrO   	info_dictzold av URL versionz(http://www.bilibili.com/video/av1074402/ZBV11x411K7CNu   【金坷垃】金泡沫u	   菊子桑Z156160g(\Es@Z20140420iSSz$md5:ce18c2a2d2193f0df2917d270f2e5923zre:^https?://.*\.(jpg|jpeg)$zbilibili 1074402_part1)rX   rY   r  rP  rO  rp   rT  r!  r=  rU  rS  rV  rR  rQ  rW  skip_downloadT)r   rO   rY  r   Z	Anthologyz+https://www.bilibili.com/video/BV1bK411W797ZBV1bK411W797u/   物语中的人物是如何吐槽自己的OP的rX   r  r   rY  ZBV1bK411W797_p1uR   物语中的人物是如何吐槽自己的OP的 p01 Staple Stable/战场原+羽川zcount:10ie^u   打牌还是打桩Z	150259984Z20200516z$md5:e3c401cf7bc363118d1783dd74068a68gjtV@zbilibili 498159642_part1)rX   rY   r  rR  r!  rQ  rP  rO  rU  rS  rT  rV  r=  rp   rW  playlist_items2)r   rO   rY  playlist_countplaylistr   zSpecific page of Anthologyz/https://www.bilibili.com/video/BV1bK411W797?p=1r   rO   rY  z)https://www.bilibili.com/video/av8903802/z$md5:3b1b9e25b78da4ef87e9b548b88ee76arX   rY   r  rT  r=  r!  rO  rP  rQ  rp   rR  rS  rV  rU  rW  rO   rY  r   zvideo has chapterz,https://www.bilibili.com/video/BV1vL411G7N7/ZBV1vL411G7N7u.   如何为你的B站视频添加进度条分段iRmaZ20211018z$md5:a9a3d6702b3a94518d419b2e9c320a6du   爱喝咖啡的当麻g`"@Z1680903zcount:6zbilibili 463665680_part1)rX   rY   r  r!  rT  r=  rR  rP  rp   rO  r  rS  rV  rU  rQ  rW  z video redirects to festival pagez+https://www.bilibili.com/video/BV1wP4y1P72hZBV1wP4y1P72hu   牛虎年相交之际，一首传统民族打击乐《牛斗虎》祝大家新春快乐，虎年大吉！【bilibili音乐虎闹新春】iaZ20220204z$md5:8681a0d4d2c06b4ae27e59c8080a7fe6u   叨叨冯聊音乐g^In@Z	528182630zbilibili 893839363_part1)rX   rY   r  r!  rT  r=  rP  rp   rO  rV  rU  rQ  rW  znewer festival videozIhttps://www.bilibili.com/festival/2023honkaiimpact3gala?bvid=BV1ay4y1d77fZBV1ay4y1d77fu7   【崩坏3新春剧场】为特别的你送上祝福！i@ccZ20230121z$md5:58af66d15c6a0122dc30c8adfd828dd8u	   果蝇轰gS^@Z8469526zbilibili 778246196_part1zlegacy flv/mp4 videoz0https://www.bilibili.com/video/BV1ms411Q7vw/?p=4ZBV1ms411Q7vw_p4uX   [搞笑]【动画】云南方言快乐生产线出品 p04 新烧包谷之漫游桃花岛i߶VZ20160317u!   云南方言快乐生产线出品u   一笑颠天Z3916081zbilibili 4120229_part4)rX   r  r!  rT  r=  rp   rP  rO  rV  rS  rU  rR  rQ  rW  Zextractor_argsZbilibiliprefer_multi_flvZ32r   ZBV1ms411Q7vw_p4_0flvgʡx@)rX   rY   r  rp   )r   rO   rY  r   r^  r_  zlegacy mp4-only videoz+https://www.bilibili.com/video/BV1nx411u79KZBV1nx411u79Ku9   【练习室】201603声乐练习《No Air》with VigoVanioYZ20171025u4   @ZERO-G伯远
声乐练习 《No Air》with Vigo VangjtT@u   伯远Z10584494zbilibili 15700301_part1)rX   rY   r  r!  rT  r=  rp   rP  rO  rS  rV  rU  rR  rQ  rW  zinteractive/split-path videoz,https://www.bilibili.com/video/BV1af4y1H7ga/ZBV1af4y1H7gauI   【互动游戏】花了大半年时间做的自我介绍~请查收！！i>v/aZ20210901z$md5:01113e39ab06e28042d74ac356a08786u   钉宫妮妮Ninicoi  Z8881297zbilibili 292734508_part1)rX   r  r!  rT  r=  rR  rP  rp   rO  rS  rV  rU  rQ  rW  r   ZBV1af4y1H7ga_400950101u\   【互动游戏】花了大半年时间做的自我介绍~请查收！！ - 听见猫猫叫~z$md5:db66ac7a2813a94b8291dbce990cc5b2g(\5'@rX   rY   r  r!  rT  r=  rR  rP  rp   rO  rS  rV  rU  rQ  rW  )r   rO   rY  r^  r_  z3redirect from bvid to bangumi link via redirect_urlz+https://www.bilibili.com/video/BV1TE411f7f1Z288525u@   李永乐老师 钱学森弹道和乘波体飞行器是什么？u   我和我的祖国Z4780u   幕后纪实Z28609r   u0   钱学森弹道和乘波体飞行器是什么？i   g@i|r]Z20191021zre:https?://.*\.(jpg|jpeg|png)$)rX   r  rY   series	series_idseasonr$  season_numberepisode
episode_idepisode_numberrp   r!  rT  rQ  z2redirect from aid to bangumi link via redirect_urlz0https://www.bilibili.com/video/av114868162141203Z1933368u   PV 引爆变革的起点goʑO@u   时光代理人Z5183u	   第三季r   Z105212u   引爆变革的起点iiZzhZ20250718)rX   r  rY   rp   rg  rh  ri  rj  r$  rk  rm  rl  r!  rT  rQ  z)video has subtitles, which requires loginz+https://www.bilibili.com/video/BV12N4y1M7rhZBV12N4y1M7rhz$md5:96e8bb42c2b432c0d4ce3434a61479c1z$md5:afde2b7ba9025c01d9e3dde10de221e4gxs@Z20220709u   小夫太渴iCbZ
1326814124zcount:2zbilibili 898179753_part1)rX   rY   r  rR  r=  rp   rT  rP  r!  rO  rS  rV  rU  rQ  r   rW  Zlistsubtitleszlogin required for subtitle)r   rO   rY  r   skipz,https://www.bilibili.com/video/BV1jL41167ZG/ZBV1jL41167ZGu`   一场大火引发的离奇死亡！古典推理经典短篇集《不可能犯罪诊断书》！)rX   r  rY   zsupporter-only videorO   rY  rn  z,https://www.bilibili.com/video/BV1Ks411f7aQ/ZBV1Ks411f7aQu)   【BD1080P】狼与香辛料I【华盟】login requiredz,https://www.bilibili.com/video/BV1GJ411x7h7/Z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   rO   only_matchingc                    s0   |dd\} }j||d\}} |jsJ|jS ||d< jd|dd d}|s jd|d	i dd
rtdddddi}|	 }|dkr| |d< n|dkrȈ|d< j
ddd||d}t|dddthf}	|	rt|	r|	tS tdt|ddkr8  t|ddkrTtdddd |v}
|
rl|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 |rR|p&d*}|d0|d1d2t||d* d3fpJd4 7 }|d t d d5|pld* }|rt|d6|d* d7fn|d7i }|
rt|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 |r^t|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rt|dWdXdYthfp4i }t"d"dZ|d[d\ d]#  }sltd^| ddd_t|d`dat$hfv rj%db| dc t|ddsfded.t|dffdgd.t&hfD ]6}'t!j |dh|idUfdid. qʈ(| tdjd. }|rt|tk r)dks|dl*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 )NrX   prefixr   r%   window\.__INITIAL_STATE__\s*=initial statedefaultz\bwindow\._riskdata_\s*=ZriskZ	v_voucherz1You have exceeded the rate limit. Try again laterTexpectedplatformwebZBVr   ZAVr   z8https://api.bilibili.com/x/web-interface/wbi/view/detailzDownloading redirection URLz"Failed to download redirection URL)r   errnoter   r   r   ZViewZ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-   )r-  r   r-   r.   r>     r?   z*BiliBiliIE._real_extract.<locals>.<lambda>)iegetterz pZ02d partr   z%s_partZpagesr   )r  ZupNameZupMidZvideoStatuslikeZsectionEpisodesc                    s   |d  kS )Nr   r-   r:   r  r-   r.   r>     r?   cover)rP  rO  rU  rQ  re   )upDatanamer  r  stat)rR  .Ztag_nameZpic)rP  rO  rU  rR  rQ  descpubdate)Z	viewCount)r  viewr"  )r=  r!  rV  rS  z_p%d)rX   rW  r  http_headers)ZrightsZis_stein_gaterp   )rp   __post_extractorzwindow\.__playinfo__\s*=z	play infor   r:  Zis_upower_exclusiveZelecFullInfoZ	show_info
high_levelZ	sub_titleu   ，)	from_dictr@   z. z This is a supporter-only video: u   试看Zaccept_description.zDThis is a supporter-only video, only the preview will be extracted: r  rJ   c                    s   | t  dv S )Nr0   r4   ru   )rF   r-   r.   r>     r?   Zaccept_qualityc                    s
    | S rs   r-   r:   has_qnr-   r.   r>     r?   r   c                    s    |d  S r9   r-   r:   r  r-   r.   r>     r?   c                 S   s   |d S Nrq   r-   r:   r-   r-   r.   r>     r?   rc  rA   c                 s   s*   | ]"}| d  d| d dV  qdS )rx    (r^   )Nrt   )r5   fr-   r-   r.   rm     s   z+BiliBiliIE._real_extract.<locals>.<genexpr>c                 S   s   | d S r  rt   r:   r-   r-   r.   r>     r?   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 )Nr1   rc  r   )int_configuration_argr:   r+   r-   r.   r>   "  r?   c                 S   s   | d S r9   r-   ru   r-   r-   r.   r>   #  r?   )r   )r   rq   Zmulti_videoc              
      sv   g | ]n\}}d   d| d d i |dd  dig|dkrVnd|dkrj nddqS )rX   r;   r  r  r^   r   N)rX   r  r  rF   r   r  )r*   rC  extract_comments)r5   r   fragment)r   r   rF   rD  r,   r   r-   r.   r7   +  s   
z,BiliBiliIE._real_extract.<locals>.<listcomp>r   rq   rw   rU   rV   )_typeentriesrp   )rF   rp   r  r   r  )1_match_valid_urlgroupr(  Z_download_webpage_handlerO   r)  _search_jsonr*   r   upperr   r   r   r!   r*  suitableraise_login_requiredlistr}   r   r   _yes_playlistZplaylist_from_matchesrL  r   r   r   playlist_resultrE  r  r/   ry   r   r~   r   rD   r_   r  r  r{   rG   r  r   rC   maxr   r   r  rC  )r,   rO   rr  r   webpageZurlhinitial_stater   Zdetailnew_urlZis_festival
video_datar  Zpage_list_jsonZis_anthologyZpart_idZold_video_idZfestival_infoZis_interactiverE   r  msgr   Zflv_formatsZdropped_fmtsr-   )r   r   rF   r  rD  r,   r   r.   _real_extract  sN   




*
$



	










zBiliBiliIE._real_extractN)	rF  rG  rH  
_VALID_URLr  r  float_TESTSr  r-   r-   r-   r.   rL  2  s  (			    _rL  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 ):r*  z;https?://(?:www\.)?bilibili\.com/bangumi/play/ep(?P<id>\d+)z.https://www.bilibili.com/bangumi/play/ep21495/Z21495rM  u   悠久之翼Z774	   第二季Z1182r   u   forever／efr   u   12 forever／efgl)3@i(NZ20111104rN  rX   rY   rg  rh  ri  r$  rj  rk  rl  rm  r  rp   r!  rT  rQ  rX  znew playurlSSRData schemez.https://www.bilibili.com/bangumi/play/ep678060Z678060u   去你家吃饭好吗Z6198Z42542u6   吴老二：你家大公鸡养不熟，能煮熟吗…r   uI   一只小九九丫 吴老二：你家大公鸡养不熟，能煮熟吗…gp@i/$cZ20220916r`  z.https://www.bilibili.com/bangumi/play/ep267851Z267851   鬼灭之刃Z4358u	   立志篇26801r   u   残酷u   1 残酷g/$E@i ͨ\Z20190406zGeo-restrictedro  z,a making-of which falls outside main sectionz.https://www.bilibili.com/bangumi/play/ep345120Z345120u   炭治郎篇r   u   #1 炭治郎篇gt@i䛉_Z20201016c                    s  |  | |  }| j| |d}d|v r4tdnd|v rF| d ||d< | jd|d d	d d
p|| jd dd d|d}|d}d|v r|d }d|v r|d }|d u r|d}d|v r|d }t|ddd ddt	ht
f}|dk}t|dthfpi }| |}	|	sH|r$|   n$|s>d|v s>d|v rH| d t|dt
dd hfrt| 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 )?Nrs  u$   您所在的地区无法观看本片zThis video is restrictedu-   正在观看预览，大会员免费看全片z&This video is for premium members onlyr%   zplayurlSSRData\s*=zembedded page infor   )Zend_patternrw  z2https://api.bilibili.com/pgc/player/web/v2/playurlzExtracting episodei/  )r   ep_idr9  coderawr   r%  Zpluginsc                 S   s   |d dkS )Nr  ZAreaLimitPanelr-   r:   r-   r-   r.   r>     r?   z1BiliBiliBangumiIE._real_extract.<locals>.<lambda>configZis_blocki]r  u   成为大会员抢先看u   开通大会员观看))Z
play_checkZplay_detailZplay_video_typec                 S   s   | dv S )N)ZPLAY_PREVIEWpreviewr-   ru   r-   r-   r.   r>     r?   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 detailsr  c                 3   s,   | ]$\}}t |d  kr||fV  qdS )rX   N)r   r*   )r5   r   ep)rl  r-   r.   rm     s   z2BiliBiliBangumiIE._real_extract.<locals>.<genexpr>)r&  )section.r&  .r   r$  c                 3   s2   | ]*\}}| d  kr|d | dfV  qdS )r$  r   season_titleNrt   )r5   r   e)r$  r-   r.   rm     s   )Zseasons.)NNr   )rX   rF   rg  Zseries_titlerh  Zsquare_cover)rg  rh  rQ  
long_titler  c                    s   | p S rs   r-   ru   )rm  r-   r.   r>     r?   Zpub_timec                 S   s   | ot ddd| dS )Nr  r  r  r@   r  r   r<   r-   r-   r.   r>     r?   )rk  rm  r!  r  rw   rU   rV   r   r   )rl  ri  r$  rj  rp   r   r  r  )	_match_idr(  _download_webpager	   r  r  r   r*   r   r(   anyry   r~   raise_geo_restrictedr  rD   r>  r   r_   r   r!   r   r   rC  r  )r,   rO   r   r  rE   status_codeZgeo_blockedZpremium_onlyr  rF   Zbangumi_infoepisode_inforj  r  r   r-   )rl  rm  r$  r.   r    s    













zBiliBiliBangumiIE._real_extractNrF  rG  rH  r  r  r  r-   r-   r-   r.   r*  C  s   Qr*  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/md24097891Z24097891zCAROLE & TUESDAYz$md5:42417ad33d1eaa1c93bfd2dd1626b829rX   r  r=  r   rO   rY  playlist_mincountz.https://www.bilibili.com/bangumi/media/md1565/Z1565u   攻壳机动队 S.A.C. 2nd GIGz$md5:46cac00bafd645b97f4d6df616fc576dr   rY  Z68540rM  u   攻壳机动队Z1077r  r   u   再启动 REEMBODYr   u   1 再启动 REEMBODYgSח@iTZ20150227rN  r  r\  r]  rO   rY  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 )Nrt  r  Z	mediaInfor$  r  evaluater  r=  )r  r  r  r  r.  r   r_   )r,   rO   Zmedia_idr  r  r+  r-   r-   r.   r  #  s    
z$BiliBiliBangumiMediaIE._real_extractNr  r-   r-   r-   r.   r    sH   	&r  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/ss26801r  r  z$md5:e2cc9848b6f69be6db79fc2a82d9661br  r   r  z,https://www.bilibili.com/bangumi/play/ss2251Z2251u   玲音z$md5:1fd40e3df4c08d4d9d89a6a34844bdc4r   rY  Z50188rM  Z1526ZTVr   ZWEIRDz1 WEIRDgs@i`PZ20120725rN  r  r\  r]  r  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"[^>]*>infoZitemListElement.r  r=  r  Fre   )r  r  r   r  r_   r  r.  )r,   rO   r+  r  rD  r-   r-   r.   r  [  s    
z%BiliBiliBangumiSeasonIE._real_extractNr  r-   r-   r-   r.   r  3  sH   	&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rFtd
ddt |dsZ| 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 )'Nr&  c                    s   |d t  kS )NrX   )r  r:   r  r-   r.   r>   k  r?   z7BilibiliCheeseBaseIE._extract_episode.<locals>.<lambda>Fre   r   r   Z	ep_statusr  z)This course episode is not yet available.Trx  Zplayablez8You need to purchase the course to download this episodez0https://api.bilibili.com/pugv/player/web/playurlr   r   )Zavidr   r  r   ZfourkzDownloading playinfor   r   z'https://www.bilibili.com/cheese/play/ep)rX   rl  rF   Zextractor_keyZ	extractorZwebpage_urlr  c                 S   s   | ot ddd| dS )Nindexr  r;  r  r  r  r-   r-   r.   r>     r?   r   rp   r  r  Zrelease_dateplay)rk  r  	alt_titlerp   rm  rQ  r!  rV  Zup_infor  r  )rP  rO  r  )r   r  r  )r   r   r  r   r  r   r~   BilibiliCheeseIEie_keyIE_NAMEr_   r   r!   rC  r  )r,   r,  r  r  r   r   rE   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?=r#  )r   r   r   )r   r  )r,   Z	query_keyr   r-   r-   r.   _download_season_info  s    z*BilibiliCheeseBaseIE._download_season_infoN)rF  rG  rH  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229832rM     1 - 课程先导片   视频课 · 3分41秒	   马督工	316568752   课程先导片r      e20230924rN  rX   rY   r  r  rP  rO  rk  rl  rm  rp   r!  rT  rQ  rV  rX  c                 C   s   |  |}| | d||S )Nr  )r  r  r  )r,   rO   r  r-   r-   r.   r    s    
zBilibiliCheeseIE._real_extractN)rF  rG  rH  r  r  r  r  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/ss5918Z5918uB   【限时五折】新闻系学不到：马督工教你做自媒体u?   帮普通人建立世界模型，降低人与人的沟通门槛r  rY  r  rM  r  r  r  r  r  r   r  r  r  rN  r  r\  1rO   rY  r_  r   r   zpaid video in listrO   rY  r  rn  c                 c   s,   t |ddd dfD ]}| ||V  qd S )Nr&  c                 S   s   |d S )NZepisode_can_viewr-   r:   r-   r-   r.   r>     r?   z<BilibiliCheeseSeasonIE._get_cheese_entries.<locals>.<lambda>rX   )r   r  )r,   r,  r  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 )Nr$  r  r   r  )r  r  r  r  r   r_   )r,   rO   r$  r,  r-   r-   r.   r    s    

z$BilibiliCheeseSeasonIE._real_extractN)rF  rG  rH  r  r  r  r  r  r-   r-   r-   r.   r    sH   %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 | nS rs   r-   )r   
fetch_pageZ
first_pageget_entriesr-   r.   r>     r?   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)rF  rG  rH  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/videorX   Z3985676   r  z*https://space.bilibili.com/313580179/video	313580179\   z(https://space.bilibili.com/3669403/videoZ3669403rY  r_  Z3669403_3958082u   合集·直播回放r   u
   月路Yuel)	r  rX   r  r=  rP  rO  r!  rT  rQ  r\  7r  c                    sf    dd\ }|s$d  fdd}dd }fdd	}|||\}}| S )
NrX   rj   z{A channel URL was given. Only the channel's videos will be downloaded. To download audios, add a "/upload/audio" to the URLc                    st  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 nL ty } z2t|jtr|jjdkrtddd W Y d }~n
d }~0 0 |d }|dkr*tdddnB|dkrBtdddn*|dkrltd | d!|d"pdd# |d$ S )%Nr   )orderr   r  truer{  r   r&   r   i z[]r   @   )r   r      z0{"ds":[],"wh":[6093,6631,31],"of":[430,760,380]})keywordr  r  Zorder_avoidedrz  pnpstidZweb_locationZdm_img_listZ
dm_img_strZdm_cover_img_strZ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.Trx  r  ioz>Request is blocked by server (401), please wait and try later.iz#Request is rejected by server (352)zRequest failed (z): r  zUnknown errorr   )r   r   base64	b64encoder   randomr4  string	printablerandintr   decoder   r   r   
isinstancecauser   statusr*   )page_idxr   responser  r  playlist_idr,   rO   r-   r.   r     sX      




 z6BilibiliSpaceVideoIE._real_extract.<locals>.fetch_pagec                 S   s,   | d d }| d d }t || |dS )Nr  r  r  r  r  )mathceil	page_datar  Zentry_countr-   r-   r.   r  G  s
    z8BilibiliSpaceVideoIE._real_extract.<locals>.get_metadatac              	   3   s   t | dddthfD ]r}t |ddkrh 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/r  z/lists/r!  rX   z?type=seasonr;   r  r   )r   ry   r)  BilibiliCollectionListIErL  r  r-  r+   r-   r.   r  O  s    z7BilibiliSpaceVideoIE._real_extract.<locals>.get_entries)r  r  rC   r  r  )r,   rO   Zis_video_urlr  r  r  r;   r  r-   r  r.   r    s    
'
z"BilibiliSpaceVideoIE._real_extractNrF  rG  rH  r  r  r_   r  r  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/audiorX   r  r   r  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 )NZ	pageCountZpageSizer  r-   r  r-   r-   r.   r  p  s    z8BilibiliSpaceAudioIE._real_extract.<locals>.get_metadatac                 3   s6   |  dpg D ]"} d|d  t|d V  qd S )Nr   !https://www.bilibili.com/audio/aurX   )r*   r)  BilibiliAudioIEr&  r+   r-   r.   r  v  s    z7BilibiliSpaceAudioIE._real_extract.<locals>.get_entries)r  r  r  )r,   rO   r  r  r  r;   r  r-   r.  r.   r  g  s    
z"BilibiliSpaceAudioIE._real_extractNr  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   sL   t |g t|ttttfd|thR D ]}| d| t|V  q,d S )N.r  )r   r#   r_   bytesry   rB   r)  rL  )r,   r  Z	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[^>]*>([^<]+)的个人空间-rP  )r  _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  Z	page_list	__class__r-   r.   r    s    z)BilibiliSpaceListBaseIE._extract_playlist)r   )rF  rG  rH  r5  r8  r  __classcell__r-   r-   r:  r.   r2    s   
r2  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=seasonZ2142762_3662502u)   合集·《黑神话悟空》流程解说u   黑神话悟空 相关节目u   老戴在此Z2142762zThttps://archive.biliimg.com/bfs/archive/22302e17dc849dd4533606d71bc89df162c3a9bf.jpg)rX   r  r=  rP  rO  r!  rT  rQ  r   r  z0https://space.bilibili.com/2142762/lists/3662502TrO   rq  zEhttps://space.bilibili.com/2142762/channel/collectiondetail?sid=57445c                    s   t |rdS t |S )NF)BilibiliSeriesListIEr  r9  )clsrO   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 )
Nr  sidr;   c              
      s0   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&   )r  r$  page_numr  r   r   r   r   r,  r-  r  r  r,   r@  rO   r-   r.   r    s    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  rP  r!  r  r=  r  Zptimer  )r  r=  rO  r!  rQ  )r  r  r8  r   r_   r   r   r!   r  )r  r  r,   r-   r.   r    s    





z<BilibiliCollectionListIE._real_extract.<locals>.get_metadatac                    s     | dS Narchivesr5  r/  r+   r-   r.   r    s    z;BilibiliCollectionListIE._real_extract.<locals>.get_entries)r  r  r  r  r,   rO   r  r  r  r  r  r-   rC  r.   r    s    z&BilibiliCollectionListIE._real_extract)rF  rG  rH  r  r  r_   r  classmethodr  r  r<  r-   r-   r:  r.   r%    s2   
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=seriesZ1958703906_547718   直播回放
   靡烟miya
1958703906=a20211127)	rX   r  r=  rP  rO  r!  rT  modified_timestampmodified_date  r  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 )Nr  r@  r;   z3https://api.bilibili.com/x/series/series?series_id=Fr6  r   r!  r  r=  r  mtime)r  r=  rO  r!  rP  c              
      s0   j dd|  di | d dddd S )	Nz*https://api.bilibili.com/x/series/archivesr)  r%   r   r&   )r  rh  r
  r  rB  r   r,  r-  rC  r-   r.   r    s    z6BilibiliSeriesListIE._real_extract.<locals>.fetch_pagec                    s:   | d d }| d d }t || | dS )Nr  rW   rD  rE  )r  r  r8  r  )r  r  playlist_metar,   r-   r.   r    s    
z8BilibiliSeriesListIE._real_extract.<locals>.get_metadatac                    s     | dS rF  rH  r/  r+   r-   r.   r    s    z7BilibiliSeriesListIE._real_extract.<locals>.get_entries)	r  r  r   r   r_   r   r   r  r  rI  r-   )r  r  rT  r,   r@  rO   r.   r    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=createZ
1103407912   【V2】（旧）r      晓月春日84912_20201109Sre:http://i\d\.hdslb\.com/bfs/archive/14b83c62aa8871b79083df1e9ab4fbc699ad16fe\.jpg)rX   r  r=  rP  rO  r!  rT  rP  rQ  rQ  rV  rU  r   r  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   r  r  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  intror  r  r  r  rS  r  Zcnt_infor  Zthumb_up)	r  r=  rP  rO  r!  rP  rQ  rV  rU  )
r  r   r  r5  r  r   r_   r   r   r!   )r,   rO   ZfidZ	list_infor  r-   r-   r.   r  "  s0    





z%BilibiliFavoritesListIE._real_extractNr'  r-   r-   r-   r.   rU  
  s,   rU  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   rp  r  c                 C   sX   t | |ddd}| d|}|d dkr<| jdd | |d	}| j||d
dS )NZ
DedeUserIDvalue
watchlaterz<https://api.bilibili.com/x/v2/history/toview/web?jsonp=jsonpr  iz0You need to login to access your watchlater listr\  )r   r  r_  r[  )getattrr)   r*   r   r  r5  r  )r,   rO   list_idZwatchlater_infor  r-   r-   r.   r  H  s    z"BilibiliWatchlaterIE._real_extractNr  r-   r-   r-   r.   r^  <  s   
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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=547718Z5_547718rK  rL  rM  rN  rO  )rX   r  rP  rO  r!  rT  rR  r  zShttps://www.bilibili.com/list/1958703906?sid=547718&oid=687146339&bvid=BV1DU4y1r7tzZBV1DU4y1r7tzrM  uB   【直播回放】8.20晚9:30 3d发布喵 2022年8月20日21点场Z20220820r   i
crN  g%s@zbilibili 687146339_part1ra  Z
noplaylistTrb  zbhttps://www.bilibili.com/medialist/play/1958703906?business=space_series&business_id=547718&desc=1rX   zredirect urlr  z*https://www.bilibili.com/list/ml1103407912Z3_1103407912rV  rW  rX  rY  rZ  r[  )rX   r  rP  rO  r!  rT  rQ  r   z4https://www.bilibili.com/medialist/play/ml1103407912z(https://www.bilibili.com/list/watchlaterzre:2_\d+r_  )rX   r  rP  rO  r   rp  z2https://www.bilibili.com/medialist/play/watchlaterra  zredirect url & login requiredc              	   c   sn   t dD ]^}| jd||d|d  d| dd }| j|dd	d
E d H  t|d|d< |dds
 qjq
d S )Nr   z5https://api.bilibili.com/x/v2/medialist/resource/listzgetting playlist biz_idz page r1  r   
media_listZbv_id)r4  )rf  r  rX   oidZhas_moreF)r  r  r   r5  r   r*   )r,   r   rc  rA  r  r-   r-   r.   _extract_medialist  s    z%BilibiliPlaylistIE._extract_medialistc           
      C   s  |  |}tt|d}| ||s6| d| tS | ||}| d|d|}t|dtdd t	f}|r|d d	kr|
d
}|dkr|dkr| d n(|dkr| d n|dkrt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  rt  ru  )r}  Z	listErrorc                 S   s   |d S )Nr  r-   r:   r-   r-   r.   r>     r?   z2BilibiliPlaylistIE._real_extract.<locals>.<lambda>r     r~  ipra  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 availableTrx  zCould not access playlist: r  r  r   F)r  Zwith_currentr_  typerX   r  Z	sortFiledr  )rj  re  r  Z
sort_fieldr  r;   re  ZmediaListInfor  r  r  r  r  r  )r  rP  rO  r!  rQ  )r  r   r   r  r)  rL  r  r  allr  r*   r  r   r   r   r   r_   r`   r   r!   r  rh  )
r,   rO   rc  r   r  r  r}  Z
error_coder   r  r-   r-   r.   r    sL    







z BilibiliPlaylistIE._real_extractN)
rF  rG  rH  r  r  r  r_   r  rh  r  r-   r-   r-   r.   rd  R  s   	Jrd  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   Zplaylistend)rO   rY  r  r   c                 c   sp   | j ||||dd| d| d}t|dtd}|sDtd| |D ]"}| d|d	 d
|d	 V  qHd S )N
Search_keyr
  Extracting results from page z of r1  )r   rG  r  z'Failed to retrieve video list for page z!https://www.bilibili.com/video/{}r   BiliBili)r   r   r  r   r)  rg   )r,   api_url	num_pagesr   rA  Zparsed_jsonZ
video_listrj   r-   r-   r.   _fetch_page  s    zBilibiliCategoryIE._fetch_pagec                 C   s   dddddddi}||vr8t d| d	t|  ||| vrdt d
| dt||   || | }d| }| j|||ddd}t|dtd}t|dt|d }	}
|	d u s|
st dt	|	|
 }t
t| j||||
S )NZkichikur   rc   r         )ZmadZmanual_vocaloidZguideZtheatreZ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  rm  r   )r   r  r  r  rW   z-Failed to calculate either page count or size)r   r  keysr   r   ry   r   r*   r  r  r   	functoolspartialrs  )r,   categorysubcategoryr   Zrid_mapZ	rid_valuerq  Z	page_jsonr  r  rW   rr  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  r|  )r,   rO   rz  r{  r   r-   r-   r.   r    s     z BilibiliCategoryIE._real_extractN)
rF  rG  rH  r  _MAX_RESULTSr  r  rs  r|  r  r-   r-   r-   r.   rl    s    rl  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 Z
bilisearchuX   bilisearch3:靡烟 出道一年，我怎么还在等你单推的女人睡觉后开播啊r   uL   靡烟 出道一年，我怎么还在等你单推的女人睡觉后开播啊r[  rY  ZBV1n44y1Q7scrM  um   “出道一年，我怎么还在等你单推的女人睡觉后开播啊？”【一分钟了解靡烟miya】icZ20221201z$md5:43343c0973defff527b5a4b403b4abf9rL  gDl^@rM  rN  zbilibili 988222410_part1re  )rO   r^  rY  r_  c                 c   s   |  dds(| ddt  d tdD ]j}| jd|d| |||dd	dd
dd	dd
dd d}|sv q|D ] }| |d dt	|d V  qzq2d S )Nr'   Zbuvid3z.bilibili.comZinfocr   z4https://api.bilibili.com/x/web-interface/search/typero  r   r   r  rj   )
rn  r	  r  contextrp   Ztids_2Z__refresh__Zsearch_typeZtidsZ	highlightr+  r   r%  Zarcurlrp  r   )
r)   r*   Z_set_cookieuuiduuid4r  r  r   r)  r_   )r,   r   rA  Zvideosrj   r-   r-   r.   _search_results9  s4    z BiliBiliSearchIE._search_resultsN)
rF  rG  rH  ZIE_DESCr  Z_SEARCH_KEYr  r  r  r  r-   r-   r-   r.   r    s8   r  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/rv  r   r,  )r,   r  r@  r   r-   r-   r.   	_call_apiR  s    zBilibiliAudioBaseIE._call_api)N)rF  rG  rH  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 )r1  z4https?://(?:www\.)?bilibili\.com/audio/au(?P<id>\d+)z(https://www.bilibili.com/audio/au1003142Z fec4987014ec94ef9e666d4d158ad03bZ1003142Zm4au   【tsukimi】YELLOW / 神山羊Ztsukimiu   YELLOW的mp3版！   originrY   Zlrczre:^https?://.+\.jpgiE]Z20190803u   十六夜tsukimiつきみぐ)rX   rY   r  artistrS  r=  rp   r   rQ  r!  rT  rP  rV  )rO   r   rY  c                 C   s   |  |}| d|}|d d t|dddg}|D ]}|di d|i q:| d	|}|d
 }|dpvi }d }	|d}
|
rdd|
igi}	||||dt|d|dt|d|	|dt|d|dt|ddS )NrO   Zcdnsr   rW   rS   )rO   r]   r[   r  r%   z	song/infor  	statisticlyricr  r  commentr]  rp   r  Zpasstimer  r  )rX   r  rF   r  rS  r=  rp   r   rQ  r!  rP  rV  )r  r  r   r*   r  r   )r,   rO   Zau_idZ	play_datarF   Za_formatsongr  r  r   r  r-   r-   r.   r  t  sB    


zBilibiliAudioIE._real_extractN)rF  rG  rH  r  r  _TESTr  r-   r-   r-   r.   r1  Z  s,   r1  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/am10624Z10624u   新曲推荐u,   每天11:00更新，为你推送最新音乐r  r   )rO   rY  r^  c           
      C   s   |  |}| d||dddd }g }|D ]4}t|d}|sDq,|| d| t | q,|r| d|pti }|d	}|r|D ]}	||	d
< q| ||||dS | ||S )Nzsong/of-menur   d   )r@  r
  r  r   rX   r0  z	menu/infor  Zalbumr]  )	r  r  r   r*   rz   r)  r1  r  r  )
r,   rO   Zam_idZsongsr  r  r@  Z
album_dataZalbum_titler-  r-   r-   r.   r    s2    


z"BilibiliAudioAlbumIE._real_extractNrF  rG  rH  r  r  r  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   )r  r)  rL  r  )r,   rO   r   r-   r-   r.   r    s
    

zBiliBiliPlayerIE._real_extractNr  r-   r-   r-   r.   r    s
   r  c                   @   sH   e Zd ZdZddddedgddd	d
eedddeeddgZdd ZdS )BiliBiliDynamicIEzFhttps?://(?:t\.bilibili\.com|(?:www\.)?bilibili\.com/opus)/(?P<id>\d+)z)https://t.bilibili.com/998134289197432852ZBV1TAmBYVEJrrM  Z
1192648858zbilibili 113457567568273_part1zLhttp://i2.hdslb.com/bfs/archive/50091efd965d9f13ff6814f7ad374f90ab21e77d.jpggCl	@Z20241110u   何同学工作室u>   美国小朋友就玩这个？！何同学工作室11月开箱up   本期产品信息：
机器狗
气味模拟器
Cloudboom Strike LS
无弦吉他
蓝牙磁带音箱
神奇画板i 0g)rX   rY   rO  rS  rW  rQ  rp   rT  rP  rU  rV  r  r=  r!  rR  r  rX  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
}|rd| |rp||  |krptddd| |S )Nz8https://api.bilibili.com/x/polymer/web-dynamic/v1/detailrX   z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36r9  r   item)NorigmodulesZmodule_dynamic))major)archiveZpgc)
additional)ZreservecommonZjump_urlzNo valid video URL foundTrx  )	r  r   r   r!   r  Z_proto_relative_urlr  r   r)  )r,   rO   Zpost_idZ	post_dataZ	video_urlr-   r-   r.   r    s    

zBiliBiliDynamicIE._real_extractN)rF  rG  rH  r  r  r  r  r  r-   r-   r-   r.   r    s*   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/gatewayZbiliintlr%   zhttps://www.bilibili.tv/c                 O   s   | j | j| g|R i |}|dr|d dv r>|   n|d dkrT|   nl|drt|d |d kr|dd d| j d|d  }n|dd}|d	rt|n
| | |d
S )Nr  )i$ i% i^ i! r  r|   Unable to download JSON metadatar}   said: r  r   )	r   _API_URLr*   r  r  r_   r  r   r  )r,   ZendpointargskwargsrA  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   sD   | ]<\}}|d   dt |d  dt |d  d|d  V  qdS )r   r   r   r   r   r   N)r   )r5   r   r   r-   r-   r.   rm     s   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,   rA  r-   r-   r.   r     s
    
zBiliIntlBaseIE.json2srtNr  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 ]}t|ddthfD ]}||v rlq^|| t|}|dpd}	|dkr|	|	g 
d|d q^|dkr| j||p|ddt|dd d|	 ddd}
|
r|	|	g 
d| |
d q^| d|p| q^qH|S )Nz/web/v2/subtitleFzDownloading subtitles listz!Unable to download subtitles listr{  en_US)rz  s_localerl  r   )r  r   r|  r   )r   Zvideo_subtitle.)Nassr   rO   Zlang_keyenr  r   rA  zDownloading subtitleslangz for %sr  r  zUnable to download subtitles)r  r   r|  r   r   zUnexpected subtitle extension)r  r   rB   r   ry   r!   addr   r*   r  rz   r   r   r   r  )r,   r  r   Zsub_jsonr   Zfetched_urlssubrO   Zsub_extZsub_langZsub_datar-   r-   r.   r    sN    
	




zBiliIntlBaseIE._get_subtitlesc          	      C   s  | j d|p|ddtd||dd}|d }g }|dp<g D ]r}|d	pNi }|d
p\i }|dsjq>||d d|d|d|d|dd|d|dd	 q>|dpg D ]>}|dsq||d d|d|dd|dd q|S )Nz/web/playurlzDownloading video formatsz Unable to download video formatsr{  )rz  r  r   )r   r|  r   playurlrj   Zvideo_resourceZstream_inforO   rM  Z
desc_wordsra   rb   rT   rS   rR   rW   )	rO   rY   rx   ra   rb   ZvbrrZ   r[   r]   Zaudio_resource)rO   rY   ZabrrZ   r[   r]   )r  r   r*   rz   )	r,   r  r   Z
video_jsonrF   ZvidZ	video_resr  Zaudr-   r-   r.   _get_formatsD  sL    




	zBiliIntlBaseIE._get_formatsc                 C   sR   | dp| d| d| dt| dt| jd| dpBddd d	d
S )NZtitle_displayr  r  r  Zformatted_pub_datez^E(\d+)(?:$| - )r   zepisode numberrv  )r  r=  rQ  r!  rm  )r*   r   r   r7  )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rtd| j d|d  ddntdd S )Nz'pycryptodomex not found. Please installTrx  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passwordZkeep_mer  Z	isTrustedz
Logging inzUnable to log in)r   r   r|  r  r  zUnable to log in: r  )r   ZRSAr   r   Z	importKeyZ
PKCS1_v1_5newZencryptr   r"   r  r  r  r*   r  )r,   r  r  Zkey_dataZ
public_keyZpassword_hashZ
login_postr-   r-   r.   _perform_loginv  s2    	

 zBiliIntlBaseIE._perform_login)rF  rG  rH  r  Z_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/341736Z341736rM  zE2 - The First Night.re:^https://pic\.bstarstatic\.com/ogv/.+\.png$r   Z20201009z	Episode 2i,_$md5:297b5a17155eb645e14a14b385ab547er   gsh|S@z<Untitled Chapter 1>r	  r
  r  gx&%d@Introg@g'1@Outro)
rX   rY   r  rQ  rm  rT  rk  r!  r=  r  rX  z0https://www.bilibili.tv/en/play/1033760/11005006Z11005006z	E3 - Who?r   z$md5:e1a775e71a35c43f141484715470ad09z	Episode 3Z20211219i|Sag      V@g     c@g     T@gq=
#@)
rX   rY   r  rQ  rm  r=  rk  rT  r!  r  z0https://www.bilibili.tv/en/play/1005144/10131790Z10131790z$E140 - Two Heartbeats: Kabuto's Trap   )rX   rY   r  rQ  rm  zZAccording to the copyright owner's request, you may only watch the video after you log in.ro  z,https://www.bilibili.tv/en/play/34580/340317Z340317i_Z20201030r   zE5 - My Own Steelz$md5:2b17ab10aebb33e3c2a54da9e8e487e2z.re:https?://pic\.bstarstatic\.com/ogv/.+\.png$z	Episode 5g     N@g     `@g     (@g     @)rX   rY   r!  rT  rm  r  r=  rQ  rk  rS  r  getcommentsTrb  z+https://www.bilibili.tv/en/video/2045730385Z
2045730385z$md5:693b6f3967fb4e7e7764ea817857c33aijcZ20221108zUThat Time I Got Reincarnated as a Slime: Scarlet Bond - Official Trailer 3| AnimeStanzRre:https://pic\.bstarstatic\.(?:com|net)/ugc/f6c363659efd2eabe5683fbb906b1582\.jpg)rX   rY   r=  r!  rT  r  rS  rQ  z0https://www.bilibili.tv/en/play/1048837/11246489Z11246489zE1 - Operation 'Strix' <Owl>$md5:b4434eb1a9a97ad2bccb779514b89f17ipQbzLhttps://pic.bstarstatic.com/ogv/62cb1de23ada17fb70fbe7bdd6ff29c29da02a64.pngz	Episode 1r   Z20220409)	rX   rY   r  r=  r!  rQ  rk  rm  rT  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   rh  r-   r-   r.   	_make_url!	  s    zBiliIntlIE._make_urlc           	         s   t |i \}}|dr|S | | }| jd|d i dpN| j| ddd d}t|dd	d
tdpdi }|r|s| d| d }t|ddd fddftdd}t| 	|t
d|p| d|t
d|p| d|d| j| i dS )Nr  z&window\.__INITIAL_(?:DATA|STATE)__\s*=zpreload staterv  Z__initialStateF)r  traverse)ZOgvVideoZepDetail)ZUgcVideor  )Zugcr  r  $/web/v2/ogv/play/episodes?season_id=&platform=websections.r&  c                    s   t |d  kS )Nrl  )r_   r:   r  r-   r.   r>   8	  r?   z4BiliIntlIE._extract_video_metadata.<locals>.<lambda>)r  rf   zbstar-meta__titlezog:titlezbstar-meta__desczog:descriptionr  )r    r*   r  r  Z_search_nuxt_datar   ry   r  r   r  r   Z_html_search_metaZ_search_json_ld)	r,   rO   r   r$  Zsmuggled_datar  Zinitial_datar  Z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}t|d	t|d
t|dt|d|dt|d|dt|ddV  q2t|ds| ||d d d |E d H  d S )Nz(https://api.bilibili.tv/reply/web/detailzDownloading reply comment of r;  r{  r   )rz  r  r  r>  r+  r   r  .r  r  r  r  facer  r  rU  r  
ctime_text)r  r  author_thumbnailr   rX   rU  r  r!  r   cursorZis_endr   r  r>  )r   r   r*   r   r   _get_comments_reply)r,   Zroot_idZnext_id
display_idcomment_api_raw_datar  r-   r-   r.   r  D	  s.    


zBiliIntlIE._get_comments_replyc                 c   s   t dD ]}| jd|d|d  d|d||r2d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rJ| j|d|dE d H  qJt|dr
 qq
d S )Nr   z&https://api.bilibili.tv/reply/web/rootzDownloading comment page r   r{  r   r   )rz  r
  r  rg  rj  Z	sort_typer+  r  r  r  r  r  r  rU  r  )r  rj  )r  r  r  r   rX   rU  r!  Zauthor_is_uploaderr  )r  r  )	r  r  r   r   r*   r   r   r(   r  )r,   r   r  r   r  r  r-   r-   r.   r  _	  s4    



zBiliIntlIE._get_commentsc                 C   s   |  |ddd\}}}|p |}d }|r| jd| d|ddpDi }|drt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 )Nr$  r  r   z$/web/v2/ogv/play/episode?episode_id=r  Fr6  rn  )rn  Zopening_start_timerU   )rn  Zopening_end_timer  r  )rn  Zending_start_time)rn  Zending_end_timer  rX   r  )rF   r   r  r  r  )r  r  r  r*   r   r   r  r  rC  r  r  )r,   rO   r$  r  r   r   r  Zintro_ending_jsonr-   r-   r.   r  ~	  s<    


zBiliIntlIE._real_extract)N)r   N)rF  rG  rH  r  r  r  staticmethodr  r  r  r  r  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   Z34613zTONIKAWA: Over the Moon For Your  )zSlice of lifeComedyZRomancer  )rX   r  r=  
categoriesrQ  rV  rZ  T)rO   r  rY  r   z(https://www.bilibili.tv/en/media/1048837Z1048837u   SPY×FAMILYr  )Z	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                 c   s\   |  d| d|}t|dtdD ]4}t|d }| tt||| |t|V  q"d S )Nr  r  )r  .r&  .r  rl  )	r  r   ry   r_   r)  r   r  r  r  )r,   rh  Zseries_jsonrk  rl  r-   r-   r.   r|  	  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  ri  r  r=  )Zstyles.r  r  Zhorizontal_coverr  )r  rQ  rV  )	r  r  r*   r  r|  r   r   r!   r   )r,   rO   rh  Zseries_infor-   r-   r.   r  	  s    
zBiliIntlSeriesIE._real_extractN)	rF  rG  rH  r  r  r  r  r|  r  r-   r-   r-   r.   r  	  sB   	!	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/196Z33989u   周六杂谈回，其他时候随机游戏。 | 
录播：@下播型泛式录播组。 | 
直播通知群（全员禁言）：666906670，902092584，59971⑧481 （功能一样，别多加）rd  u-   太空狼人杀联动，不被爆杀就算赢zYhttps://i0.hdslb.com/bfs/live/new_room_cover/e607bc1529057ef4b332e1026e62cf46984c314d.jpgiQ@eb)rX   r=  rY   r  rQ  r!  znot livero  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   流畅)r^   rx   Zhigh_resu   高清Zultra_high_resu   超清Zblue_rayu   蓝光sourceu   原画Z4KrK   u   杜比)P         i  i'  i N  i0u  c                 C   sD   | j d| ||d}|ddkr6t|dp2d|dpBi S )Nzhttps://api.live.bilibili.com/rv  r  r   r  r  r   )r   r*   r   )r,   r  room_idr   Z
api_resultr-   r-   r.   r  	  s    zBiliLiveIE._call_apic                 c   sz   | dpg D ]f}| d|kr"q|d D ]H}|d  |d  |d  | d| d| |d	| j| V  q*qd S )
NcodecZ
current_qnurl_infohostrN   extraformat_nameZ
codec_name)rO   rY   r[   r1   )r*   _quality_FORMATS)r,   r   r6   r  r  r-   r-   r.   _parse_formats	  s    zBiliLiveIE._parse_formatsc                 C   s   |  |}| d|d|i}|ddkr6tdddg }| jD ]J}| d|||d	d
dddd	d}t|dppg D ]}|| || qrq@||d|d|d|d|dd|idS )Nzroom/v1/Room/get_inforX   Zlive_statusr   zStreamer is not liveTrx  z'xlive/web-room/v2/index/getRoomPlayInfoz0,1z0,20r{  )r  r   r  rg   maskZ
no_playurlrz  rr   )Zplayurl_infor  stream.rg   .r  r=  Z
user_coverZ	live_timer%   )rX   r  r=  rQ  r!  rF   Zis_liver  )r  r  r*   r   r  r   r{   r  )r,   rO   r  Z	room_datarF   r   Zstream_datar6   r-   r-   r.   r  
  s8    


zBiliLiveIE._real_extractN)rF  rG  rH  r  r  r  r  r   r  r  r  r  r  r-   r-   r-   r.   r  	  s<   
r  )Mr  rx  r   r  rA  r  r  rI  r  r   urllib.parser   r  r  r   r   Zdependenciesr   Z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$   rL  r*  r  r  r  r  r  r  r  r(  r2  r%  r>  rU  r^  rd  rl  r  r  r1  r  r  r  r  r  r  r  r-   r-   r-   r.   <module>   sl   x        98507g"?<2 D8	F')   7