U
    $Pf@                     @   s   d dl mZ d dlZd dlZddlmZ ddlmZ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 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ZdS )    )unicode_literalsN   )InfoExtractor   )compat_parse_qscompat_urlparse)
ExtractorErrorint_or_nonefloat_or_noneparse_iso8601smuggle_urlstr_or_nonestrip_jsonpunified_timestampunsmuggle_urlurlencode_postdatac                   @   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id)d*ddd"d#d$d%d&d'd(did)gd+d,ddgZd-Zd.Zd/d0 Zd1d2 Zd3S )4
BiliBiliIEa  (?x)
                    https?://
                        (?:(?:www|bangumi)\.)?
                        bilibili\.(?:tv|com)/
                        (?:
                            (?:
                                video/[aA][vV]|
                                anime/(?P<anime_id>\d+)/play\#
                            )(?P<id_bv>\d+)|
                            video/[bB][vV](?P<id>[^/?#&]+)
                        )
                    z'http://www.bilibili.tv/video/av1074402/Z 5f7d29e1a2872f3df0cf76b1f87d3788Z1074402Zflvu   【金坷垃】金泡沫z$md5:ce18c2a2d2193f0df2917d270f2e5923gPnAs@iSSZ20140420re:^https?://.+\.jpgu	   菊子桑Z156160)
idexttitledescriptionduration	timestampupload_date	thumbnailuploaderuploader_idurlmd5	info_dictz1http://bangumi.bilibili.com/anime/1869/play#40062Tr   Zonly_matchingz2http://bangumi.bilibili.com/anime/5802/play#100643Z 3f721ad1e75030cc06faf73587cfec57Z100643mp4zCHAOS;CHILDu  如果你是神明，并且能够让妄想成为现实。那你会进行怎么样的妄想？是淫靡的世界？独裁社会？毁灭性的制裁？还是……2015年，涩谷。从6年前发生的大灾害“涩谷地震”之后复兴了的这个街区里新设立的私立高中...)r   r   r   r   zGeo-restricted to China)r   r    r!   skipz(http://www.bilibili.com/video/av8903802/Z8903802u(   阿滴英文｜英文歌分享#6 "Closeru   滴妹今天唱Closer給你聽! 有史以来，被推最多次也是最久的歌曲，其实歌词跟我原本想像差蛮多的，不过还是好听！ 微博@阿滴英文r   r   r   Z8903802_part1z$md5:3b1b9e25b78da4ef87e9b548b88ee76au   阿滴英文Z65880958iXZ20170301)r   r   r   r   r   r   r   r   Zskip_download)r!   paramsZ8903802_part2)r   r!   playlistz+https://www.bilibili.com/video/BV1JE411F741ZiVGUTjsxvpLeuDCfZ aHRmhWMLkdeMuILqORnYZocwMBpMEOdtc                 C   sT   d|kr$t d| j|d f ddn,d|krHt d| j|d f ddnt dd S )Nmessagez%s said: %sT)expectedcodez%s returns error %dz Can't extract Bangumi episode ID)r   IE_NAME)selfresult r.   A/tmp/pip-unpacked-wheel-7zdooeg3/youtube_dl/extractor/bilibili.py_report_errors   s
    zBiliBiliIE._report_errorc              
   C   s  t |i \}}t| j|}|dp.|d}|d}| ||}d|kr| jd|dd dp~t| dd	d
g|dd d }nxd|kr| d||t	
|d| f  d|d}||   | jd|td|i|d}	d|	kr| |	 |	d d }d|d}||   g }
d}t|ddD ]B\}}d| j||f }t|| j d }| jd||f |d||t|kd}|sq&d |kr|t|k rq&| | t|d  D ]\}}|d! t|d" d#g}|d$g D ]$}||d%|krd&nd'd( q|D ]}|d)i d*|i q| | |
d+||f t|d,d-|d. q qlq&| jd/|d0d0d1}| d2|}t | jd3|d4d dp| jd5|d6d d}| d7d8g|}|||||t|d9d-d:d;}t!d<|}|r||d=" |dd> |d?s8| jd@|d?d d|d?< |
D ]}|| q<t|
dkrd|
d S t|
D ]\}}dA||d f |d< qldB||||
dCS d S )DNr   Zid_bvanime_idzanime/z\bcid(?:["\']:|=)(\d+)cid)defaultz!EmbedPlayer\([^)]+,\s*"([^"]+)"\)z%EmbedPlayer\([^)]+,\s*\\"([^"]+)\\"\)z><iframe[^>]+src="https://secure\.bilibili\.com/secure,([^"]+)"zplayer parametersr   no_bangumi_tipzUDownloading episode %s. To download all videos in anime %s, re-run youtube-dl with %sz//bangumi.bilibili.com/anime/%sz0application/x-www-form-urlencoded; charset=UTF-8)zContent-TypeRefererz.http://bangumi.bilibili.com/web_api/get_sourceZ
episode_id)dataheadersr-   zapplication/json)Acceptr5   )zqn=80&quality=80&type=zquality=2&type=mp4r   )startzappkey=%s&cid=%s&otype=json&%szutf-8z3http://interface.bilibili.com/v2/playurl?%s&sign=%szDownloading video info page)Znoter7   fataldurlr   sizer   filesize
backup_urlzhd.mp4)r   Z
preferenceZhttp_headersr5   z	%s_part%slengthi  )r   r   formats)z,<h1[^>]+title=(["'])(?P<title>(?:(?!).)+)z (?s)<h1[^>]*>(?P<title>.+?)</h1>r   )groupr   z<time[^>]+datetime="([^"]+)"zupload timeZ
uploadDater   zog:imageZthumbnailUrlZ
timelength)Zscale)r   r   r   r   r   r   zQ<a[^>]+href="(?:https?:)?//space\.bilibili\.com/(?P<id>\d+)"[^>]*>(?P<name>[^<]+)name)r   r   r   authorz	%s_part%dZmulti_video)_typer   r   r   entries)#r   rematch
_VALID_URLrD   Z_download_webpageZ_search_regexr   Z	to_screenr   urljoinupdateZgeo_verification_headers_download_jsonr   r0   	enumerate_APP_KEYhashlibr    _BILIBILI_KEYencode	hexdigestlenr	   getappend
setdefaultZ_sort_formatsr
   Z_html_search_regexZ_html_search_metar   searchstrip)r,   r   Zsmuggled_dataZmobjvideo_idr1   Zwebpager2   r7   ZjsrH   Z
RENDITIONSnumZ	renditionpayloadsignZ
video_infoidxr;   rC   r?   Za_formatr   r   r   r   infoZuploader_mobjentryr.   r.   r/   _real_extract{   s   
   	   


  



 



      	   
zBiliBiliIE._real_extractN)	__name__
__module____qualname__rK   _TESTSrP   rR   r0   rb   r.   r.   r.   r/   r      s     'Hr   c                       s|   e Zd Zd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gddidgZe fddZdd Z	  Z
S )BiliBiliBangumiIEz1https?://bangumi\.bilibili\.com/anime/(?P<id>\d+)zbangumi.bilibili.comu   BiliBili番剧z&http://bangumi.bilibili.com/anime/1869Z1869u   混沌武士z$md5:6a9622b911565794c11f25f81d6a97d2r%      r   r!   Zplaylist_countZ 91da8621454dd58316851c27c68b0c13Z40062r#   u/  故事发生在日本的江户时代。风是一个小酒馆的打工女。一日，酒馆里来了一群恶霸，虽然他们的举动令风十分不满，但是毕竟风只是一届女流，无法对他们采取什么行动，只能在心里嘟哝。这时，酒家里又进来了个“不良份子...i%PTZ20141028u%   疾风怒涛 Tempestuous Temperamentsr   )r   r   r   r   r   r   episodeepisode_number)r    r!   Zplaylist_items1)r   r!   r'   r&   c                    s   t |rdS tt| |S )NF)r   suitablesuperrg   )clsr   	__class__r.   r/   rm   ,  s    zBiliBiliBangumiIE.suitablec                 C   s`   |  |}| jd| |tdd }dd |d D }t|dd d	}| |||d
|dS )Nz3http://bangumi.bilibili.com/jsonp/seasoninfo/%s.ver)Ztransform_sourcer-   c                 S   sN   g | ]F}d t |d ddit t|ddd|dt|dd	qS )
Zurl_transparentZwebplay_urlr4   r   Zupdate_time )	delimiterZindex_titleindex)rG   r   ie_keyr   rj   rk   )r   r   ru   r   rV   r	   ).0rj   r.   r.   r/   
<listcomp>8  s   z3BiliBiliBangumiIE._real_extract.<locals>.<listcomp>Zepisodesc                 S   s
   |  dS )Nrk   )rV   )ra   r.   r.   r/   <lambda>A      z1BiliBiliBangumiIE._real_extract.<locals>.<lambda>)keyZbangumi_titleevaluate)	_match_idrN   r   sortedplaylist_resultrV   )r,   r   Z
bangumi_idZseason_inforH   r.   r.   r/   rb   0  s$    
 	  zBiliBiliBangumiIE._real_extract)rc   rd   re   rK   r+   ZIE_DESCrf   classmethodrm   rb   __classcell__r.   r.   rp   r/   rg     sD   	 !rg   c                   @   s   e Zd ZdddZdS )BilibiliAudioBaseIENc                 C   s$   |sd|i}| j d| ||dd S )Nsidz3https://www.bilibili.com/audio/music-service-c/web/)queryr6   )rN   )r,   pathr   r   r.   r.   r/   	_call_apiI  s     zBilibiliAudioBaseIE._call_api)N)rc   rd   re   r   r.   r.   r.   r/   r   H  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 )BilibiliAudioIEz4https?://(?:www\.)?bilibili\.com/audio/au(?P<id>\d+)z(https://www.bilibili.com/audio/au1003142Z fec4987014ec94ef9e666d4d158ad03bZ1003142Zm4au   【tsukimi】YELLOW / 神山羊Ztsukimiu   YELLOW的mp3版！   originr   Zlrcr   iE]Z20190803u   tsukimi-つきみぐー)r   r   r   artistcomment_countr   r   	subtitlesr   r   r   r   
view_countr   c           
      C   s   |  |}| d|}|d d t|ddg}| d|}|d }|dpTi }d }|d	}	|	rvd
d|	igi}||||dt|d|dt|d||dt|d|dt|ddS )Nr   Zcdnsr   r<   r=   z	song/infor   	statisticlyricr   rF   commentintror   ZcoverZpasstimeunameZplay)r   r   rC   r   r   r   r   r   r   r   r   r   )r|   r   r	   rV   )
r,   r   Zau_idZ	play_datarC   songr   r   r   r   r.   r.   r/   rb   k  s:    


 zBilibiliAudioIE._real_extractN)rc   rd   re   rK   int_TESTrb   r.   r.   r.   r/   r   Q  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%      ri   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   ZpnZpsr6   r   z!https://www.bilibili.com/audio/auz	menu/infor   Zalbumr   )	r|   r   r   rV   rW   
url_resultr   ru   r~   )
r,   r   Zam_idZsongsrH   r   r   Z
album_dataZalbum_titlera   r.   r.   r/   rb     s>    
  
 

   z"BilibiliAudioAlbumIE._real_extractNrc   rd   re   rK   r   rb   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| t |dS )Nz"http://www.bilibili.tv/video/av%s/)Zier[   )r|   r   r   ru   )r,   r   r[   r.   r.   r/   rb     s    
 zBiliBiliPlayerIE._real_extractNr   r.   r.   r.   r/   r     s
   r   )
__future__r   rQ   rI   commonr   compatr   r   utilsr   r	   r
   r   r   r   r   r   r   r   r   rg   r   r   r   r   r.   r.   r.   r/   <module>   s   0 lC	@'