U
    y^@                     @   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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    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 r1   PC:\Users\TaGoRe\Desktop\beinconnect-dl\binaries\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|i}||   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 qjq$| jd-|d.d.d/}| d0|}t | jd1|d2d dp| jd3|d4d d}| d5d6g|}|||||t|d7d+d8d9}t!d:|}|r||d;|dd< |d=s2| jd>|d=d d|d=< |
D ]}|| q6t|
dkr^|
d S t|
D ]\}}d?||d f |d< qfd@||||
dAS d S )BNr   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headersr0   r8   )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)noter;   fataldurlr    sizer    filesize
backup_urlzhd.mp4)r    
preferencehttp_headersz	%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 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)"r   rematch
_VALID_URLrJ   _download_webpage_search_regexr   	to_screenr   urljoinupdategeo_verification_headers_download_jsonr   r3   	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_idr4   webpager5   r;   jsrR   Z
RENDITIONSnum	renditionpayloadsign
video_infoidxr?   rI   rC   a_formatr   r   r   r   infoZuploader_mobjentryr1   r1   r2   _real_extract{   s   
   	   

 
  



 



      	   
zBiliBiliIE._real_extractN)	__name__
__module____qualname__rU   _TESTSr^   r`   r3   ry   r1   r1   r1   r2   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"   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 |rdS tt| |S )NF)r   suitablesuperr~   )clsr    	__class__r1   r2   r   +  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)transform_sourcer0   c                 S   sN   g | ]F}d t |d ddit t|ddd|dt|dd	qS )
url_transparentZwebplay_urlr7   r   Zupdate_time )	delimiterZindex_titleindex)rQ   r    ie_keyr   r   r   )r   r   r   r   rd   r	   ).0r   r1   r1   r2   
<listcomp>7  s   z3BiliBiliBangumiIE._real_extract.<locals>.<listcomp>episodesc                 S   s
   |  dS )Nr   )rd   )rx   r1   r1   r2   <lambda>@      z1BiliBiliBangumiIE._real_extract.<locals>.<lambda>)keyZbangumi_titleZevaluate)	_match_idr\   r   sortedplaylist_resultrd   )r/   r    Z
bangumi_idZseason_inforR   r1   r1   r2   ry   /  s$    
 	  zBiliBiliBangumiIE._real_extract)rz   r{   r|   rU   r.   IE_DESCr}   classmethodr   ry   __classcell__r1   r1   r   r2   r~     sD   	 !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/)queryr:   )r\   )r/   pathr   r   r1   r1   r2   	_call_apiH  s     zBilibiliAudioBaseIE._call_api)N)rz   r{   r|   r   r1   r1   r1   r2   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   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    cdnsr   r@   rA   z	song/infor   	statisticlyricr   rO   commentintror   coverZpasstimeunameZplay)r   r   rI   r   r   r   r   r   r   r   r   r   )r   r   r	   rd   )
r/   r    Zau_idZ	play_datarI   songr   r   r   r   r1   r1   r2   ry   j  s:    


 zBilibiliAudioIE._real_extractN)rz   r{   r|   rU   int_TESTry   r1   r1   r1   r2   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   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pnpsr:   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songsrR   r   r   Z
album_dataalbum_titlerx   r1   r1   r2   ry     s>    
  
 

   z"BilibiliAudioAlbumIE._real_extractNrz   r{   r|   rU   r   ry   r1   r1   r1   r2   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/)ierm   )r   r   r   r   )r/   r    rm   r1   r1   r2   ry     s    
 zBiliBiliPlayerIE._real_extractNr   r1   r1   r1   r2   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   r1   r1   r1   r2   <module>   s   0 kC	@'