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"   úRC:\Users\Broad\Desktop\BeinConnetFix\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20141225i€4œTz$md5:a4d8d89f44656af206b7b2555c0bce6c)rK   r0   rY   rZ   z
No lyrics.z%http://music.163.com/song?id=17241424Z17241424zOpus 28zDustin O'HalloranZ20080211i q°G)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	ƒr„d
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 }x‚t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