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:ce18c2a2d2193f0df2917d270f2e5923gP�—n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65880958iªê¶XZ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|ƒ x¾t|d  ƒD ]®\}}|d! t|d" ƒd#œg}x4|jd$g ƒD ]$}|j|d%|k�rdEndFd(œƒ �qìW x$|D ]}|jd)i ƒjd|iƒ �qW | j|ƒ |
jd*||f t|jd+ƒd,ƒ|d-œƒ �q¾W 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	ƒ}|r´x|D ]}	||	d
< qŽW | 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	@'