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20141225i€4œTz$md5:a4d8d89f44656af206b7b2555c0bce6c)rH   r-   rW   rX   z
No lyrics.z%http://music.163.com/song?id=17241424Z17241424zOpus 28zDustin O'HalloranZ20080211i q°G)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	¡r„d
 | 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$ q˜q$ˆ  ||||¡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