U
    y^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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"   TC:\Users\TaGoRe\Desktop\beinconnect-dl\binaries\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songbitrate  )scalesizesr)urlextabr	format_idfilesizeasr)_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 }|d| j | |||S )Nz%s%sReferer)r   	_API_BASE
add_header_download_json)r7   endpointvideo_idnotereqr"   r"   r#   	query_apiF   s    zNetEaseMusicBaseIE.query_apiN)__name__
__module____qualname__r3   r   rC   classmethodr$   r=   rA   rJ   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)rH   r-   rW   rX   z
No lyrics.z%http://music.163.com/song?id=17241424Z17241424zOpus 28zDustin O'HalloranZ20080211i qG)r&   r.   rQ   rR   rS   rT   zHas translated name.z'http://music.163.com/#/song?id=22735043Z22735043u   소원을 말해봐 (Genie)u   少女时代z$md5:79d99cc560e4ca97e0c4d86800ee4184Z20100127i c`Ku   说出愿望吧(Genie))r&   r.   rQ   rR   rU   rS   rT   	alt_titlec                    sr   | di  d}| di  d}|s,|S d}t||}tdd t||D  d 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"   .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 )r4   r\   Ztranslation_ts_dictr"   r#   
<listcomp>   s   z2NetEaseMusicIE._process_lyrics.<locals>.<listcomp>)r4   refindalldictjoin)r7   lyrics_infooriginalZ
translatedZlyrics_exprZoriginal_ts_textslyricsr"   rb   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 )rn   r"   )r]   artistr"   r"   r#   rc      s     z0NetEaseMusicIE._real_extract.<locals>.<listcomp>artistsalbumpublishTimeZpicUrlduration)	r&   rQ   rY   rR   rT   	thumbnailrs   rU   r9   )		_match_idrJ   r	   r=   _sort_formatsrk   r4   rg   rA   )	r7   r-   song_idparamsr8   r9   rh   rj   rY   r"   r"   r#   _real_extract   sD    

 

 

zNetEaseMusicIE._real_extractN)	rK   rL   rM   IE_NAMEIE_DESC
_VALID_URL_TESTSrk   ry   r"   r"   r"   r#   rO   L   sl   		
6rO   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&   rQ      rV   r-   rW   playlist_countrX   c                    s\     |} d||f |dd }|d }|d} fdd|d D } ||||S )	Nzalbum/%s?id=%szDownloading album datarq   rn   rU   c                    s&   g | ]}  d |d  d|d qS !http://music.163.com/#/song?id=%sr&   NetEaseMusic
url_resultr]   r'   r7   r"   r#   rc      s
    z5NetEaseMusicAlbumIE._real_extract.<locals>.<listcomp>rm   )ru   rJ   r4   playlist_result)r7   r-   album_idr8   rn   descentriesr"   r   r#   ry      s    

 

z!NetEaseMusicAlbumIE._real_extractNrK   rL   rM   rz   r{   r|   _TESTry   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   2   rV   rH   r-   rW   r   rX   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 dataro   rn   Ztransz%s - %salias;c                    s&   g | ]}  d |d  d|d qS r   r   r   r   r"   r#   rc      s
    z6NetEaseMusicSingerIE._real_extract.<locals>.<listcomp>ZhotSongs)ru   rJ   rg   r   )r7   r-   	singer_idr8   rn   r   r"   r   r#   ry      s    

 
z"NetEaseMusicSingerIE._real_extractNrK   rL   rM   rz   r{   r|   r}   ry   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&   rQ   rU   c   rV   r   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!   rn   rU   ZspecialType
   Z
updateTimez%Y-%m-%dz%s %sc                    s&   g | ]}  d |d  d|d qS r   r   r   r   r"   r#   rc   0  s
    z4NetEaseMusicListIE._real_extract.<locals>.<listcomp>tracks)ru   rJ   r4   r   fromtimestamprA   strftimer   )r7   r-   list_idr8   rn   r   Z	datestampr   r"   r   r#   ry   !  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	   白雅言20150520)r&   r.   rQ   rU   rR   rS   rV   r-   rW   rX   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.   r0   height)r>   )r]   brsmv_urlr"   r"   r#   rc   P  s   z2NetEaseMusicMvIE._real_extract.<locals>.<listcomp>r   rn   r   Z	briefDesc
artistNamerr   r   ra   coverrs   r   )r&   rQ   rU   rR   rS   r9   rt   rs   )ru   rJ   itemsrv   r4   r   rA   )r7   r-   Zmv_idr8   r9   r"   r"   r#   ry   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10109055rP   u   不丹足球背后的故事u   喜马拉雅人的足球梦 ...u   大话西藏i{UZ20150613i  )r&   r.   rQ   rU   rR   rT   rS   rs   rV   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.   rQ   rU   rT   rS   
noplaylistT)rH   r-   rW   rx   rX   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programrn   rU   rm   r   z;Downloading just the main audio %s because of --no-playlistZmainSongr&   Zdjbrand
createTimecoverUrlrs   r   )r&   rQ   rU   rR   rT   rt   rs   r9   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#   rc     s     z7NetEaseMusicProgramIE._real_extract.<locals>.<listcomp>c                    s   g | ]}  d | d|qS )r   r   r   )r]   rw   r   r"   r#   rc     s
   
 )ru   rJ   _downloaderrx   r4   	to_screenr=   rv   rA   extendr   )	r7   r-   Z
program_idr8   rn   rU   r9   Zsong_idsr   r"   r   r#   ry     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   (   rV   )r-   rW   playlist_mincountrX   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NetEaseMusicProgramr   )r]   r   r   r"   r#   rc     s   
 z7NetEaseMusicDjRadioIE._real_extract.<locals>.<listcomp>programsradiorn   r   more)ru   r   
_PAGE_SIZErJ   r   r   )	r7   r-   Zdj_idrn   r   r   offsetr8   r   r"   r   r#   ry     s,    

 z#NetEaseMusicDjRadioIE._real_extractN)	rK   rL   rM   rz   r{   r|   r   r   ry   r"   r"   r"   r#   r     s   
r   )
__future__r   hashlibr   base64r   r   rd   commonr   compatr	   r
   r   utilsr   r   r   rO   r~   r   r   r   r   r   r"   r"   r"   r#   <module>   s   7p-0*X