
    VGhb                     0   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e      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zy)    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                   B    e Zd ZdZdZdZd Zi fdZd Zd Z	d Z
dd
Zy	)NetEaseMusicBaseIE)standardhigherexhighlosslesshiresjyeffectjymasterskyzhttp://music.163.com/api/Fc                    t        j                  i |d|id      }d| d| dj                  d      }t        j                  |      j                         }t        t        t        j                  | d| d|                   }t        t        |t        d	                  }d
|j                         j                          j                         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	encrypteds	            f/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/neteasemusic.py_create_eapi_cipherz&NetEaseMusicBaseIE._create_eapi_cipher'   s    zz"CZ"C7"CPZ[8*C~]CJJ8T[[)335
T#**jl^=M#O P Q/$5H0IJK	..01299;;    c                    ddddddddddt        t        j                         dz         d	t        j                  d
d      ddt	        | j                  | j                        ddd hfi      } | j                  t        dd|       |f| j                  d| ||      ddj                  |j                         D cg c]  \  }}| d|  c}}      d|d|S c c}}w )N	undefinedz8.0.0140
1623435496	1920x1080 pc  _r   04)osverdeviceIdappverversioncode
mobilenamebuildver
resolution__csrfoschannel	requestIdMUSIC_Uc                     | j                   S N)value)is    r9   <lambda>z8NetEaseMusicBaseIE._download_eapi_json.<locals>.<lambda>@   s
    !'' r;   z!https://interface3.music.163.com/z/eapiz/apizhttps://music.163.comz; =)RefererCookie)r7   headers)inttimerandomrandintr   _get_cookies	_API_BASE_download_jsonr   r:   joinitems)	r0   pathvideo_idr2   rZ   kwargsr3   kvs	            r9   _download_eapi_jsonz&NetEaseMusicBaseIE._download_eapi_json2   s    # %$%"		d 234AfnnQ6Mb5QR
 4,,T^^<I(9':;? 
  #t""75H())D-WM2))GMMO$LDAqs!A3Z$LMX X  	 %Ms   C$c                 B    | j                  d|d| d|ddd|       S )Nz/song/enhance/player/url/v1[]flac)idslevel
encodeTypez!Downloading song URL info: level note)ri   )r0   song_idro   s      r9   _call_player_apiz#NetEaseMusicBaseIE._call_player_apiK   s;    '')7yNU&I4UG< ( > 	>r;   c                 ~   g }|d   }| j                   D ]  }t        | j                  ||      dd t        f      }|s nh|j	                  d      }|r||k7  r|dv r nJJ|j                  |d   |ddt        |d	t        hfd
t        d      hfdt        hfd             |r n |s| j                  ddg       |S )Nidr7   c                     t        |d         S )Nurl)r   )rD   rh   s     r9   rV   z5NetEaseMusicBaseIE._extract_formats.<locals>.<lambda>V   s    [YZ[`YaMb r;   ro   )r   r   rx   none)rx   	format_idvcodectypebrrC   scalesize)extabrfilesizez5No media links found; possibly due to geo restrictionCN)	countries)	_LEVELSr   rt   anygetappendr,   r	   raise_geo_restricted)r0   infoformatsrs   ro   songactual_levels          r9   _extract_formatsz#NetEaseMusicBaseIE._extract_formatsQ   s    t*\\ 	E%%gu5@bdg7hjD88G,L 544NNE{" 	 t"SE? ;T#:";<!'+ 7& 		 	  +	, %%GTXSY & [r;   c                    | j                  | j                   | ||d| j                  i      }t        |dt        hf      }t        |dt        hf      xs d}|dk(  r| j                  d|        |S |dk7  rt        d	| d
|       |S )NrX   )rZ   coder5   rA   i2zLogin required to download:    zFailed to get meta info:  )ra   r`   r   r[   r,   raise_login_requiredr   )r0   endpointre   rr   resultr   r5   s          r9   
_query_apizNetEaseMusicBaseIE._query_apio   s    $$~~xj)8TIt~~C^ % `FVcUO4v	C5'9:@b4<%%(DWI&NO  S[ #<TF!G9!MNNr;   Nc              #      K   t        |g t        |t        t        t        t
        f      fd      D ]>  }t        |         }| j                  d| t        |t        ||t        hf             @ y w)Nc                 $    t        |         d uS rS   )r	   )rD   rh   id_keys     r9   rV   z1NetEaseMusicBaseIE._get_entries.<locals>.<lambda>}   s    [634? r;   zhttp://music.163.com/#/song?id=)r   r   r,   r-   dictset
url_resultNetEaseMusicIE)r0   
songs_data
entry_keysr   name_keyr   rs   s      `   r9   _get_entrieszNetEaseMusicBaseIE._get_entriesz   s       .A*sE4&=>.A?.A B 	@D $v,'G//1';^dXu,=>@ @		@s   A5A8)Nrv   name)__name__
__module____qualname__r   r`   _GEO_BYPASSr:   ri   rt   r   r   r    r;   r9   r   r      s;    	G ,IK	< GI 2><	@r;   r   c                   $   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digid&d'ded(d)d*gd)gd+d,d-d.d/dd0d1d2gd3d4d5dddigid6dd0ed1d7d8d9d:d;d<dd=d>gd?d@dAdddigidBdCdedDd>dEd8dFgZdG ZdH Z	yI)Jr   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   偶像练习生)rv   r   titlecreators	timestampupload_datedescriptionduration	thumbnailalbumaverage_ratingalbum_artistsrx   	info_dictz%http://music.163.com/song?id=1724142417241424zOpus 2820080211i qGi  zPiano Solos Vol. 2zDustin O'Halloranu    [00:05.00]纯音乐，请欣赏
lyricsr   lrc)rv   r   r   r   r   r   r   r   album_artistr   r   r   r   	subtitleszehttps://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   马备)rv   r   r   r   r   r   r   r   	alt_titler   r   r   r   r   r   )rx   r)   r   z'http://music.163.com/#/song?id=32102397 3e909614ce09b1ccef4a3eb20544119032102397z	Bad BloodzTaylor SwiftzKendrick Lamar20150516iiWUz$md5:21535156efb73d6d1c355f95616e285a   )rv   r   r   r   r   r   r   r   r   r   r   r   r   Blocked outside Mainland China)rx   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!)rv   r   r   r   r   r   r   r   r   r   r   r   r   r   )rr   rx   r   r   c                 >   t        |ddt        hf      }t        |ddt        hf      }|r|dk(  ry |sd|ddgiS d}t        j                  ||      }t	        t        j                  ||            dj                  fd	|D              }|ddg|ddg|ddgd
S )Nr   lyrictlyricu    [99:00.00]纯音乐，请欣赏
r   )r7   r   z*(\[[0-9]{2}:[0-9]{2}\.[0-9]{2,}\])([^\n]+)
c              3   h   K   | ])  \  }}t        | | j                  |d       d       + yw)rA   z / delimN)r
   r   ).0r   texttranslation_ts_dicts      r9   	<genexpr>z1NetEaseMusicIE._process_lyrics.<locals>.<genexpr>   sB      6	4 YKv.0C0G0G	SU0V^cdd6s   /2)lyrics_mergedr   lyrics_translated)r   r,   refindallr   rb   )r0   lyrics_infooriginal
translatedlyrics_exproriginal_ts_textsmergedr   s          @r9   _process_lyricszNetEaseMusicIE._process_lyrics   s    eWse-DE!+'C5/IJ
8'JJHU;<  DJJ{H="2::k:#FG 6#46 6
 (.e<= (78+5e"D!E
 	
r;   c                    | j                  |      }| j                  d| d| d|d      d   d   }| j                  |      }| j                  | j                  d| d|d	            }|rt	        |d
d      |dni }||dj                  t	        |d            xs d t	        |d      xs d t	        |d      xs d d|t	        |dt        hfddt        d      hfddt        hfdt        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   r7   Fget_all)r   r   /))
transNamesalias.artists.r   )r   r   .r   )rv   r   r   r   r   r   r   publishTimerC   r~   picUrlr   score)r   r   r   r   r   r   )		_match_idr   r   r   r   rb   r,   r	   r   )r0   rx   rs   r   r   r   
lyric_datas          r9   _real_extractzNetEaseMusicIE._real_extract  si   ..%gYhwis;WF]__fhhik ''-%%dooWI\2G=V'X Y
  (0Xbgh
  	 ,t5S"TU]Y]$T+CDL)$0QRZVZ
 
 4 3%%}{7N6OP%x+?'+D*A)BC!6C51#*[M":" 
 	
r;   N)
r   r   r   IE_NAMEIE_DESC
_VALID_URLr[   _TESTSr   r   r   r;   r9   r   r      s   GG[J:&"#%A+9!/0
" 7%#+)0!>23-."eU^$45
& w1 %"A"eU^$45H+!#'!
)]
* 91 ')9:%#A"eU^$45+ !*
 1%( '82'(%#A"eU^$451+!*
  1'S]F~
4
r;   r   c                   N    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 Zy)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   )rv   r   r   r   r      rx   r   playlist_mincountz&http://music.163.com/#/album?id=220780220780zB'Day20060904z$md5:71a74e1d8f392d88cf1bbe48879ad0b0   )rx   r   playlist_countc                    | j                  |      }| j                  d| |      }| j                  d|d|dd      }| j                  d|dd	      | j	                  d
 dD        |dt
        j                  d      | j                  d|dd	      t        | j                  d|dd	            d} | j                  | 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              3   (   K   | ]
  }d | d  yw)z<div[^>]+\bid="album-desc-z"[^>]*>(.*?)</div>Nr   )r   suffixs     r9   r   z4NetEaseMusicAlbumIE._real_extract.<locals>.<genexpr>F  s     hf.vh6HIhs   )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   )r0   rx   album_idwebpager   r  s         r9   r   z!NetEaseMusicAlbumIE._real_extract<  s    >>#&((+J8*)UW_`!!<gzS[& " I --gwu-U22hXghbdd% 3 A 11'7KW\1]*4+A+ABVX_agot+A+uv
 $t##D$5$5e$<hS(SSr;   Nr   r   r   r   r   r   r   r   r   r;   r9   r   r   "  sb    G(GLJ;&%6+
  
 8%A+
 
F,Tr;   r   c                   X    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 Zy)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;阿妹;阿密特)rv   r   2   rr   rx   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                    | j                  |      }| j                  d| d| |d      }t        t        |ddt        hf      t        t        |ddt        hf      dd	id
      }| j                  | j                  |d      ||      S )Nzartist/z?id=zDownloading singer datarq   artistr   )trans)r   .r   ;z - r   hotSongs)r   r   r
   r   r,   r  r   )r0   rx   	singer_idr   r   s        r9   r   z"NetEaseMusicSingerIE._real_extractl  s    NN3'	i[YK0)B[  ] &3%89<x9RUXTY.Z[gcfg
 ##D$5$5dJ$GTXYYr;   Nr  r   r;   r9   r  r  N  ss    G(GMJ%78
  .8,
  89?
 !F4Zr;   r  c                       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% Zy&)'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})rv   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^)rv   r   r   r   r,  r*  r+  r   r  c                    | j                  |      }| j                  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      hfdf      }t        |d      dk(  r2|j                  d       dt        |j                  d      d       |d<    | j                  | j                  |d      |fi |S )Nz/v3/playlist/detailz-15000)rv   tnszDownloading playlist inforq   playlistr   r   r*  .creatornicknameuserId
updateTimerC   r~   )r   r   r*  r+  r,  r   )r;  specialType
   r   r   r   z%Y-%m-%d)r;  tracks)
r   ri   r   r,   r   r	   r   r   r  r   )r0   rx   list_idr   r  s        r9   r   z NetEaseMusicListIE._real_extract  s	   ..%''!7E<, ( .
  zse_)C51S3%("J6%x+?&4)@(AB4
 '  9:b@#+<<#8"9;KHLLYdLegq;r:s tHW#t##D$5$5d<R$SU\i`hiir;   N	r   r   r   r   r   r   r[   r   r   r   r;   r9   r&  r&  z  s     G(GdJ<-AJ&%&	
   (BG52,"&	
  (CTA%$x(%#	
 7)FVjr;   r&  c                       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! Zy")#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  )rv   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   )rx   r   r   zThis MV has multiple creators.z&https://music.163.com/#/mv?id=2259354322593543u   老北京杀器)u   秃子2zu   辉子u   Saber梁维嘉   20240618)
rv   r   r   r   r   r   rL  rM  r   rK  )rr   rx   r   c                    | j                  |      }| j                  d| d|d      d   }|d   j                         D cg c]  \  }}|d| dt        |      d }}}||t	        |d	      xs |j                  d
      gdt	        |dt        hfdt        ht        fdt        hfdt        hfdt        d      hfdt        hfdt        hfdt        hfdd      S c c}}w )Nzmv/detail?id=z	&type=mp4zDownloading mv infor7   brsrH  p)rx   r   rz   heightr   
artistName)rv   r   r   r   )desc	briefDescr   coverr   rC   r~   	playCount	likeCountcommentCount)r   r   r   r   r   rK  rL  rM  Fr   )
r   r   rc   r	   r   r   r,   filterr   r   )r0   rx   mv_idr   rU  mv_urlr   s          r9   r   zNetEaseMusicMvIE._real_extract  s%   s#E7),e5JLLRT
  $E{002
V 5#ayKX[L\]
 
 $T+CD`R^I_H`
 4 3% 5ufE -/@A%}5'+D*A)BC*[M:*[M:"0;-!@	" 		
 	

s   C NrD  r   r;   r9   rF  rF    s    G$GIJ7#A$%* 
  53>$%* 
 1" 17&@% *
?.F`
r;   rF  c                       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gZd  Zy!)"NetEaseMusicProgramIEznetease:programu   网易云音乐 - 电台节目z:https?://music\.163\.com/(?:#/)?program\?id=(?P<id>[0-9]+)z*http://music.163.com/#/program?id=1010905532593346r   u   不丹足球背后的故事u   喜马拉雅人的足球梦 ...u   大话西藏i{U20150613rJ  i  )	rv   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)rv   r   r   r   r   r   r      r  32647209iP  
noplaylistT)rr   rx   r   paramsc                    | j                  |      }| j                  d| |d      d   }t        |dt        hfdt        hfddt        hfd	t        hfd
t        d      hfd      }| j                  |d   xr ||d   d   dd      sC| j                  |d         }t        |d   d         |t        |ddt        d      hf      d|S t        |d      } | j                  | j                  |      |fi |S )Nzdj/program/detail?id=zDownloading program inforq   programr   r   djbrandcoverUrl
createTimerC   r~   )r   r   r<  r   r   r   mainSongrv   r   )playlist_labelvideo_labelr   )rv   r   r   ))rr  )r   .)
r   r   r   r,   r   r	   _yes_playlistr   r  r   )r0   rx   
program_idr   r  r   r   s          r9   r   z#NetEaseMusicProgramIE._real_extract@  sJ   ^^C(
#J<0*C]  __hj  se_)C51gu-${m4&4)@(AB'
  !!W,*d:.>t.DU^lr " t++D,<=G $z*401"(
J[_I`Ha/bc 	  T#BC#t##D$5$5e$<jUHUUr;   Nr  r   r;   r9   rc  rc    s    G.GNJ;2<'(#%*

 7;2A*+#%*
  7;2A*+#%*

 $
5+FZVr;   rc  c                   6    e Zd ZdZdZdZdddddd	d
ZdZd Zy)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)rv   r   r   (   r   rC   c           
           j                  |      }i }g }t        j                  d j                        D ]s  } j	                  d j                   d| d| |d|       }|j                   fd|d	   D               |s!t        |d	dd
dt        hfdt        hfdf      }|d   rs n   j                  ||fi |S )Nr   )startstepz#dj/program/byradio?asc=false&limit=z	&radioId=z&offset=zDownloading dj programs - rq   c           	   3   ~   K   | ]4  }j                  d |d    t        |d   |j                  d             6 yw)z"http://music.163.com/#/program?id=rv   r   N)r   rc  r   )r   rm  r0   s     r9   r   z6NetEaseMusicDjRadioIE._real_extract.<locals>.<genexpr>v  sG      U8?  ??4WT]ODF[w{{624 Us   :=programsradior   rY  )r   r   r	  )	r   	itertoolscount
_PAGE_SIZEr   extendr   r,   r  )r0   rx   dj_idr  entriesoffsetr   s   `      r9   r   z#NetEaseMusicDjRadioIE._real_extractl  s    s#ooADOOD 	F??5doo5FiPUwV^_e^fg8A # CD NN UCG
CSU U 'z1g$se_$*SE?H / 
 <	" $t##GU?h??r;   N)	r   r   r   r   r   r   _TESTr  r   r   r;   r9   rx  rx  ]  s;    G(GNJ5#A

  E J@r;   rx  )r(   r  r%   r]   r   r\   commonr   aesr   r   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r  r&  rF  rc  rx  r   r;   r9   <module>r     s        	  ! 0  i@ i@X[
' [
|)T, )TX)Z- )ZXBj+ BjJM
) M
`KV. KV\%@. %@r;   