o
    iyf                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZddlmZ ddlm	Z	m
Z
 ddlmZmZmZmZmZmZmZmZ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 )    N   )InfoExtractor   )aes_ecb_encryptpkcs7_padding)
ExtractorErrorint_or_nonejoin_nonemptystr_or_nonestrftime_or_nonetraverse_objunified_strdateurl_or_noneurljoinvariadicc                   @   sJ   e Zd ZdZdZdd Zi fddZdd Zd	d
 Zdd Z	dddZ
dS )NetEaseMusicBaseIE)standardhigherexhighlosslesshiresjyeffectjymasterskyzhttp://music.163.com/api/c           	   	   C   s   t ji |d|idd}d| d| dd}t| }ttt| d| d| }t	t
|td	}d
|    S )Nheader),:)
separatorsnobodyusemd5forencryptlatin1z-36cd479b6b5-s   e82ckenh8dichen8zparams=)jsondumpsencodehashlibmd5	hexdigestr   liststrbytesr   hexupper)	selfapi_path
query_bodycookiesrequest_textmessage
msg_digestdata	encrypted r6   Q/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/neteasemusic.py_create_eapi_cipher&   s   z&NetEaseMusicBaseIE._create_eapi_cipherc                 K   s   ddddddddddt t d  d	td
dddt| | jdddd hfi}| jr8|d| j | j	t
dd| |f| d| ||dddd | D d|d|S )N	undefinedz8.0.0140
1623435496	1920x1080 pc  _r   04)osverdeviceIdappverversioncode
mobilenamebuildver
resolution__csrfoschannel	requestIdMUSIC_Uc                 S   s   | j S N)value)ir6   r6   r7   <lambda>?   s    z8NetEaseMusicBaseIE._download_eapi_json.<locals>.<lambda>z	X-Real-IPz!https://interface3.music.163.com/z/eapiz/apizhttps://music.163.comz; c                 S   s   g | ]\}}| d | qS )=r6   ).0kvr6   r6   r7   
<listcomp>H   s    z:NetEaseMusicBaseIE._download_eapi_json.<locals>.<listcomp>)RefererCookie)r4   headers)inttimerandomrandintr   _get_cookies	_API_BASE_x_forwarded_for_ip
setdefault_download_jsonr   r8   joinitems)r-   pathvideo_idr/   rY   kwargsr0   r6   r6   r7   _download_eapi_json1   s<   "z&NetEaseMusicBaseIE._download_eapi_jsonc                 C   s(   | j d|d| d|ddd| dS )Nz/song/enhance/player/url/v1[]flac)idslevel
encodeTypez!Downloading song URL info: level note)rh   )r-   song_idrm   r6   r6   r7   _call_player_apiL   s
   z#NetEaseMusicBaseIE._call_player_apic                 C   s   g }|d }| j D ]J}t| ||ddd tf}|s n7|d}|r/||kr/|dv r. n&q	||d |dd	t|d
thfdtddhfdthfd |sS nq	|s^| jddgd |S )Nidr4   c                 S   s   t |d S )Nurl)r   r@   rU   r6   r6   r7   rQ   W   s    z5NetEaseMusicBaseIE._extract_formats.<locals>.<lambda>rm   )r   r   rt   none)rt   	format_idvcodectypebrr?   scalesize)extabrfilesizez5No media links found; possibly due to geo restrictionCN)	countries)	_LEVELSr   rr   anygetappendr)   r   raise_geo_restricted)r-   infoformatsrq   rm   songactual_levelr6   r6   r7   _extract_formatsR   s@   


z#NetEaseMusicBaseIE._extract_formatsc                 C   s   | j | j | ||d| jid}t|dthf}t|dthfp"d}|dkr1| d|  |S |dkr?td	| d
| |S )NrW   )rY   coder2   r=   i2zLogin required to download:    zFailed to get meta info:  )rb   r_   r   rZ   r)   raise_login_requiredr   )r-   endpointrf   rp   resultr   r2   r6   r6   r7   
_query_apip   s   zNetEaseMusicBaseIE._query_apiNrs   namec              
   #   sf    t |g t|ttttf fddR D ]}t|  }| d| t|t ||thfV  qd S )Nc                    s   t |  d uS rN   r   ru   id_keyr6   r7   rQ   ~   s    z1NetEaseMusicBaseIE._get_entries.<locals>.<lambda>zhttp://music.163.com/#/song?id=)r   r   r)   r*   dictset
url_resultNetEaseMusicIE)r-   
songs_data
entry_keysr   name_keyr   rq   r6   r   r7   _get_entries{   s   

zNetEaseMusicBaseIE._get_entries)Nrs   r   )__name__
__module____qualname__r   r_   r8   rh   rr   r   r   r   r6   r6   r6   r7   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edgddddddddddddeddgdgdddigidddd dd!d"d#d$dd%d&ed'd&gd&gddd(d)giddd*d+d,dd-d.d/d0dddigid1d2ded3d4d5gd4gd6d7d8d9d:dd;d<d=gd>d?d@dddigidAdd;ed<dBdCdDdEdFdGddHdIgdJdKdLdddigidMdNdedOdIdPdCdQgZdRdS ZdTdU Z	dVS )Wr   znetease:songu   网易云音乐zGhttps?://(?:y\.)?music\.163\.com/(?:[#m]/)?song\?.*?\bid=(?P<id>[0-9]+)z)https://music.163.com/#/song?id=550136151	550136151mp3zIt's Ok (Live)zcount:10i HZ20180405z$md5:9fd07059c2ccee3950dc8363429a3135   re:^http.*\.jpgu"   偶像练习生 表演曲目合集u   偶像练习生)rs   r~   titlecreators	timestampupload_datedescriptionduration	thumbnailalbumaverage_ratingalbum_artistsrt   	info_dictz%http://music.163.com/song?id=1724142417241424zOpus 2820060912iEi  zPiano Solos, Vol. 2zDustin O'Halloranz$md5:b566b92c55ca348df65d206c5d689576lyricsr~   lrc)rs   r~   r   r   r   r   r   r   album_artistr   r   r   r   	subtitlesz*https://music.163.com/#/song?id=2755669231
2755669231u   十二月-Departure20251111i]i   u   円u   ひとひらz$md5:deee249c8c9c3e2c54ecdab36e87d174z$md5:d32b4425a5d6c9fa249ca6e803dd0401)r~   r4   zehttps://y.music.163.com/m/song?app_version=8.8.45&id=95670&uct2=sKnvS4+0YStsWkqsPhFijw%3D%3D&dlt=0846 b896be78d8d34bd7bb665b26710913ff95670u	   国际歌19911130i7)z$md5:1ba2f911a2b0aa398479f595224f2141i  u-   伴唱:现代人乐队 合唱:总政歌舞团u   红色摇滚u	   侯牧人u   马备)rs   r~   r   r   r   r   r   r   	alt_titler   r   r   r   r   r   )rt   r&   r   z'http://music.163.com/#/song?id=32102397 3e909614ce09b1ccef4a3eb20544119032102397z	Bad BloodzTaylor SwiftzKendrick Lamar20150516iiWUz$md5:21535156efb73d6d1c355f95616e285a   )rs   r~   r   r   r   r   r   r   r   r   r   r   r   Blocked outside Mainland China)rt   r&   r   skipzHas translated name.z'http://music.163.com/#/song?id=2273504322735043u   소원을 말해봐 (Genie)u   少女时代20100127i c`Kz$md5:03d1ffebec3139aa4bafe302369269c5   u   说出愿望吧(Genie)zOh!)rs   r~   r   r   r   r   r   r   r   r   r   r   r   r   )rp   rt   r   r   c                    s   t |ddthf}t |ddthf}|r|dkrd S |s$d|ddgiS dd }||}t|| d	 fd
d|D }|ddg|ddg|ddgdS )Nr   lyrictlyricu    [99:00.00]纯音乐，请欣赏
r   )r4   r~   c                 S   s   d}t || }dd |D S )Nz0\[([0-9]{2}):([0-9]{2})[:.]([0-9]{2,})\]([^\n]+)c                 s   s4    | ]\}}}}d | d| d| d|fV  qdS )ri   r   .rj   Nr6   )rS   minutesecmsectextr6   r6   r7   	<genexpr>	  s
    

zINetEaseMusicIE._process_lyrics.<locals>.collect_lyrics.<locals>.<genexpr>)refindall)r   lyrics_exprmatchesr6   r6   r7   collect_lyrics  s
   z6NetEaseMusicIE._process_lyrics.<locals>.collect_lyrics
c                 3   s2    | ]\}}t | |  |d ddV  qdS )r=   z / delimN)r	   r   )rS   r   r   translation_ts_dictr6   r7   r     s
    
z1NetEaseMusicIE._process_lyrics.<locals>.<genexpr>)lyrics_mergedr   lyrics_translated)r   r)   r   rc   )r-   lyrics_infooriginal
translatedr   original_ts_textsmergedr6   r   r7   _process_lyrics   s"   


zNetEaseMusicIE._process_lyricsc              
   C   s   |  |}| d| d| d|dd d }| |}| | d| d|d	}|r6t|d
dd|dni }||dt|dpCd t|dpId t|dpOd d|t|dthfddtddhfddthfdtddhfddthfdthfdS )Nzsong/detail?id=z&ids=%5Bz%5DzDownloading song infosongsr   zsong/lyric?id=z&lv=-1&tv=-1zDownloading lyrics data))r   r   r   r4   Fget_all)r   r   /))
transNamesalias.artists.r   )r   r   .r   )rs   r   r   r   r   r   r   publishTimer?   r{   picUrlr   score)r   r   r   r   r   r   )		_match_idr   r   r   r   rc   r)   r   r   )r-   rt   rq   r   r   r   
lyric_datar6   r6   r7   _real_extract  sH   



zNetEaseMusicIE._real_extractN)
r   r   r   IE_NAMEIE_DESC
_VALID_URLrZ   _TESTSr   r   r6   r6   r6   r7   r      s    q!r   c                   @   sP   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gZdd ZdS )NetEaseMusicAlbumIEznetease:albumu   网易云音乐 - 专辑z8https?://music\.163\.com/(?:#/)?album\?id=(?P<id>[0-9]+)z*https://music.163.com/#/album?id=133153666	133153666u   桃几的翻唱20210913u   桃几2021年翻唱合集r   )rs   r   r   r   r      rt   r   playlist_mincountz&http://music.163.com/#/album?id=220780220780zB'Day20060904z$md5:71a74e1d8f392d88cf1bbe48879ad0b0   )rt   r   playlist_countc              
   C   s   |  |}| d| |}| jd|d|ddd}| jd|ddd	| jd
d dD |dtjdd| jd|ddd	t| jd|ddd	d}| j	| 
||fi |S )Nzhttps://music.163.com/album?id=z-<textarea[^>]+\bid="song-list-pre-data"[^>]*>metainfoz</textarea>z\[(?s:.+)\])end_patterncontains_patternr   F)fatalc                 s   s    | ]	}d | dV  qdS )z<div[^>]+\bid="album-desc-z"[^>]*>(.*?)</div>Nr6   )rS   suffixr6   r6   r7   r   `  s    z4NetEaseMusicAlbumIE._real_extract.<locals>.<genexpr>)moredotr   )flagsr  imager   zmusic:release_datedate)r   r   r   r   )r   _download_webpage_search_json_og_search_property_html_search_regexr   Sr   _html_search_metaplaylist_resultr   )r-   rt   album_idwebpager   r   r6   r6   r7   r   V  s   

z!NetEaseMusicAlbumIE._real_extractNr   r   r   r   r   r   r   r   r6   r6   r6   r7   r   <  s0    r   c                   @   sZ   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
gZdd ZdS )NetEaseMusicSingerIEznetease:singeru   网易云音乐 - 歌手z9https?://music\.163\.com/(?:#/)?artist\?id=(?P<id>[0-9]+)zSinger has aliases.z&http://music.163.com/#/artist?id=1055910559u!   张惠妹 - aMEI;阿妹;阿密特)rs   r   2   rp   rt   r   r   zSinger has translated name.z'http://music.163.com/#/artist?id=124098124098u   李昇基 - 이승기z%Singer with both translated and aliasz(https://music.163.com/#/artist?id=159692159692u(   初音ミク - 初音未来;Hatsune Mikuc                 C   sp   |  |}| jd| d| |dd}tt|ddthftt|ddthfdd	id
d}| | |d||S )Nzartist/z?id=zDownloading singer dataro   artistr   )trans)r   .r   ;z - r   hotSongs)r   r   r	   r   r)   r  r   )r-   rt   	singer_idr   r   r6   r6   r7   r     s   
z"NetEaseMusicSingerIE._real_extractNr  r6   r6   r6   r7   r  h  s6    		r  c                   @   s   e Zd ZdZdZdZdddddgd	d
edddddddddg dddeddddddddddddd gd!d"d#d$dgZd%d& Zd'S )(NetEaseMusicListIEznetease:playlistu   网易云音乐 - 歌单zPhttps?://music\.163\.com/(?:#/)?(?:playlist|discover/toplist)\?id=(?P<id>[0-9]+)z+http://music.163.com/#/playlist?id=7917735279177352zBillboard 2007 Top 100z$md5:12fd0819cab2965b9583ace0f8b7b022   欧美u   浑然破灭67549805zre:\d{8})rs   r   r   tagsuploaderuploader_idr   r   _   r   zToplist/Charts samplez1https://music.163.com/#/discover/toplist?id=6019860198u0   re:美国Billboard榜 [0-9]{4}-[0-9]{2}-[0-9]{2}u   美国Billboard排行榜)u   流行r!     榜单u   Billboard公告牌48171d   r  z2http://music.163.com/#/discover/toplist?id=37330033733003u=   re:韩国Melon排行榜周榜(?: [0-9]{4}-[0-9]{2}-[0-9]{2})?z$md5:73ec782a612711cadc7872d9c1e134fc202001092937386u   韩语r(  u   Melon榜单i^)rs   r   r   r   r%  r#  r$  r   r  c                 C   s   |  |}| jd||dddddd}t|dd	thfd
thfddthfddthfddthfdtddhfdf}t|ddkrR|d dt|dd |d< | j| 	|d|fi |S )Nz/v3/playlist/detailz-15000)rs   tnszDownloading playlist inforo   playlistr   r   r#  .creatornicknameuserId
updateTimer?   r{   )r   r   r#  r$  r%  r   )r3  specialType
   r   r   r   z%Y-%m-%d)r3  tracks)
r   rh   r   r)   r
   r   r   r   r  r   )r-   rt   list_idr   r   r6   r6   r7   r     s"   




$z NetEaseMusicListIE._real_extractN	r   r   r   r   r   r   rZ   r   r   r6   r6   r6   r7   r    sX    


+r  c                   @   s   e Zd ZdZdZdZdddddd	gd
ddeeeddddddddgdddeeeddddddddg dddeeded
d gZd!d" Zd#S )$NetEaseMusicMvIEz
netease:mvu   网易云音乐 - MVz5https?://music\.163\.com/(?:#/)?mv\?id=(?P<id>[0-9]+)z&https://music.163.com/#/mv?id=1095806410958064mp4u   交换余生z$md5:e845872cff28820642a2b02eda428feau	   林俊杰20200916re:http.*\.jpgil  )rs   r~   r   r   r   r   r   r   
view_count
like_countcomment_countr   z#http://music.163.com/#/mv?id=415350415350u   이럴거면 그러지말지u!   白雅言自作曲唱甜蜜爱情u	   白娥娟20150520   r   )rt   r   r   zThis MV has multiple creators.z&https://music.163.com/#/mv?id=2259354322593543u   老北京杀器)u   秃子2zu   辉子u   Saber梁维嘉   20240618)
rs   r~   r   r   r   r   rC  rD  r   rB  )rp   rt   r   c                 C   s   |  |}| d| d|dd }dd |d  D }||t|dp)|d	gd
t|dthfdthtfdthfdthfdt	ddhfdt	hfdt	hfdt	hfdddS )Nzmv/detail?id=z	&type=mp4zDownloading mv infor4   c                 S   s(   g | ]\}}|d | dt |dqS )r?  p)rt   r~   rw   heightr   )rS   brsmv_urlr6   r6   r7   rV     s    z2NetEaseMusicMvIE._real_extract.<locals>.<listcomp>rM  r   
artistName)rs   r   r   r   )desc	briefDescr   coverr   r?   r{   	playCount	likeCountcommentCount)r   r   r   r   r   rB  rC  rD  Fr   )
r   r   rd   r   r   r)   filterr   r   r   )r-   rt   mv_idr   r   r6   r6   r7   r     s4   


	zNetEaseMusicMvIE._real_extractNr<  r6   r6   r6   r7   r=    sb    0r=  c                   @   s   e Zd ZdZdZdZdddddd	gd
dddd	dddddddgdddddddddddddgddddd	ddidd dd!gZd"d# Zd$S )%NetEaseMusicProgramIEznetease:programu   网易云音乐 - 电台节目zAhttps?://music\.163\.com/(?:#/)?(?:dj|program)\?id=(?P<id>[0-9]+)z*http://music.163.com/#/program?id=1010905532593346r   u   不丹足球背后的故事u   喜马拉雅人的足球梦 ...u   大话西藏i{U20150613rA  i  )	rs   r~   r   r   r   r   r   r   r   r   z$This program has accompanying songs.z*http://music.163.com/#/program?id=1014102210141022u   滚滚电台的有声节目z$md5:8d594db46cc3e6509107ede70a4aaa3bu   滚滚电台ORZi-U20150616)rs   r   r   r   r   r   r      r  32647209iP  
noplaylistT)rp   rt   r   paramsz(https://music.163.com/#/dj?id=3706179315)rt   only_matchingc              
   C   s   |  |}| jd| |ddd }t|dthfdthfddthfd	thfd
tddhfd}| j|d o7||d d ddds`| |d }t|d d |t|ddtddhfd|S t|d}| j| 	||fi |S )Nzdj/program/detail?id=zDownloading program inforo   programr   r   djbrandcoverUrl
createTimer?   r{   )r   r   r4  r   r   r   mainSongrs   r   )playlist_labelvideo_labelr   )rs   r   r   ))rg  )r   .)
r   r   r   r)   r   r   _yes_playlistr   r  r   )r-   rt   
program_idr   r   r   r   r6   r6   r7   r   ]  s2   


z#NetEaseMusicProgramIE._real_extractNr  r6   r6   r6   r7   rX  )  s`    	0rX  c                   @   s8   e Zd ZdZdZdZdddddd	d
ZdZdd ZdS )NetEaseMusicDjRadioIEznetease:djradiou   网易云音乐 - 电台z:https?://music\.163\.com/(?:#/)?djradio\?id=(?P<id>[0-9]+)z$http://music.163.com/#/djradio?id=4242u   声音蔓延z$md5:c7381ebd7989f9f367668a5aee7d5f08)rs   r   r   (   r   r?   c              	      s     |}i }g }tjd jdD ]?} jd j d| d| |d| d}| fdd	|d
 D  |sJt|d
dddthfdthfdf}|d sP nq j||fi |S )Nr   )startstepz#dj/program/byradio?asc=false&limit=z	&radioId=z&offset=zDownloading dj programs - ro   c              	   3   s4    | ]}  d |d  t|d |dV  qdS )z"http://music.163.com/#/program?id=rs   r   N)r   rX  r   )rS   rb  r-   r6   r7   r     s    z6NetEaseMusicDjRadioIE._real_extract.<locals>.<genexpr>programsradior   rP  )r   r   r  )	r   	itertoolscount
_PAGE_SIZEr   extendr   r)   r  )r-   rt   dj_idr   entriesoffsetr   r6   rq  r7   r     s(   



z#NetEaseMusicDjRadioIE._real_extractN)	r   r   r   r   r   r   _TESTrv  r   r6   r6   r6   r7   rl  z  s    	rl  )r%   rt  r"   r\   r   r[   commonr   aesr   r   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r  r  r=  rX  rl  r6   r6   r6   r7   <module>   s$    0m 8,,EPQ