3
b`C                 @   s   d dl mZ d dlmZ d dlmZ d dlmZ d dlZddlm	Z	 dd	l
mZmZmZ dd
l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G dd deZG dd deZdS )    )unicode_literals)md5)	b64encode)datetimeN   )InfoExtractor   )compat_urllib_parse_urlencode
compat_strcompat_itertools_count)sanitized_Requestfloat_or_nonec               @   sF   e Zd ZdddgZdZdZedd Zdd	 Zed
d Z	dd Z
dS )NetEaseMusicBaseIEZbMusicZmMusicZhMusicz3go8&$8*3*3h0k(2)2zhttp://music.163.com/api/c             C   s   t | jjd}t t|jd}t|}x,tt|D ]}|| |||  A ||< q8W t }|jt| t	|j
 jd}|jddjddS )Nzutf-8ascii/_+-)	bytearray_NETEASE_SALTencoder
   lenranger   updatebytesr   digestdecodereplace)clsZdfsidZ
salt_bytesZstring_bytesZsalt_lenimresult r"   MC:\Users\Broad\Desktop\All-Down\binaries\youtube_dl\extractor\neteasemusic.py_encrypt   s    zNetEaseMusicBaseIE._encryptc          
   C   s   g }x| j D ]}|j|}|s qd| j|d |d |d f }x`dD ]X}|| }| j||d d	rF|j||jdt|jd
dd||jd|jdd P qFW qW |S )Nz	/%s/%s.%sZdfsId	extensionhttp://m5.music.126.net&http://115.231.74.139/m1.music.126.net&http://124.40.233.182/m1.music.126.net$http://203.130.59.9/m1.music.126.netidsongbitratei  )scalesizesr)urlextabr	format_idfilesizeasr)r&   r'   r(   r)   )_FORMATSgetr$   _is_valid_urlappendr   )selfinfoformatsZsong_formatdetailsZsong_file_pathhostsong_urlr"   r"   r#   extract_formats&   s(    

z"NetEaseMusicBaseIE.extract_formatsc             C   s   t t|d S )Ng     @@)intround)r   msr"   r"   r#   convert_millisecondsB   s    z'NetEaseMusicBaseIE.convert_millisecondsc             C   s.   t d| j|f }|jd| j | j|||S )Nz%s%sReferer)r   	_API_BASE
add_header_download_json)r:   endpointvideo_idnotereqr"   r"   r#   	query_apiF   s    zNetEaseMusicBaseIE.query_apiN)__name__
__module____qualname__r6   r   rF   classmethodr$   r@   rD   rM   r"   r"   r"   r#   r      s   
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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-d. Zd/S )0NetEaseMusicIEznetease:songu   网易云音乐z5https?://music\.163\.com/(#/)?song\?id=(?P<id>[0-9]+)z'http://music.163.com/#/song?id=32102397Z f2e97280e6345c74ba9d5677dd5dcb45Z32102397mp3z Bad Blood (feat. Kendrick Lamar)zTaylor Swift / Kendrick LamarZ20150517i XUz$md5:a10a54589c2860300d02e1de821eb2ef)r*   r1   titlecreatorupload_date	timestampdescriptionzBlocked outside Mainland China)r0   r   	info_dictskipzNo lyrics translation.z'http://music.163.com/#/song?id=29822014Z29822014u   听见下雨的声音u	   周杰伦Z20141225i4Tz$md5:a4d8d89f44656af206b7b2555c0bce6c)rK   r0   rY   rZ   z
No lyrics.z%http://music.163.com/song?id=17241424Z17241424zOpus 28zDustin O'HalloranZ20080211i qG)r*   r1   rT   rU   rV   rW   zHas translated name.z'http://music.163.com/#/song?id=22735043Z22735043u   소원을 말해봐 (Genie)u   少女时代z$md5:79d99cc560e4ca97e0c4d86800ee4184Z20100127i c`Ku   说出愿望吧(Genie))r*   r1   rT   rU   rX   rV   rW   	alt_titlec                sr   |j di j d}|j di j d}|s,|S d}tj||}tdd tj||D  dj fdd	|D }|S )
NlrclyricZtlyricz*(\[[0-9]{2}:[0-9]{2}\.[0-9]{2,}\])([^\n]+)c             s   s   | ]\}}||fV  qd S )Nr"   ).0
time_stamptextr"   r"   r#   	<genexpr>   s    z1NetEaseMusicIE._process_lyrics.<locals>.<genexpr>
c                s&   g | ]\}}d || j |df qS )z	%s%s / %s )r7   )r^   r_   r`   )translation_ts_dictr"   r#   
<listcomp>   s   z2NetEaseMusicIE._process_lyrics.<locals>.<listcomp>)r7   refindalldictjoin)r:   lyrics_infooriginalZ
translatedZlyrics_exprZoriginal_ts_textslyricsr"   )rd   r#   _process_lyrics   s    

zNetEaseMusicIE._process_lyricsc       	   
   C   s   | j |}|d| d}| jdt| |dd d }| j|}| j| | jd| |d}| j|}d }|jd	rd
j|jd	}||d |djdd |jdg D | j|jdi jd|jdi jd| j|jdd||d	S )Nz[%s])r*   idszsong/detail?zDownloading song infosongsr   zsong/lyric?id=%s&lv=-1&tv=-1zDownloading lyrics dataZ
transNamesr   namez / c             S   s   g | ]}|d  qS )rp   r"   )r^   artistr"   r"   r#   re      s    z0NetEaseMusicIE._real_extract.<locals>.<listcomp>artistsalbumpublishTimeZpicUrlduration)	r*   rT   r[   rU   rW   	thumbnailru   rX   r<   )		_match_idrM   r	   r@   _sort_formatsrm   r7   ri   rD   )	r:   r0   song_idparamsr;   r<   rj   rl   r[   r"   r"   r#   _real_extract   s0    





zNetEaseMusicIE._real_extractN)	rN   rO   rP   IE_NAMEIE_DESC
_VALID_URL_TESTSrm   r{   r"   r"   r"   r#   rR   L   sZ   
rR   c               @   s4   e Zd ZdZdZdZdddddd	d
Zdd ZdS )NetEaseMusicAlbumIEznetease:albumu   网易云音乐 - 专辑z6https?://music\.163\.com/(#/)?album\?id=(?P<id>[0-9]+)z&http://music.163.com/#/album?id=220780Z220780zB'day)r*   rT      zBlocked outside Mainland China)r0   rY   playlist_countrZ   c                s\    j |} jd||f |dd }|d }|jd} fdd|d D } j||||S )	Nzalbum/%s?id=%szDownloading album datars   rp   rX   c                s&   g | ]} j d |d  d|d qS )z!http://music.163.com/#/song?id=%sr*   NetEaseMusic)
url_result)r^   r+   )r:   r"   r#   re      s   z5NetEaseMusicAlbumIE._real_extract.<locals>.<listcomp>ro   )rw   rM   r7   playlist_result)r:   r0   album_idr;   rp   descentriesr"   )r:   r#   r{      s    



z!NetEaseMusicAlbumIE._real_extractN)rN   rO   rP   r|   r}   r~   _TESTr{   r"   r"   r"   r#   r      s   r   c               @   sL   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gZdd ZdS )NetEaseMusicSingerIEznetease:singeru   网易云音乐 - 歌手z7https?://music\.163\.com/(#/)?artist\?id=(?P<id>[0-9]+)zSinger has aliases.z&http://music.163.com/#/artist?id=10559Z10559u   张惠妹 - aMEI;阿密特)r*   rT   2   zBlocked outside Mainland China)rK   r0   rY   r   rZ   zSinger has translated name.z'http://music.163.com/#/artist?id=124098Z124098u   李昇基 - 이승기c                s    j |} jd||f |d}|d d }|d d rLd||d d f }|d d rrd|dj|d d f } fd	d
|d D } j|||S )Nzartist/%s?id=%szDownloading singer datarq   rp   transz%s - %salias;c                s&   g | ]} j d |d  d|d qS )z!http://music.163.com/#/song?id=%sr*   r   )r   )r^   r+   )r:   r"   r#   re     s   z6NetEaseMusicSingerIE._real_extract.<locals>.<listcomp>ZhotSongs)rw   rM   ri   r   )r:   r0   	singer_idr;   rp   r   r"   )r:   r#   r{      s    


z"NetEaseMusicSingerIE._real_extractN)rN   rO   rP   r|   r}   r~   r   r{   r"   r"   r"   r#   r      s    
r   c               @   sN   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gZdd ZdS )NetEaseMusicListIEznetease:playlistu   网易云音乐 - 歌单zLhttps?://music\.163\.com/(#/)?(playlist|discover/toplist)\?id=(?P<id>[0-9]+)z+http://music.163.com/#/playlist?id=79177352Z79177352zBillboard 2007 Top 100z$md5:12fd0819cab2965b9583ace0f8b7b022)r*   rT   rX   c   zBlocked outside Mainland China)r0   rY   r   rZ   zToplist/Charts samplez2http://music.163.com/#/discover/toplist?id=3733003Z3733003u8   re:韩国Melon排行榜周榜 [0-9]{4}-[0-9]{2}-[0-9]{2}z$md5:73ec782a612711cadc7872d9c1e134fcr   )rK   r0   rY   r   rZ   c                s    j |} jd| |dd }|d }|jd}|jddkrftj j|d jd	}d
||f } fdd|d D } j||||S )Nz!playlist/detail?id=%s&lv=-1&tv=-1zDownloading playlist datar!   rp   rX   ZspecialType
   Z
updateTimez%Y-%m-%dz%s %sc                s&   g | ]} j d |d  d|d qS )z!http://music.163.com/#/song?id=%sr*   r   )r   )r^   r+   )r:   r"   r#   re   1  s   z4NetEaseMusicListIE._real_extract.<locals>.<listcomp>tracks)rw   rM   r7   r   fromtimestamprD   strftimer   )r:   r0   list_idr;   rp   r   Z	datestampr   r"   )r:   r#   r{   !  s    


z NetEaseMusicListIE._real_extractN)rN   rO   rP   r|   r}   r~   r   r{   r"   r"   r"   r#   r     s"   
r   c               @   s:   e Zd ZdZdZdZdddddd	d
dddZdd ZdS )NetEaseMusicMvIEz
netease:mvu   网易云音乐 - MVz3https?://music\.163\.com/(#/)?mv\?id=(?P<id>[0-9]+)z#http://music.163.com/#/mv?id=415350Z415350mp4u   이럴거면 그러지말지u!   白雅言自作曲唱甜蜜爱情u	   白雅言20150520)r*   r1   rT   rX   rU   rV   zBlocked outside Mainland China)r0   rY   rZ   c             C   s   | j |}| jd| |dd }dd |d j D }| j| ||d |jdpZ|jd	|d
 |d jdd||jd| j|jdddS )Nzmv/detail?id=%s&type=mp4zDownloading mv infodatac             S   s&   g | ]\}}|d d| t |dqS )r   z%sp)r0   r1   r3   height)rA   )r^   brsmv_urlr"   r"   r#   re   Q  s   z2NetEaseMusicMvIE._real_extract.<locals>.<listcomp>r   rp   r   Z	briefDesc
artistNamert   r   rc   coverru   r   )r*   rT   rX   rU   rV   r<   rv   ru   )rw   rM   itemsrx   r7   r   rD   )r:   r0   Zmv_idr;   r<   r"   r"   r#   r{   I  s    

zNetEaseMusicMvIE._real_extractN)rN   rO   rP   r|   r}   r~   r   r{   r"   r"   r"   r#   r   8  s   r   c               @   sv   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dddddddddiddgZdd Zd S )!NetEaseMusicProgramIEznetease:programu   网易云音乐 - 电台节目z8https?://music\.163\.com/(#/?)program\?id=(?P<id>[0-9]+)z*http://music.163.com/#/program?id=10109055Z10109055rS   u   不丹足球背后的故事u   喜马拉雅人的足球梦 ...u   大话西藏i{UZ20150613i  )r*   r1   rT   rX   rU   rW   rV   ru   zBlocked outside Mainland China)r0   rY   rZ   z$This program has accompanying songs.z*http://music.163.com/#/program?id=10141022Z10141022u*   25岁，你是自在如风的少年<27°C>z$md5:8d594db46cc3e6509107ede70a4aaa3b)r*   rT   rX      )rK   r0   rY   r   rZ   iUZ20150616)r*   r1   rT   rX   rW   rV   
noplaylistT)rK   r0   rY   rz   rZ   c       	   
      s   j |} jd| |dd }|d }|d }|d  sH jjjdr|d rf jd|d	 d
    j|d	 } j| ||||d d  j|d |d  j|jdd|dS  jd||d	 d
 f  |d	 d
 g}|j	dd |d D   fdd|D } j
||||S )Nzdj/program/detail?id=%szDownloading program infoprogramrp   rX   ro   r   z;Downloading just the main audio %s because of --no-playlistZmainSongr*   Zdjbrand
createTimecoverUrlru   r   )r*   rT   rX   rU   rW   rv   ru   r<   zNDownloading playlist %s - add --no-playlist to just download the main audio %sc             S   s   g | ]}|d  qS )r*   r"   )r^   r+   r"   r"   r#   re     s    z7NetEaseMusicProgramIE._real_extract.<locals>.<listcomp>c                s   g | ]} j d | d|qS )z!http://music.163.com/#/song?id=%sr   )r   )r^   ry   )r:   r"   r#   re     s   )rw   rM   _downloaderrz   r7   	to_screenr@   rx   rD   extendr   )	r:   r0   Z
program_idr;   rp   rX   r<   Zsong_idsr   r"   )r:   r#   r{     s:    



z#NetEaseMusicProgramIE._real_extractN)rN   rO   rP   r|   r}   r~   r   r{   r"   r"   r"   r#   r   b  s>   
r   c               @   s:   e Zd ZdZdZdZdddddd	d
dZdZdd ZdS )NetEaseMusicDjRadioIEznetease:djradiou   网易云音乐 - 电台z8https?://music\.163\.com/(#/)?djradio\?id=(?P<id>[0-9]+)z$http://music.163.com/#/djradio?id=42Z42u   声音蔓延z$md5:766220985cbd16fdd552f64c578a6b15)r*   rT   rX   (   zBlocked outside Mainland China)r0   rY   playlist_mincountrZ   i  c       	         s    j |}d }d }g }xtd jdD ]p} jd j||f |d| }|j fdd|d D  |d kr|d d d }|d	 }|d
 }|d s&P q&W  j||||S )Nr   )startstepz:dj/program/byradio?asc=false&limit=%d&radioId=%s&offset=%dzDownloading dj programs - %dc                s&   g | ]} j d |d  d|d qS )z$http://music.163.com/#/program?id=%sr*   ZNetEaseMusicProgram)r   )r^   r   )r:   r"   r#   re     s   z7NetEaseMusicDjRadioIE._real_extract.<locals>.<listcomp>programsradiorp   r   more)rw   r   
_PAGE_SIZErM   r   r   )	r:   r0   Zdj_idrp   r   r   offsetr;   r   r"   )r:   r#   r{     s&    

z#NetEaseMusicDjRadioIE._real_extractN)	rN   rO   rP   r|   r}   r~   r   r   r{   r"   r"   r"   r#   r     s   r   )
__future__r   hashlibr   base64r   r   rf   commonr   compatr	   r
   r   utilsr   r   r   rR   r   r   r   r   r   r   r"   r"   r"   r#   <module>   s   7p-0*X