3
b`@                 @   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1074402flvu   【金坷垃】金泡沫z$md5:ce18c2a2d2193f0df2917d270f2e5923gPnAs@iSSZ20140420z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   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   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-   IC:\Users\Broad\Desktop\All-Down\binaries\youtube_dl\extractor\bilibili.py_report_errors   s
    zBiliBiliIE._report_errorc          	   C   s  t |i \}}tj| j|}|jdp.|jd}|jd}| j||}d|kr| jd|dd dp~t| jdd	d
g|dd d }nxd|kr| jd||t	j
|d| f  d|d}|j| j  | jd|td|i|d}	d|	kr| j|	 |	d d }d|i}|j| j  g }
dD}x\t|ddD ]J\}}d| j||f }tj|| j jdj }| jd||f |d||t|kd}|sq(d |kr|t|k rq(| j| xt|d  D ]\}}|d! t|d" d#g}x4|jd$g D ]$}|j|d%|krdEndFd( qW x$|D ]}|jd)i jd|i qW | j| |
jd*||f t|jd+d,|d- qW P q(W | jdG|d0d0d1}| jd2|}t | jd3|d4d dp| jd5|d6d d}| jd7d8g|}|||||t|jd9d,d:d;}tj!d<|}|r|j|jd=|jdd> |jd?s@| jd@|d?d d|d?< x|
D ]}|j| qFW t|
dkrp|
d S x*t|
D ]\}}dA||d f |d< qzW dB||||
dCS d S )HNr   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_source
episode_id)dataheadersr,   r4   qn=80&quality=80&type=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)noter7   fataldurlr   size)r   filesize
backup_urlzhd.mp4r      )r   
preferencehttp_headersz	%s_part%slengthi  )r   r   formats,<h1[^>]+title=(["'])(?P<title>(?:(?!).)+) (?s)<h1[^>]*>(?P<title>.+?)</h1>r   )groupr   z<time[^>]+datetime="([^"]+)"zupload time
uploadDater   zog:imagethumbnailUrlZ
timelength)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%dmulti_video)_typer   r   r   entries)r8   r9   )rF   rG   )"r   rematch
_VALID_URLrH   _download_webpage_search_regexr   	to_screenr   urljoinupdategeo_verification_headers_download_jsonr   r/   	enumerate_APP_KEYhashlibr   _BILIBILI_KEYencode	hexdigestlenr	   getappend
setdefault_sort_formatsr
   _html_search_regex_html_search_metar   search)r+   r   smuggled_datamobjvideo_idr0   webpager1   r7   jsrP   Z
RENDITIONSnum	renditionpayloadsign
video_infoidxr=   rE   r@   a_formatr   r   r   r   infoZuploader_mobjentryr-   r-   r.   _real_extract{   s    








 
zBiliBiliIE._real_extractN)	__name__
__module____qualname__rU   _TESTSr^   r`   r/   ry   r-   r-   r-   r.   r      sd   


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:6a9622b911565794c11f25f81d6a97d2)r   r   r      )r   r    playlist_countZ 91da8621454dd58316851c27c68b0c13Z40062r"   u/  故事发生在日本的江户时代。风是一个小酒馆的打工女。一日，酒馆里来了一群恶霸，虽然他们的举动令风十分不满，但是毕竟风只是一届女流，无法对他们采取什么行动，只能在心里嘟哝。这时，酒家里又进来了个“不良份子...i%PTZ20141028u%   疾风怒涛 Tempestuous Temperamentsr   )r   r   r   r   r   r   episodeepisode_number)r   r    playlist_items1)r   r    r&   r%   c                s   t j|rdS tt| j|S )NF)r   suitablesuperr~   )clsr   )	__class__r-   r.   r   +  s    zBiliBiliBangumiIE.suitablec             C   s`   | j |}| jd| |tdd }dd |d D }t|dd d	}| j|||jd
|jdS )Nz3http://bangumi.bilibili.com/jsonp/seasoninfo/%s.ver)transform_sourcer,   c          
   S   sN   g | ]F}d t |d dditj t|jddd|jdt|jdd	qS )
url_transparentZwebplay_urlr3   r   Zupdate_time )	delimiterZindex_titleindex)rO   r   ie_keyr   r   r   )r   r   r   r   rd   r	   ).0r   r-   r-   r.   
<listcomp>7  s   z3BiliBiliBangumiIE._real_extract.<locals>.<listcomp>episodesc             S   s
   | j dS )Nr   )rd   )rx   r-   r-   r.   <lambda>@  s    z1BiliBiliBangumiIE._real_extract.<locals>.<lambda>)keyZbangumi_titleZevaluate)	_match_idr\   r   sortedplaylist_resultrd   )r+   r   Z
bangumi_idZseason_inforP   r-   r-   r.   ry   /  s    
zBiliBiliBangumiIE._real_extract)rz   r{   r|   rU   r*   IE_DESCr}   classmethodr   ry   __classcell__r-   r-   )r   r.   r~     s0   r~   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   )r\   )r+   pathr   r   r-   r-   r.   	_call_apiH  s
    zBilibiliAudioBaseIE._call_api)N)rz   r{   r|   r   r-   r-   r-   r.   r   G  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1003142m4au   【tsukimi】YELLOW / 神山羊Ztsukimiu   YELLOW的mp3版！   originr   lrczre:^https?://.+\.jpgiE]Z20190803u   tsukimi-つきみぐー)r   r   r   artistcomment_countr   r   	subtitlesr   r   r   r   
view_count)r   r   r    c       
      C   s   | j |}| jd|}|d d t|jddg}| jd|}|d }|jdpTi }d }|jd	}	|	rvd
d|	igi}||||jdt|jd|jdt|jd||jdt|jd|jdt|jddS )Nr   cdnsr   r>   )r   r?   z	song/infor   	statisticlyricr   rM   commentintror   coverZpasstimeunameZplay)r   r   rE   r   r   r   r   r   r   r   r   r   )r   r   r	   rd   )
r+   r   Zau_idZ	play_datarE   songr   r   r   r   r-   r-   r.   ry   j  s0    


zBilibiliAudioIE._real_extractN)rz   r{   r|   rU   int_TESTry   r-   r-   r-   r.   r   P  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   r      )r   r    r   c       
      C   s   | j |}| jd||dddd }g }x<|D ]4}t|jd}|sFq.|j| jd| tj | q.W |r| jd|pxi }|jd	}|rx|D ]}	||	d
< qW | j||||jdS | j||S )Nzsong/of-menur   d   )r   Zpnpsr6   r   z!https://www.bilibili.com/audio/auz	menu/infor   albumr   )	r   r   r   rd   re   
url_resultr   r   r   )
r+   r   Zam_idZsongsrP   r   r   Z
album_dataalbum_titlerx   r-   r-   r.   ry     s(    



z"BilibiliAudioAlbumIE._real_extractN)rz   r{   r|   rU   r   ry   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=1T)r   r!   c             C   s"   | j |}| jd| tj |dS )Nz"http://www.bilibili.tv/video/av%s/)ierm   )r   r   r   r   )r+   r   rm   r-   r-   r.   ry     s    
zBiliBiliPlayerIE._real_extractN)rz   r{   r|   rU   r   ry   r-   r-   r-   r.   r     s   r   )
__future__r   r_   rS   commonr   compatr   r   utilsr   r	   r
   r   r   r   r   r   r   r   r   r~   r   r   r   r   r-   r-   r-   r.   <module>   s   0 kC	@'