U
    gÐ                    @   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mZmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ G dd	 d	eZ0G d
d de0Z1G dd de0Z2G dd de0Z3G dd de0Z4G dd de0Z5G dd de5Z6G dd de5Z7G dd de0Z8G dd de8Z9G dd de8Z:G dd de8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;Z@G d*d+ d+eZAG d,d- d-eZBG d.d/ d/eZCG d0d1 d1eCZDG d2d3 d3eCZEG d4d5 d5eZFG d6d7 d7eZGG d8d9 d9eGZHG d:d; d;eGZIG d<d= d=eZJdS )>    N   )InfoExtractorSearchInfoExtractor   )
Cryptodome)	HTTPError)ExtractorErrorGeoRestrictedErrorInAdvancePagedListOnDemandPagedListbool_or_none
clean_htmldetermine_extfilter_dictfloat_or_noneformat_fieldget_element_by_classint_or_nonejoin_nonemptymake_archive_idmerge_dictsmimetype2extparse_countparse_qs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.   =/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/bilibili.pyis_logged_in6   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_descr2   r   ).0fmtr.   r.   r/   
<listcomp><   s   z9BilibiliBaseIE._check_missing_formats.<locals>.<listcomp>support_formatsc                    s   |d  kS Nr2   r.   _vZparsed_qualitiesr.   r/   <lambda>?       z7BilibiliBaseIE._check_missing_formats.<locals>.<lambda>delim, z
Format(s) zM are missing; you have to login or 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                    sV  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jtddhfdt	hfdf}|rR||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j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>F   s    z2BilibiliBaseIE.extract_formats.<locals>.<dictcomp>r9   c                 S   s   |d S r:   r.   r;   r.   r.   r/   r?   H   r@   z0BilibiliBaseIE.extract_formats.<locals>.<lambda>dash)Ndolbyaudio.)rK   ZflacrM   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)rP   extacodecvcodectbrfilesize	format_id)r   r   strlowerr   r+   r   r   )r6   rM   r.   r.   r/   r8   O   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 )rN   rO   rP   rQ   rR   Z	frameRateZ
frame_ratewidthheightrS   rT   NZDVZHDR10)~   }   rY   rU   rV   rW   rX   )rN   rO   r   Fget_all)rP   rZ   Zfpsrb   rc   r\   r[   Zdynamic_ranger]   r^   r2   r_   format)r   r   r   r   r+   _FORMAT_ID_REsearchr   )r6   videoZaudiosformat_namesr-   r.   r/   	<genexpr>Y   s(   
  z1BilibiliBaseIE.extract_formats.<locals>.<genexpr>)rK   rk   .Zdurlc                 S   s   t |d S )NrP   r"   r;   r.   r.   r/   r?   n   r@   rP   lengthrV   rW   rX   )rP   durationr^   r   ).r^   )rP   r^   r   Zhttp_dash_segments)	fragmentsprotocolr2   c                    s
     | S Nr+   x)rm   r.   r/   r?   ~   r@   
timelength)r2   r_   format_noterq   )r   dictappendextendrH   r"   	functoolspartialr   r   sumlenr   r   r+   )r-   rF   Z
flac_audiorG   rr   r.   rl   r/   extract_formatsE   sP    





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 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/d0d1d2d3d4d5d6dd7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKg@}| jd fdLdM|D d d t   dN | jd S )ON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	partitionrv   r.   r.   r/   r?      r@   z-BilibiliBaseIE._get_wbi_key.<locals>.<lambda>.   /      r   5                2   
      :      -   #      +      1   !   	   *               '      &   )      %   0            7   (   =         r   <   3   r'            6      8   ;      ?   9   >      $      "   ,   4   c                 3   s   | ]} | V  qd S rt   r.   )r6   ilookupr.   r/   rn      s     z.BilibiliBaseIE._get_wbi_key.<locals>.<genexpr>)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kS )Nz!'()*r.   )charr.   r.   r/   r?      r@   z5BilibiliBaseIE._sign_wbi.<locals>.<dictcomp>.<lambda>)r   filterr`   )r6   kr=   r.   r.   r/   rJ      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   sH   ||dd}|r||d< | j d|| |||d| d|p:d dd	 S )
Ni  )bvidcidfnvalqnz-https://api.bilibili.com/x/player/wbi/playurlz"Downloading video formats for cid  r   r   headersr   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rZ   rP   $https://api.bilibili.com/x/player/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   rZ   r   )r   _HEADERSr   report_warningrE   
setdefaultr{   r   )r-   r   r   r   r   
video_infosr.   r.   r/   _get_subtitles   s8    
  
    

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_idrY   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_urlrY   ro   r;   r.   r.   r/   r?      r@   z:BilibiliBaseIE._get_episodes_from_season.<locals>.<lambda>r)  rY   )r   geo_verification_headersr   
url_resultBiliBiliBangumiIEr   r+   )r-   ss_idrP   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 |k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 )Nr2  r.   r;   r2  r.   r/   r?     r@   z/BilibiliBaseIE._get_divisions.<locals>.<lambda>r
  r   )r
  r   Frf   edgesZ	questions.choicesrY   option)r2  r   r"  )r
  r6  r2  )	cid_edges)r   r  r   r   r`   r   _get_divisions)r-   r   r1  r5  r2  r8  Zdivision_datachoicer.   r4  r/   r9     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 ]\}}| j|||d
}|| d| |d dtt|	 d | 
|tj|dd d|dd t|ddd| ||dV  qJd S )Nz(https://api.bilibili.com/x/player/wbi/v2zExtracting graph versionr   r   r   r   Zinteractionr1  r   r   r   r<   r
   - F)ensure_asciir   descriptionr   rx   rV   rW   )rY   r
  rG   r?  rq   r   )r   r   r   r9  r   r   r+   nextitervaluesr   jsondumpsr   extract_subtitles)	r-   r   r   metainfor   r1  r8  r5  rF   r.   r.   r/   _get_interactive_entries  s*       $
z'BilibiliBaseIE._get_interactive_entries)NN)N)N)N)__name__
__module____qualname__r  recompileri   r   r   propertyr0   rH   r   r   r   r   r   r  r  r  r  r0  r9  rG  r.   r.   r.   r/   r%   0   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d2d3d4d'dd(d)d*d	d+d,eed-ed.d/d0gd1d5d6ddddd7dddd	d
eeeedgd8ddid9d:d;d<dd=d>d?d@edAdBdCdDeeed	dEgdFddiddGdHdIddJdKdLdMdNdOdPeed	dQgdRd5dSdTdUddVdWdXdYdZd[d\eed	d]gdRd5d^d_d`dadbdcddededfeeeed	dggdhdidjdkdlgiiidmd&dndodadpdqigdrdsdtduddvdwdxdydzd{d|eeeed	d}gd~d5dddddddedddeeed	dgddd&ddddddedddeeed	dgdigd2ddddddddddddddddd	dd5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 )
BiliBiliIEzhhttps?://(?:www\.)?bilibili\.com/(?:video/|festival/[^/?#]+\?(?:[^#]*&)?bvid=)[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)rY   r
  rZ   r?  uploader_iduploader	thumbnailrq   tagscomment_countupload_dater#  
like_count
view_count_old_archive_idsrP   	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)rY   rZ   r
  rR  rQ  rq   rV  r#  r?  rW  rU  rX  rT  rS  rY  skip_downloadT)r   rP   r[  r   Z	Anthologyz+https://www.bilibili.com/video/BV1bK411W797ZBV1bK411W797u/   物语中的人物是如何吐槽自己的OP的rY   r
  r   r[  ZBV1bK411W797_p1uR   物语中的人物是如何吐槽自己的OP的 p01 Staple Stable/战场原+羽川zcount:10ie^u   打牌还是打桩Z	150259984Z20200516z$md5:e3c401cf7bc363118d1783dd74068a68gjtV@zbilibili 498159642_part1)rY   rZ   r
  rT  r#  rS  rR  rQ  rW  rU  rV  rX  r?  rq   rY  )r   rP   r[  playlist_countplaylistzSpecific page of Anthologyz/https://www.bilibili.com/video/BV1bK411W797?p=1r   rP   r[  z)https://www.bilibili.com/video/av8903802/z$md5:3b1b9e25b78da4ef87e9b548b88ee76arY   rZ   r
  rV  r?  r#  rQ  rR  rS  rq   rT  rU  rX  rW  rY  rP   r[  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)rY   rZ   r
  r#  rV  r?  rT  rR  rq   rQ  r  rU  rX  rW  rS  rY  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)rY   rZ   r
  r#  rV  r?  rR  rq   rQ  rX  rW  rS  rY  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)rY   r
  r#  rV  r?  rq   rR  rQ  rX  rU  rW  rT  rS  rY  Zextractor_argsZbilibiliprefer_multi_flvZ32r   ZBV1ms411Q7vw_p4_0flvgʡx@)rY   rZ   r
  rq   )r   rP   r[  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)rY   rZ   r
  r#  rV  r?  rq   rR  rQ  rU  rX  rW  rT  rS  rY  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)rY   r
  r#  rV  r?  rT  rR  rq   rQ  rU  rX  rW  rS  rY  r   ZBV1af4y1H7ga_400950101u\   【互动游戏】花了大半年时间做的自我介绍~请查收！！ - 听见猫猫叫~z$md5:db66ac7a2813a94b8291dbce990cc5b2g(\5'@rY   rZ   r
  r#  rV  r?  rT  rR  rq   rQ  rU  rX  rW  rS  rY  z301 redirect to bangumi linkz+https://www.bilibili.com/video/BV1TE411f7f1Z288525u@   李永乐老师 钱学森弹道和乘波体飞行器是什么？u   我和我的祖国Z4780u   幕后纪实Z28609r   u0   钱学森弹道和乘波体飞行器是什么？i   g@i|r]Z20191021)rY   r
  rZ   series	series_idseasonr&  season_numberepisode
episode_idepisode_numberrq   r#  rV  rS  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)rY   rZ   r
  rT  r?  rq   rV  rR  r#  rQ  rU  rX  rW  rS  r   rY  Zlistsubtitleszlogin required for subtitle)r   rP   r[  r   skipz,https://www.bilibili.com/video/BV1jL41167ZG/ZBV1jL41167ZGu`   一场大火引发的离奇死亡！古典推理经典短篇集《不可能犯罪诊断书》！)rY   r
  rZ   zsupporter-only videorP   r[  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   rP   only_matchingc                    s$   | }j||d\}}|js>|jS ||d< d|d}d|k}|rl|d }nЈjd|dd	d
}|st|ddkr  t|ddkrt	dddt|dt
hf}	|	s4t|ddkr,td|pd}
ttd|
pd dtd|
p
d }t	d| d  ddt	d|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|pd$}|d*|d+d,t||d$ d-fpd 7 }|d. t d d/|p4d$ }|rVt|d0|d$ d1fn|d1i }|rj|d}	t|d2dd3thfd4d5thfd6fd7d(d8fd9d	d:}t|d;d<d=thfdd>d5thfd?dd@thfdA|t|dBdCthfdDthfd>dEthfdFd	d: t|d dG |r.t|gnd |d|idHt|dI}|rjj|dft|ddJthf dKS |	t|	dLsfdMd(t|	dNfdOd(t hfD ]2}!tj||dPfdQd( qƈ"|	 tdRd( }|rt|tk r#dSstdT$dUdV |D }tdWd( |r%dX| dY n&tfdZd(pt&|d[d( d\gtd]rd^ fd_d`t'da db D t(|	dcdddedfS t(|	dcddde) * dgS d S )hNr<  r&   window\.__INITIAL_STATE__\s*=initial state	videoData	videoInfozwindow\.__playinfo__\s*=z	play infoFr	  )errortrueCodemilziThis video may be deleted or geo-restricted. You might want to try a VPN or a proxy server (with --proxy)Texpectedr   codeiS z
tips-toastr   z
belongs-tou   ，levelz This is a supporter-only video: z. zFailed to extract play infor   r
  z*https://api.bilibili.com/x/player/pagelist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02dr   partr   z%s_partZpagesr   )ru  ZupNameZupMidZvideoStatuslikeZsectionEpisodesc                    s   |d  kS )Nr   r.   r;   r  r.   r/   r?     r@   cover)rR  rQ  rW  rS  rf   )upDatanamer  r  stat)rT  .Ztag_nameZpic)rR  rQ  rW  rT  rS  descpubdate)Z	viewCount)r  viewr$  )r?  r#  rX  rU  z_p%d)rY   rY  r
  http_headers)ZrightsZis_stein_gaterq   )rq   __post_extractorrK   c                    s   | t  dkS )Nr1   r5   rv   )rG   r.   r/   r?     r@   Zaccept_qualityc                    s
    | S rt   r.   r;   has_qnr.   r/   r?     r@   )r   r   c                    s    |d  S r:   r.   r;   r  r.   r/   r?     r@   c                 S   s   |d S Nrr   r.   r;   r.   r.   r/   r?     r@   rc  rB   c                 s   s*   | ]"}| d  d| d dV  qdS )ry    (r_   )Nru   )r6   fr.   r.   r/   rn     s    z+BiliBiliIE._real_extract.<locals>.<genexpr>c                 S   s   | d S r  ru   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 )Nr2   rc  r   )int_configuration_argr;   r,   r.   r/   r?     r@   c                 S   s   | d S r:   r.   rv   r.   r.   r/   r?     r@   )r   )r   rr   Zmulti_videoc              
      sr   g | ]j\}}d   d| d d |dd  dig|dkrRnd|dkrf nddqS )rY   r<   r
  r  r_   r   N)rY   r
  r  rG   r   r  )r+   rE  extract_comments)r6   r   fragment)r   r   rG   rF  r-   r   r.   r/   r8     s   
 z,BiliBiliIE._real_extract.<locals>.<listcomp>r   rr   rx   rV   rW   )_typeentriesrq   )rG   rq   r  r   r  )+	_match_idr*  Z_download_webpage_handle_match_valid_urlrP   r+  _search_jsonr   raise_login_requiredr   rz   r   r   rE   r+   r   listr   r   r   _yes_playlistZplaylist_from_matchesrN  r   r   r   r"   r   playlist_resultrG  r  r   r  r|   rH   r  r   rD   maxr   r   r  rE  )r-   rP   r   webpageZurlhinitial_stateZis_festival
video_dataZplay_info_objrF   Ztoastmsgr
  Zpage_list_jsonZis_anthologyZpart_idZold_video_idZfestival_infoZis_interactiver   Zflv_formatsZdropped_fmtsr.   )r   r   rG   r  rF  r-   r   r/   _real_extractx  s2   

     
       

*
$











 



zBiliBiliIE._real_extractN)	rH  rI  rJ  
_VALID_URLr  r  float_TESTSr  r.   r.   r.   r/   rN  -  st   (			    JrN  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*gZd+d, Zd-S ).r,  z;https?://(?:www\.)?bilibili\.com/bangumi/play/ep(?P<id>\d+)z.https://www.bilibili.com/bangumi/play/ep21495/Z21495rO  u   悠久之翼Z774	   第二季Z1182r   u   forever／efr   u   12 forever／efgl)3@i(NZ20111104rP  rY   rZ   rg  rh  ri  r&  rj  rk  rl  rm  r
  rq   r#  rV  rS  rZ  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20201016r`  c                    s  |  | |  }| j| |d}d|kr4tdnd|krF| d ||d< | jd dd	 d
|d}|ddk}t|ddthfpi }| 	|}|s|sd|ksd|k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o8t
fddtt|dD d\}	}
|d} |dt|d d!thfd d"thfd#thfd$t|d%thfd&thfd'd(hfd)thfd*d( hd+ t|
t|	t|d,d-d.| j |d/|d0| |d|id1S )2Nr<  u$   您所在的地区无法观看本片zThis video is restrictedu-   正在观看预览，大会员免费看全片z&This video is for premium members onlyr&   z2https://api.bilibili.com/pgc/player/web/v2/playurlzExtracting episodeZ4048)r   ep_idr;  r|  i]r'  r  u   成为大会员抢先看u   开通大会员观看z,https://api.bilibili.com/pgc/view/web/seasonzGet episode detailsr  c                 3   s,   | ]$\}}t |d  kr||fV  qdS )rY   N)r   r+   )r6   r   ep)rl  r.   r/   rn   n  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_titleNru   )r6   r   e)r&  r.   r/   rn   t  s   )Zseasons.)NNr   )rY   rG   rg  Zseries_titlerh  Zsquare_cover)rg  rh  rS  
long_titler
  c                    s   | p S rt   r.   rv   )rm  r.   r/   r?     r@   z1BiliBiliBangumiIE._real_extract.<locals>.<lambda>Zpub_timec                 S   s   | ot ddd| dS )Nr
  r  r   rA   	from_dictr   r=   r.   r.   r/   r?     r@   )rk  rm  r#  r
  rx   rV   rW   r   r   )rl  ri  r&  rj  rq   r   r  r  )r  r*  _download_webpager	   r  r   r+   r   rz   r   r@  r   r`   r   r"   r   r   rE  r  )r-   rP   r   r  rF   Zpremium_onlyrG   Zbangumi_infoepisode_inforj  r  r   r.   )rl  rm  r&  r/   r  T  s    


  

    




zBiliBiliBangumiIE._real_extractNrH  rI  rJ  r  r  r  r.   r.   r.   r/   r,    sv   =r,  c                   @   sh   e Zd ZdZdddddddd	d
ddddddddddd
ddddddddddigdgZd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rY   r
  r?  r   rP   r[  playlist_mincountz.https://www.bilibili.com/bangumi/media/md1565/Z1565u   攻壳机动队 S.A.C. 2nd GIGz$md5:46cac00bafd645b97f4d6df616fc576dr   r[  Z68540rO  u   攻壳机动队Z1077r  r   u   再启动 REEMBODYr   u   1 再启动 REEMBODYgSח@iTZ20150227rP  r  rP   r[  r^  r_  c                 C   sf   |  |}| ||}| d|d|}|d d }| j| |||ft|ddthfdthfdfS )Nrr  r  Z	mediaInfor&  r
  evaluater
  r?  )r  r  r  r  r0  r   r`   )r-   rP   Zmedia_idr  r  r-  r.   r.   r/   r    s$    
   
 z$BiliBiliBangumiMediaIE._real_extractNr  r.   r.   r.   r/   r    sF   	%r  c                   @   sh   e Zd ZdZdddddddd	d
ddddddddddd
ddddddddddigdgZd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   r[  Z50188rO  Z1526ZTVr   ZWEIRDz1 WEIRDgs@i`PZ20120725rP  r  r  c                 C   s`   |  |}| ||}t| d|d|dddthfdthfdfdd	}| j| |||f|S )
Nz-<script[^>]+type="application/ld\+json"[^>]*>infoZitemListElement.r  r?  r  Frf   )r  r  r   r  r`   r  r0  )r-   rP   r-  r  rF  r.   r.   r/   r    s    
z%BiliBiliBangumiSeasonIE._real_extractNr  r.   r.   r.   r/   r    sF   	%r  c                   @   s   e Zd Zdd Zdd ZdS )BilibiliCheeseBaseIEc                    s4  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 )NrY   )r  r;   r  r.   r/   r?     r@   z7BilibiliCheeseBaseIE._extract_episode.<locals>.<lambda>Frf   r   r   Z	ep_statusr  z)This course episode is not yet available.Trz  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)rY   rl  rG   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   rq   r  r  Zrelease_dateplay)rk  r
  	alt_titlerq   rm  rS  r#  rX  Zup_infor  r  )rR  rQ  r  )r   r  r  )r   r   r  r   r  r   r   BilibiliCheeseIEie_keyIE_NAMEr`   r   r"   rE  r  )r-   r.  r  r  r   r   rF   r.   r  r/   _extract_episode  sZ     


  


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)rH  rI  rJ  r  r  r.   r.   r.   r/   r     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229832rO     1 - 课程先导片   视频课 · 3分41秒	   马督工	316568752   课程先导片r      e20230924rP  rY   rZ   r
  r  rR  rQ  rk  rl  rm  rq   r#  rV  rS  rX  rZ  c                 C   s   |  |}| | d||S )Nr  )r  r  r  )r-   rP   r  r.   r.   r/   r  F  s    
zBilibiliCheeseIE._real_extractN)rH  rI  rJ  r  r  r  r  r.   r.   r.   r/   r  0  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  r[  r  rO  r  r  r  r  r  r   r  r  r  rP  r  Zplaylist_items1)rP   r[  r_  r   r   zpaid video in listrP   r[  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?   s  r@   z<BilibiliCheeseSeasonIE._get_cheese_entries.<locals>.<lambda>rY   )r   r  )r-   r.  r  r.   r.   r/   _get_cheese_entriesr  s    z*BilibiliCheeseSeasonIE._get_cheese_entriesc                 C   sD   |  |}| d|}| j| ||ft|dthfdthfdS )Nr&  r
  r   r  )r  r  r  r  r   r`   )r-   rP   r&  r.  r.   r.   r/   r  v  s    
 z$BilibiliCheeseSeasonIE._real_extractN)rH  rI  rJ  r  r  r  r  r  r.   r.   r.   r/   r  K  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 rt   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)rH  rI  rJ  r  r.   r.   r.   r/   r    s   r  c                   @   s<   e Zd ZdZdddidddddd	id
ddgZdd ZdS )BilibiliSpaceVideoIEzGhttps?://space\.bilibili\.com/(?P<id>\d+)(?P<video>/video)?/?(?:[?#]|$)z(https://space.bilibili.com/3985676/videorY   Z3985676   rp  r  z*https://space.bilibili.com/313580179/video	313580179\   c                    sf    dd\ }|s$d  fdd}dd }fdd	}|||\}}| S )
NrY   rk   ztA channel URL was given. Only the channel's videos will be downloaded. To download audios, add a "/audio" to the URLc              
      s  d t tdpddd| d ddd	d
	}z*jd | d|  did}W nH tk
r } z*t|jtr|jjdkrtddd W 5 d }~X Y nX |d }|dkrtdddn@|dkrֈj	sֈ
d n&|dkrtd| d|dpd |d S )Nr   )orderr   r  truewebr   r'   r   i )	keywordr  r  Zorder_avoidedplatformpnpstidZweb_locationz/https://api.bilibili.com/x/space/wbi/arc/searchzDownloading space page r&   r   i  zKRequest is blocked by server (412), please add cookies, wait and try later.Trz  r|  iozKRequest is blocked by server (401), please add cookies, wait and try later.iz9Request is rejected, you need to login to access playlistzRequest failed (z): r  zUnknown errorr   )r   r   r   r   r   
isinstancecauser   statusr0   r  r+   )page_idxr   responser  status_codeplaylist_idr-   rP   r.   r/   r    sH     
 
  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    s
    z8BilibiliSpaceVideoIE._real_extract.<locals>.get_metadatac                 3   s6   t | dpg D ]"} d|d  t|d V  qd S )N)r  vlistr  r   )r   r+  rN  r  r/  r,   r.   r/   r    s    z7BilibiliSpaceVideoIE._real_extract.<locals>.get_entries)r  grouprD   r  r  )r-   rP   Zis_video_urlr  r  r  r  r  r.   r  r/   r    s    
!z"BilibiliSpaceVideoIE._real_extractNr  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+)/audioz*https://space.bilibili.com/313580179/audiorY   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    s     z6BilibiliSpaceAudioIE._real_extract.<locals>.fetch_pagec                 S   s   | d | d dS )NZ	pageCountZpageSizer  r.   r  r.   r.   r/   r    s    z8BilibiliSpaceAudioIE._real_extract.<locals>.get_metadatac                 3   s4   |  dg D ]"} d|d  t|d V  qd S )Nr   !https://www.bilibili.com/audio/aurY   )r+   r+  BilibiliAudioIEr  r,   r.   r/   r    s    z7BilibiliSpaceAudioIE._real_extract.<locals>.get_entries)r  r  r  r-   rP   r  r  r  r  r  r.   r  r/   r    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   sD   t |t|ttttfd|thfD ]}| d| t|V  q$d S )N.r  )r   r$   r`   bytesrz   rC   r+  rN  )r-   r  Z	bvid_keys
ending_keyr   r.   r.   r/   _get_entries  s    (z$BilibiliSpaceListBaseIE._get_entriesc                 C   s(   | j d| |dd}| jd|dddS )Nzhttps://space.bilibili.com/Frv  u)   (?s)<title\b[^>]*>([^<]+)的个人空间-rR  )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  pop)r-   r  r  r  r  Z	page_list	__class__r.   r/   r    s    z)BilibiliSpaceListBaseIE._extract_playlist)r   )rH  rI  rJ  r  r  r  __classcell__r.   r.   r  r/   r    s   
r  c                
   @   s8   e Zd ZdZddddddeedd	d
dgZdd ZdS )BilibiliCollectionListIEzWhttps?://space\.bilibili\.com/(?P<mid>\d+)/channel/collectiondetail/?\?sid=(?P<sid>\d+)zEhttps://space.bilibili.com/2142762/channel/collectiondetail?sid=57445Z2142762_57445u7   【完结】《底特律 变人》全结局流程解说r   u   老戴在此Z2142762zThttps://archive.biliimg.com/bfs/archive/e0e543ae35ad3df863ea7dea526bc32e70f4c091.jpg)rY   r
  r?  rR  rQ  r#  rV  rS  r   r  c                    st    |dd\   d  fdd} fdd}fdd	}|||\}}j|f|S )
Nr  sidr<   c              	      s*   j dd|   | d dddd S )Nz>https://api.bilibili.com/x/polymer/space/seasons_archives_listr
  r   r'   )r  r&  page_numr  r  r   r  r  r  r   r-   r   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  rR  metar  r?  r  Zptimer  )r
  r?  rQ  r#  rS  )r  r  r  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r  r  r,   r.   r/   r  3  s    z;BilibiliCollectionListIE._real_extract.<locals>.get_entries)r  r  r  r  r  r.   r"  r/   r    s    z&BilibiliCollectionListIE._real_extractNrH  rI  rJ  r  r  r`   r  r  r.   r.   r.   r/   r    s   
r  c                   @   s:   e Zd ZdZddddddddeed		d
dgZdd ZdS )BilibiliSeriesListIEzUhttps?://space\.bilibili\.com/(?P<mid>\d+)/channel/seriesdetail/?\?\bsid=(?P<sid>\d+)zMhttps://space.bilibili.com/1958703906/channel/seriesdetail?sid=547718&ctype=0Z1958703906_547718   直播回放
   靡烟miya
1958703906=a20211127)	rY   r
  r?  rR  rQ  r#  rV  modified_timestampmodified_date  r  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|S )Nr  r   r<   z3https://api.bilibili.com/x/series/series?series_id=Frv  r   r%  r  r?  r  mtime)r
  r?  rQ  r#  r0  c              	      s*   j dd|   | d dddd S )Nz*https://api.bilibili.com/x/series/archivesr
  r   r'   )r  rh  r  r  r  r   r  r  r"  r.   r/   r  Y  s     z6BilibiliSeriesListIE._real_extract.<locals>.fetch_pagec                    s:   | d d }| d d }t || | dS )Nr  rX   r#  r$  )r  r  r  r  )r  r   playlist_metar-   r.   r/   r  _  s    
z8BilibiliSeriesListIE._real_extract.<locals>.get_metadatac                    s     | dS r&  r(  r  r,   r.   r/   r  i  s    z7BilibiliSeriesListIE._real_extract.<locals>.get_entries)	r  r  r   r   r`   r   r   r  r  r  r.   )r  r   r4  r-   r   r/   r  L  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)rY   r
  r?  rR  rQ  r#  rV  r0  r1  rS  rX  rW  r   r  z6https://www.bilibili.com/medialist/detail/ml1103407912TrP   rq  c                 C   s   |  |}| jd| d|dd}|d dkr:| jdd | | jd	| |d
dd}| j||f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|  ry  zAThis is a private favorites list. You need to log in as its ownerr  z8https://api.bilibili.com/x/v3/fav/resource/ids?media_id=zDownload favlist entriesr   r  r
  introupperr  r  r  r3  r  Zcnt_infor  Zthumb_up)	r
  r?  rR  rQ  r#  r0  rS  rX  rW  )
r  r   r  r  r  r   r`   r   r   r"   )r-   rP   ZfidZ	list_infor  r.   r.   r/   r    s4    

  



z%BilibiliFavoritesListIE._real_extractNr)  r.   r.   r.   r/   r5  p  s,   r5  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  rA  r]  )getattrr*   r+   r   r  r  r  )r-   rP   list_idZwatchlater_infor  r.   r.   r/   r    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_547718r+  r,  r-  r.  r/  )rY   r
  rR  rQ  r#  rV  r2  r  zShttps://www.bilibili.com/list/1958703906?sid=547718&oid=687146339&bvid=BV1DU4y1r7tzZBV1DU4y1r7tzrO  uB   【直播回放】8.20晚9:30 3d发布喵 2022年8月20日21点场Z20220820r   i
crP  g%s@zbilibili 687146339_part1ra  Z
noplaylistTrb  zbhttps://www.bilibili.com/medialist/play/1958703906?business=space_series&business_id=547718&desc=1rY   zredirect urlr  z*https://www.bilibili.com/list/ml1103407912Z3_1103407912r6  r7  r8  r9  r:  r;  )rY   r
  rR  rQ  r#  rV  rS  r   z4https://www.bilibili.com/medialist/play/ml1103407912z(https://www.bilibili.com/list/watchlaterzre:2_\d+rA  )rY   r
  rR  rQ  r   rp  z2https://www.bilibili.com/medialist/play/watchlaterrC  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 r3  r   
media_listZbv_id)r  )rH  r  rY   oidZhas_moreF)r  r  r   r  r   r+   )r-   r   rE  r!  r  r.   r.   r/   _extract_medialist  s      z%BilibiliPlaylistIE._extract_medialistc           
      C   s  |  |}tt|d}| ||s6| d| tS | ||}| d|d|}t|ddthfdkrt|ddthf}t|dd	t	hf}|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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d'd( hfd)thfd*f}	| j| ||f|	S )+N)r   r   r  rr  rs  rw  r|     rx  r  iprC  z4You need to login to access your watchlater playlistry  z:This is a private playlist. You need to login as its owneri+  zPlaylist is no longer availableTrz  zCould not access playlist: r   r   F)r  Zwith_currentr_  typerY   r  Z	sortFiledr  )rL  rG  r  Z
sort_fieldr  r<   rG  ZmediaListInfor
  r?  r  r  r  c                 S   s   | pd S rt   r.   rv   r.   r.   r/   r?   4  r@   z2BilibiliPlaylistIE._real_extract.<locals>.<lambda>r  )r
  rR  rQ  r#  rS  )r  r   r   r  r+  rN  r  r  r   r   r  r   r   r`   ra   r"   r  rJ  )
r-   rP   rE  r   r  r  Z
error_codeerror_messager   r  r.   r.   r/   r    sN    


 


z BilibiliPlaylistIE._real_extractN)
rH  rI  rJ  r  r  r  r`   r  rJ  r  r.   r.   r.   r/   rF    s    	 JrF  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)rP   r[  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 r3  )r   r'  r  z'Failed to retrieve video list for page z!https://www.bilibili.com/video/{}r   BiliBili)r   r   r  r   r+  rh   )r-   api_url	num_pagesr   r!  Zparsed_jsonZ
video_listrk   r.   r.   r/   _fetch_pageK  s        zBilibiliCategoryIE._fetch_pagec                 C   s   dddddddi}||kr8t d| d	t|  ||| krdt d
| dt||   || | }d| }| j|||ddd}t|dtd}t|dt|d }	}
|	d ks|
st dt	|	|
 }t
t| j||||
S )NZkichikur   rd   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  rO  r   )r   r  r  r  rX   z-Failed to calculate either page count or size)r   r  keysr   r   rz   r   r+   r  r  r   r}   r~   rU  )r-   categorysubcategoryr   Zrid_mapZ	rid_valuerS  Z	page_jsonr  r  rX   rT  r.   r.   r/   _entriesX  s@    
   zBilibiliCategoryIE._entriesc                 C   sF   t j|jddd \}}| d| }| | |||||S )Nr   r   r   : )r   r   urlparsepathsplitr  r\  )r-   rP   rZ  r[  r   r.   r.   r/   r  x  s     z BilibiliCategoryIE._real_extractN)
rH  rI  rJ  r  _MAX_RESULTSr  r  rU  r\  r  r.   r.   r.   r/   rN  ;  s     rN  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]  r[  ZBV1n44y1Q7scrO  um   “出道一年，我怎么还在等你单推的女人睡觉后开播啊？”【一分钟了解靡烟miya】icZ20221201z$md5:43343c0973defff527b5a4b403b4abf9r,  gDl^@r-  rP  zbilibili 988222410_part1re  )rP   r^  r[  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/typerQ  r   r   r  rk   )
rP  r  r  contextrq   Ztids_2Z__refresh__Zsearch_typeZtidsZ	highlightr  r   r'  ZarcurlrR  r   )
r*   r+   Z_set_cookieuuidZuuid4r  r  r   r+  r`   )r-   r   r!  Zvideosrk   r.   r.   r/   _search_results  s6     z BiliBiliSearchIE._search_resultsN)
rH  rI  rJ  ZIE_DESCra  Z_SEARCH_KEYr  r  r  re  r.   r.   r.   r/   rb    s8   rb  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/rX  r   r  )r-   r_  r   r   r.   r.   r/   	_call_api  s     zBilibiliAudioBaseIE._call_api)N)rH  rI  rJ  rg  r.   r.   r.   r/   rf    s   rf  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/au1003142Z fec4987014ec94ef9e666d4d158ad03bZ1003142Zm4au   【tsukimi】YELLOW / 神山羊Ztsukimiu   YELLOW的mp3版！   originrZ   Zlrczre:^https?://.+\.jpgiE]Z20190803u   tsukimi-つきみぐー)rY   rZ   r
  artistrU  r?  rq   r   rS  r#  rV  rR  rX  )rP   r   r[  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 )NrP   Zcdnsr   rX   rT   )rP   r^   r\   r  r&   z	song/infor
  	statisticlyricri  r   commentr>  rq   r  Zpasstimer  r  )rY   r
  rG   rj  rU  r?  rq   r   rS  r#  rR  rX  )r  rg  r   r+   r  r   )r-   rP   Zau_idZ	play_datarG   Za_formatsongr
  rk  r   rl  r.   r.   r/   r    sF    

 
 zBilibiliAudioIE._real_extractN)rH  rI  rJ  r  r  _TESTr  r.   r.   r.   r/   r    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/am10624Z10624u)   每日新曲推荐（每日11:00更新）u,   每天11:00更新，为你推送最新音乐r  r   )rP   r[  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   rY   r  z	menu/infor
  Zalbumr>  )	r  rg  r   r+   r{   r+  r  r  r  )
r-   rP   Zam_idZsongsr  rn  r   Z
album_dataZalbum_titler/  r.   r.   r/   r    s>    
  
 

   z"BilibiliAudioAlbumIE._real_extractNrH  rI  rJ  r  ro  r  r.   r.   r.   r/   rp    s   
rp  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+  rN  r  )r-   rP   r   r.   r.   r/   r  4  s    

 zBiliBiliPlayerIE._real_extractNrr  r.   r.   r.   r/   rs  -  s
   rs  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| f||}|dr|d dkr8|   n|d dkrN|   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  errnote Unable to download JSON metadatar]   said: r	  r   )	r   _API_URLr+   r  Zraise_geo_restrictedr`   r  r   r  )r-   ZendpointargskwargsrC  errmsgr.   r.   r/   rg  @  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   )r6   r   r   r.   r.   r/   rn   S  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?   V  r@   z)BiliIntlBaseIE.json2srt.<locals>.<lambda>)r   r   r   )r-   rC  r.   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 ]}||k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)r  s_localerl  r   )r	  r   ru  r   )r   Zvideo_subtitle.)Nassr  rP   Zlang_keyenr  r   rC  zDownloading subtitleslangz for %sr  r  zUnable to download subtitles)r	  r   ru  r  r  zUnexpected subtitle extension)rg  r   rC   r   rz   r"   addr   r+   r  r{   r   r   r   r  )r-   r  r   Zsub_jsonr   Zfetched_urlssubrP   Zsub_extZsub_langZsub_datar.   r.   r/   r  X  sX       	


  
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  )r  r  r   )r   ru  r   playurlrk   Zvideo_resourceZstream_inforP   rO  Z
desc_wordsrb   rc   rU   rT   rS   rX   )	rP   rZ   ry   rb   rc   Zvbrr[   r\   r^   Zaudio_resource)rP   rZ   Zabrr[   r\   r^   )rg  r   r+   r{   )	r-   r  r   Z
video_jsonrG   ZvidZ	video_resr  Zaudr.   r.   r/   _get_formats  sR       



	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 numberdefault)r
  r?  rS  r#  rm  )r+   r    r   r  )r-   r  r.   r.   r/   _parse_video_metadata  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 installTrz  zEhttps://passport.bilibili.tv/x/intl/passport-login/web/key?lang=en-USzDownloading login keyzUnable to download login key)r   ru  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   ru  r|  r  zUnable to log in: rw  )r   ZRSAr   r   Z	importKeyZ
PKCS1_v1_5newZencryptr   r#   base64	b64encodedecoder+   r  )r-   r  r  Zkey_dataZ
public_keyZpassword_hashZ
login_postr.   r.   r/   _perform_login  s:        	

 zBiliIntlBaseIE._perform_login)rH  rI  rJ  rx  Z_NETRC_MACHINEr  rg  r   r  r  r  r  r.   r.   r.   r/   rt  ;  s   )(
rt  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341736rO  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)
rY   rZ   r
  rS  rm  rV  rk  r#  r?  r  rZ  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=
#@)
rY   rZ   r
  rS  rm  r?  rk  rV  r#  r  z0https://www.bilibili.tv/en/play/1005144/10131790Z10131790z$E140 - Two Heartbeats: Kabuto's Trap   )rY   rZ   r
  rS  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     @)rY   rZ   r#  rV  rm  r
  r?  rS  rk  rU  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)rY   rZ   r?  r#  rV  r
  rU  rS  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)	rY   rZ   r
  r?  r#  rS  rk  rm  rV  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 stater  Z__initialStateF)r	  Ztraverse)ZOgvVideoZepDetail)ZUgcVideort  )Zugcarchiver  $/web/v2/ogv/play/episodes?season_id=&platform=websections.r(  c                    s   t |d  kS )Nrl  )r`   r;   r  r.   r/   r?   u  r@   z4BiliIntlIE._extract_video_metadata.<locals>.<lambda>)r  rg   zbstar-meta__titlezog:titlezbstar-meta__desczog:descriptionr  )r!   r+   r  r  Z_search_nuxt_datar   rz   rg  r   r  r   Z_html_search_metaZ_search_json_ld)	r-   rP   r   r&  Zsmuggled_datar  Zinitial_datar  Zseason_jsonr.   r  r/   _extract_video_metadatad  sT    
       
  
 
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   )r  r  r  r@  r  r   r  .r  r  r  r  facer  r  rW  r  
ctime_text)r   r!  author_thumbnailr"  rY   rW  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    s4     


  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   )r  r  r  rI  rL  Z	sort_typer  r  r  r  r  r  r  rW  r  )r  rL  )r   r!  r  r"  rY   rW  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    s6     



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  Frv  rn  )rn  Zopening_start_timerV   )rn  Zopening_end_timer  r  )rn  Zending_start_time)rn  Zending_end_timer  rY   r}  )rG   r   r  r  r  )r  r  rg  r+   r   r   r  r  rE  r  r  )r-   rP   r&  r  r   r   r  Zintro_ending_jsonr.   r.   r/   r    s>    
 
 
zBiliIntlIE._real_extract)N)r   N)rH  rI  rJ  r  r  r  staticmethodr  r  r  r  r  r.   r.   r.   r/   r    s   !   
r  c                	   @   sz   e Zd ZdZdZddddddd	d
gdedddidddddddd	g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 lifeZComedyZRomancer  )rY   r
  r?  
categoriesrS  rX  r\  T)rP   r  r[  r   z(https://www.bilibili.tv/en/media/1048837Z1048837u   SPY×FAMILYr  Z	AdventureActionz.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  )	rg  r   rz   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  rS  rX  )	r  rg  r+   r  r\  r   r   r"   r   )r-   rP   rh  Zseries_infor.   r.   r/   r  		  s$    

     zBiliIntlSeriesIE._real_extractN)	rH  rI  rJ  r  r  r  r  r\  r  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/196Z33989u   周六杂谈回，其他时候随机游戏。 | 
录播：@下播型泛式录播组。 | 
直播通知群（全员禁言）：666906670，902092584，59971⑧481 （功能一样，别多加）rd  u-   太空狼人杀联动，不被爆杀就算赢zYhttps://i0.hdslb.com/bfs/live/new_room_cover/e607bc1529057ef4b332e1026e62cf46984c314d.jpgiQ@eb)rY   r?  rZ   r
  rS  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_   ry   Zhigh_resu   高清Zultra_high_resu   超清Zblue_rayu   蓝光sourceu   原画Z4KrL   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/rX  r|  r   r  rv  r   )r   r+   r   )r-   r_  room_idr   Z
api_resultr.   r.   r/   rg  5	  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hostrO   extraZformat_nameZ
codec_name)rP   rZ   r\   r2   )r+   _quality_FORMATS)r-   r   r7   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_inforY   Zlive_statusr   zStreamer is not liveTrz  z'xlive/web-room/v2/index/getRoomPlayInfoz0,1z0,20r  )r  r   r  rh   maskZ
no_playurlr  rs   )Zplayurl_infor  stream.rh   .r
  r?  Z
user_coverZ	live_timer&   )rY   r
  r?  rS  r#  rG   Zis_liver  )r  rg  r+   r   r  r   r|   r  )r-   rP   r  Z	room_datarG   r   Zstream_datar7   r.   r.   r/   r  H	  s:    


 zBiliLiveIE._real_extractN)rH  rI  rJ  r  r  r  r  r   r  r  rg  r  r  r.   r.   r.   r/   r  	  s<   
r  )Kr  r}   r   r  rC  r  rK  r   urllib.parser   rd  commonr   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$   r%   rN  r,  r  r  r  r  r  r  r  r	  r  r  r*  r5  r@  rF  rN  rb  rf  r  rp  rs  rt  r  r  r  r.   r.   r.   r/   <module>   sb   |! ~   j 7407I!262 D8	F'   7