U
    $PfC                     @   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d}t t|d}t|}tt|D ]}|| |||  A ||< q6t }|t| t	|
 d}|dd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"   E/tmp/pip-unpacked-wheel-7zdooeg3/youtube_dl/extractor/neteasemusic.py_encrypt   s    zNetEaseMusicBaseIE._encryptc                 C   s   g }| j D ]}||}|sq
d| |d |d |d f }dD ]Z}|| }| ||d drB|||dt|ddd	||d
|dd  q
qBq
|S )Nz	/%s/%s.%sZdfsId	extension)zhttp://m5.music.126.netz&http://115.231.74.139/m1.music.126.netz&http://124.40.233.182/m1.music.126.netz$http://203.130.59.9/m1.music.126.netidsongZbitrate  )Zscalesizesr)urlextZabr	format_idfilesizeZasr)_FORMATSgetr$   Z_is_valid_urlappendr   )selfinfoformatsZsong_formatdetailsZsong_file_pathhostZ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 }|d| j | |||S )Nz%s%sZReferer)r   	_API_BASE
add_headerZ_download_json)r2   ZendpointZvideo_idnotereqr"   r"   r#   	query_apiF   s    zNetEaseMusicBaseIE.query_apiN)__name__
__module____qualname__r/   r   r<   classmethodr$   r7   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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&   r,   titlecreatorupload_date	timestampdescriptionBlocked outside Mainland China)r+   r   	info_dictskipzNo lyrics translation.z'http://music.163.com/#/song?id=29822014Z29822014u   听见下雨的声音u	   周杰伦Z20141225i4Tz$md5:a4d8d89f44656af206b7b2555c0bce6c)r>   r+   rM   rN   z
No lyrics.z%http://music.163.com/song?id=17241424Z17241424zOpus 28zDustin O'HalloranZ20080211i qG)r&   r,   rG   rH   rI   rJ   zHas translated name.z'http://music.163.com/#/song?id=22735043Z22735043u   소원을 말해봐 (Genie)u   少女时代z$md5:79d99cc560e4ca97e0c4d86800ee4184Z20100127i c`Ku   说出愿望吧(Genie))r&   r,   rG   rH   rK   rI   rJ   	alt_titlec                    sr   | di  d}| di  d}|s,|S d}t||}tdd t||D  d fdd	|D }|S )
NZlrcZlyricZtlyricz*(\[[0-9]{2}:[0-9]{2}\.[0-9]{2,}\])([^\n]+)c                 s   s   | ]\}}||fV  qd S )Nr"   .0Z
time_stamptextr"   r"   r#   	<genexpr>   s    z1NetEaseMusicIE._process_lyrics.<locals>.<genexpr>
c              	      s&   g | ]\}}d ||  |df qS )z	%s%s / %s )r0   rP   Ztranslation_ts_dictr"   r#   
<listcomp>   s   z2NetEaseMusicIE._process_lyrics.<locals>.<listcomp>)r0   refindalldictjoin)r2   lyrics_infooriginalZ
translatedZlyrics_exprZoriginal_ts_textslyricsr"   rV   r#   _process_lyrics   s    
zNetEaseMusicIE._process_lyricsc           	      C   s   |  |}|d| d}| dt| |dd d }| |}| | | d| |d}| |}d }|d	rd
|d	}||d |ddd |dg D | |di d|di d| |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 )rb   r"   )rQ   artistr"   r"   r#   rW      s     z0NetEaseMusicIE._real_extract.<locals>.<listcomp>ZartistsalbumpublishTimeZpicUrlduration)	r&   rG   rO   rH   rJ   	thumbnailrf   rK   r4   )		_match_idr@   r	   r7   _sort_formatsr_   r0   r[   r;   )	r2   r+   song_idparamsr3   r4   r\   r^   rO   r"   r"   r#   _real_extract   sD    

 

 

zNetEaseMusicIE._real_extractN)	rA   rB   rC   IE_NAMEIE_DESC
_VALID_URL_TESTSr_   rl   r"   r"   r"   r#   rE   L   sl   		
6rE   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&   rG      rL   r+   rM   playlist_countrN   c                    s\     |} d||f |dd }|d }|d} fdd|d D } ||||S )	Nzalbum/%s?id=%szDownloading album datard   rb   rK   c                    s&   g | ]}  d |d  d|d qS !http://music.163.com/#/song?id=%sr&   NetEaseMusicZ
url_resultrQ   r'   r2   r"   r#   rW      s
    z5NetEaseMusicAlbumIE._real_extract.<locals>.<listcomp>ra   )rh   r@   r0   playlist_result)r2   r+   Zalbum_idr3   rb   descentriesr"   r{   r#   rl      s    

 

z!NetEaseMusicAlbumIE._real_extractNrA   rB   rC   rm   rn   ro   _TESTrl   r"   r"   r"   r#   rq      s   
rq   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;阿密特rr   2   rL   r>   r+   rM   ru   rN   zSinger has translated name.z'http://music.163.com/#/artist?id=124098Z124098u   李昇基 - 이승기c                    s     |} d||f |d}|d d }|d d rLd||d d f }|d d rrd|d|d d f } fd	d
|d D } |||S )Nzartist/%s?id=%szDownloading singer datarc   rb   Ztransz%s - %salias;c                    s&   g | ]}  d |d  d|d qS rv   ry   rz   r{   r"   r#   rW      s
    z6NetEaseMusicSingerIE._real_extract.<locals>.<listcomp>ZhotSongs)rh   r@   r[   r|   )r2   r+   Z	singer_idr3   rb   r~   r"   r{   r#   rl      s    

 
z"NetEaseMusicSingerIE._real_extractNrA   rB   rC   rm   rn   ro   rp   rl   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&   rG   rK   c   rL   rt   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   r   c                    s     |} d| |dd }|d }|d}|ddkrft |d d	}d
||f } fdd|d D } ||||S )Nz!playlist/detail?id=%s&lv=-1&tv=-1zDownloading playlist datar!   rb   rK   ZspecialType
   Z
updateTimez%Y-%m-%dz%s %sc                    s&   g | ]}  d |d  d|d qS rv   ry   rz   r{   r"   r#   rW   0  s
    z4NetEaseMusicListIE._real_extract.<locals>.<listcomp>Ztracks)rh   r@   r0   r   fromtimestampr;   strftimer|   )r2   r+   Zlist_idr3   rb   r}   Z	datestampr~   r"   r{   r#   rl   !  s*    
 

z NetEaseMusicListIE._real_extractNr   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	   白雅言Z20150520)r&   r,   rG   rK   rH   rI   rL   r+   rM   rN   c                 C   s   |  |}| d| |dd }dd |d  D }| | ||d |dpZ|d	|d
 |d dd||d| |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)r+   r,   r-   height)r8   )rQ   brsZmv_urlr"   r"   r#   rW   P  s   z2NetEaseMusicMvIE._real_extract.<locals>.<listcomp>r   rb   r}   Z	briefDescZ
artistNamere   r   rU   Zcoverrf   r   )r&   rG   rK   rH   rI   r4   rg   rf   )rh   r@   itemsri   r0   r   r;   )r2   r+   Zmv_idr3   r4   r"   r"   r#   rl   I  s*    
 

zNetEaseMusicMvIE._real_extractNr   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10109055rF   u   不丹足球背后的故事u   喜马拉雅人的足球梦 ...u   大话西藏i{UZ20150613i  )r&   r,   rG   rK   rH   rJ   rI   rf   rL   r   z$This program has accompanying songs.z*http://music.163.com/#/program?id=10141022Z10141022u*   25岁，你是自在如风的少年<27°C>z$md5:8d594db46cc3e6509107ede70a4aaa3br      r   iUZ20150616)r&   r,   rG   rK   rJ   rI   
noplaylistT)r>   r+   rM   rk   rN   c           	         s    |} d| |dd }|d }|d }|d rF jjdr|d rd d|d	 d
    |d	 } | ||||d d  |d |d  |dd|dS  d||d	 d
 f  |d	 d
 g}|	dd |d D   fdd|D } 
||||S )Nzdj/program/detail?id=%szDownloading program infoprogramrb   rK   ra   r   z;Downloading just the main audio %s because of --no-playlistZmainSongr&   ZdjZbrandZ
createTimeZcoverUrlrf   r   )r&   rG   rK   rH   rJ   rg   rf   r4   zNDownloading playlist %s - add --no-playlist to just download the main audio %sc                 S   s   g | ]}|d  qS )r&   r"   rz   r"   r"   r#   rW     s     z7NetEaseMusicProgramIE._real_extract.<locals>.<listcomp>c                    s   g | ]}  d | d|qS )rw   rx   ry   )rQ   rj   r{   r"   r#   rW     s
   
 )rh   r@   Z_downloaderrk   r0   Z	to_screenr7   ri   r;   extendr|   )	r2   r+   Z
program_idr3   rb   rK   r4   Zsong_idsr~   r"   r{   r#   rl     sN    
 



z#NetEaseMusicProgramIE._real_extractNr   r"   r"   r"   r#   r   b  sP   
	 (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:766220985cbd16fdd552f64c578a6b15r   (   rL   )r+   rM   Zplaylist_mincountrN   r(   c           	         s     |}d }d }g }td jdD ]r} d j||f |d| }| fdd|d D  |d kr|d d d }|d	 }|d
 }|d s$ qq$ ||||S )Nr   )startstepz:dj/program/byradio?asc=false&limit=%d&radioId=%s&offset=%dzDownloading dj programs - %dc                    s&   g | ]}  d |d  d|d qS )z$http://music.163.com/#/program?id=%sr&   ZNetEaseMusicProgramry   )rQ   r   r{   r"   r#   rW     s   
 z7NetEaseMusicDjRadioIE._real_extract.<locals>.<listcomp>Zprogramsradiorb   r}   Zmore)rh   r   
_PAGE_SIZEr@   r   r|   )	r2   r+   Zdj_idrb   r}   r~   offsetr3   r   r"   r{   r#   rl     s,    

 z#NetEaseMusicDjRadioIE._real_extractN)	rA   rB   rC   rm   rn   ro   r   r   rl   r"   r"   r"   r#   r     s   
r   )
__future__r   hashlibr   base64r   r   rX   commonr   compatr	   r
   r   utilsr   r   r   rE   rq   r   r   r   r   r   r"   r"   r"   r#   <module>   s   7p-0*X