
    V|h_b                     0   S SK r S SKrS SKrS SKrS SKrS SKrSSKJr  SSKJ	r	J
r
  SSKJrJrJrJrJrJrJrJrJrJr   " S S\5      r " S	 S
\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)    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                   J    \ rS rSrSrSrS r0 4S jrS rS r	S r
SS
 jrSrg	)NetEaseMusicBaseIE   )standardhigherexhighlosslesshiresjyeffectjymasterskyzhttp://music.163.com/api/c                    [         R                  " 0 UESU0ESS9nSU SU S3R                  S5      n[        R                  " U5      R                  5       n[        [        [        R                  U SU SU 35      5      5      n[        [        U[        S	5      5      5      nS
UR                  5       R                  5        3R                  5       $ )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	            W/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/neteasemusic.py_create_eapi_cipher&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                 4   SSSSSSSSSS[        [        R                  " 5       S-  5       S	[        R                  " S
S5      S 3S.[	        U R                  U R                  5      SSS 1405      EnU R                  (       a  UR                  SU R                  5        U R                  " [        SSU 35      U4U R                  SU 3X65      SSR                  UR                  5        VVs/ s H  u  pxU SU 3PM     snn5      S.UES.UD6$ s  snnf )N	undefinedz8.0.0140
1623435496	1920x1080 pc  _r   04)osverdeviceIdappverversioncode
mobilenamebuildver
resolution__csrfoschannel	requestIdMUSIC_Uc                     U R                   $ N)value)is    r:   <lambda>8NetEaseMusicBaseIE._download_eapi_json.<locals>.<lambda>?   s    !''r=   z	X-Real-IPz!https://interface3.music.163.com/z/eapiz/apizhttps://music.163.comz; =)RefererCookie)r8   headers)inttimerandomrandintr   _get_cookies	_API_BASE_x_forwarded_for_ip
setdefault_download_jsonr   r;   joinitems)	r1   pathvideo_idr3   r]   kwargsr4   kvs	            r:   _download_eapi_json&NetEaseMusicBaseIE._download_eapi_json1   s:    # %$%"		d 234AfnnQ6Mb5QR
 4,,T^^<I(9':;? 
  ##{D,D,DE""75H())D-M2))GMMO$LODAs!A3ZO$LMX X  	 %Ms   0Dc                 <    U R                  SUSU S3USS.SU 3S9$ )Nz/song/enhance/player/url/v1[]flac)idslevel
encodeTypez!Downloading song URL info: level note)rn   )r1   song_idru   s      r:   _call_player_api#NetEaseMusicBaseIE._call_player_apiL   s;    '')7yNU&I4UG< ( > 	>r=   c                    / nUS   nU R                    H  n[        U R                  X45      SS [        45      nU(       d    OtUR	                  S5      nU(       a  Xd:w  a
  US;   a    OOMV  UR                  US   USS.[        US	[        14S
[        SS914S[        14S.5      E5        U(       a  M    O   U(       d  U R                  SS/S9  U$ )Nidr8   c                     [        US   5      $ )Nurl)r   )rF   rm   s     r:   rX   5NetEaseMusicBaseIE._extract_formats.<locals>.<lambda>W   s    [YZ[`YaMbr=   ru   )r   r   r   none)r   	format_idvcodectypebrrE   scalesize)extabrfilesizez5No media links found; possibly due to geo restrictionCN)	countries)	_LEVELSr   rz   anygetappendr-   r	   raise_geo_restricted)r1   infoformatsry   ru   songactual_levels          r:   _extract_formats#NetEaseMusicBaseIE._extract_formatsR   s    t*\\E%%g5@bdg7hjD88G,L 544NNE{" 	 t"SE? ;T#:";<!'+ 7& 		 	  <+ ", %%GTXSY & [r=   c                     U R                  U R                   U 3X#SU R                  0S9n[        US[        145      n[        US[        145      =(       d    SnUS:X  a  U R                  SU 35        U$ US:w  a  [        S	U S
U 35      eU$ )Nr[   )r]   coder6   rC   i2zLogin required to download:    zFailed to get meta info:  )rf   rc   r   r^   r-   raise_login_requiredr   )r1   endpointrj   rx   resultr   r6   s          r:   
_query_apiNetEaseMusicBaseIE._query_apip   s    $$~~xj)8It~~C^ % `FVcUO4v	C5'9:@b4<%%(DWI&NO  S[ #<TF!G9!MNNr=   Nc              #      ^#    [        U/ [        U[        [        [        [
        45      QU4S jP75       H>  n[        UT   5      nU R                  SU 3[        U[        XT[        145      5      v   M@     g 7f)Nc                 $   > [        UT   5      S L$ rU   )r	   )rF   rm   id_keys     r:   rX   1NetEaseMusicBaseIE._get_entries.<locals>.<lambda>~   s    [634?r=   zhttp://music.163.com/#/song?id=)r   r   r-   r.   dictset
url_resultNetEaseMusicIE)r1   
songs_data
entry_keysr   name_keyr   ry   s      `   r:   _get_entriesNetEaseMusicBaseIE._get_entries{   s       .A*sE4&=>.A?.A BD $v,'G//1';^du,=>@ @	Bs   A7A: )Nr}   name)__name__
__module____qualname____firstlineno__r   rc   r;   rn   rz   r   r   r   __static_attributes__r   r=   r:   r   r      s6    	G ,I	< GI 6><	@r=   r   c                   ,   \ rS rSrSrSrSrSSSSS	S
SSSSS\S/S.S.SSSSSSSSSS\SS/S/SSS0/0S.S.S S!S"SS#S$S%S&SSS0/0S'S(S\S)S*S+/S*/S,.S-.S.S/S0SS1S2S3/S4S5S6SSS0/0S7SS1\S2S8.S9S:.S;S<S=SS>S?/S@SASBSSS0/0SCSDS\SES?SF.S9SG./rSH r	SI r
SJrgK)Lr      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   偶像练习生)r}   r   titlecreators	timestampupload_datedescriptionduration	thumbnailalbumaverage_ratingalbum_artistsr   	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)r}   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   马备)r}   r   r   r   r   r   r   r   	alt_titler   r   r   r   r   r   )r   r*   r   z'http://music.163.com/#/song?id=32102397 3e909614ce09b1ccef4a3eb20544119032102397z	Bad BloodzTaylor SwiftzKendrick Lamar20150516iiWUz$md5:21535156efb73d6d1c355f95616e285a   )r}   r   r   r   r   r   r   r   r   r   r   r   r   Blocked outside Mainland China)r   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!)r}   r   r   r   r   r   r   r   r   r   r   r   r   r   )rx   r   r   r   c                 V  ^ [        USS[        145      n[        USS[        145      nU(       a  US:X  a  g U(       d  SUSS./0$ Sn[        R                  " XB5      n[	        [        R                  " XC5      5      mSR                  U4S	 jU 5       5      nUSS./USS./USS./S
.$ )Nr   lyrictlyricu    [99:00.00]纯音乐，请欣赏
r   )r8   r   z*(\[[0-9]{2}:[0-9]{2}\.[0-9]{2,}\])([^\n]+)
c              3   f   >#    U  H&  u  p[        U U 3TR                  US 5      SS9v   M(     g7f)rC   z / delimN)r
   r   ).0r   texttranslation_ts_dicts      r:   	<genexpr>1NetEaseMusicIE._process_lyrics.<locals>.<genexpr>   s<      6#4	 YKv.0C0G0G	SU0V^cd#4s   .1)lyrics_mergedr   lyrics_translated)r   r-   refindallr   rg   )r1   lyrics_infooriginal
translatedlyrics_exproriginal_ts_textsmergedr   s          @r:   _process_lyricsNetEaseMusicIE._process_lyrics   s    eWse-DE!+'C5/IJ
8'JJHU;<  DJJ{="2::k#FG 6#46 6
 (.e<= (78+5e"D!E
 	
r=   c                 0   U R                  U5      nU R                  SU SU S3US5      S   S   nU R                  U5      nU R                  U R                  SU S3US	5      5      nU(       a  [	        US
SS9US.O0 nUUSR                  [	        US5      5      =(       d    S [	        US5      =(       d    S [	        US5      =(       d    S S.UE[	        US[        14SS[        SS914SS[        14S[        SS914SS[        14S[        14S.5      E$ )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   r8   Fget_all)r   r   /))
transNamesalias.artists.r   )r   r   .r   )r}   r   r   r   r   r   r   publishTimerE   r   picUrlr   score)r   r   r   r   r   r   )		_match_idr   r   r   r   rg   r-   r	   r   )r1   r   ry   r   r   r   
lyric_datas          r:   _real_extract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=   r   N)r   r   r   r   IE_NAMEIE_DESC
_VALID_URLr^   _TESTSr   r  r   r   r=   r:   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                   V    \ rS rSrSrSrSrSSSSS	S
S.SS.SSSSSS
S.SS./rS rSr	g)NetEaseMusicAlbumIEi#  znetease:albumu   网易云音乐 - 专辑z8https?://music\.163\.com/(?:#/)?album\?id=(?P<id>[0-9]+)z*https://music.163.com/#/album?id=133153666	133153666u   桃几的翻唱20210913u   桃几2021年翻唱合集r   )r}   r   r   r   r      r   r   playlist_mincountz&http://music.163.com/#/album?id=220780220780zB'Day20060904z$md5:71a74e1d8f392d88cf1bbe48879ad0b0   )r   r   playlist_countc                    U R                  U5      nU R                  SU 3U5      nU R                  SUSUSSS9nU R                  SUSSS	9U R	                  S
 S 5       US[
        R                  SS9U R                  SUSSS	9[        U R                  SUSSS	95      S.nU R                  " U R                  U5      U40 UD6$ )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   .   #    U  H  nS U S3v   M     g7f)z<div[^>]+\bid="album-desc-z"[^>]*>(.*?)</div>Nr   )r   suffixs     r:   r   4NetEaseMusicAlbumIE._real_extract.<locals>.<genexpr>G  s     hXgf.vh6HIXgs   )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   )r1   r   album_idwebpager   r  s         r:   r  !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
 ##D$5$5e$<hS(SSr=   r   N
r   r   r   r   r  r  r  r  r  r   r   r=   r:   r	  r	  #  sb    G(GLJ;&%6+
  
 8%A+
 
F,Tr=   r	  c                   `    \ rS rSrSrSrSrSSSSS	.S
S.SSSSS	.S
S.SSSSS	.S
S./rS rSr	g)NetEaseMusicSingerIEiO  z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;阿妹;阿密特)r}   r   2   rx   r   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                    U R                  U5      nU R                  SU SU 3USS9n[        [        USS[        145      [        [        USS[        145      SS	06S
S9nU R                  U R                  US5      X$5      $ )Nzartist/z?id=zDownloading singer datarw   artistr   )trans)r   .r   ;z - r   hotSongs)r   r   r
   r   r-   r&  r   )r1   r   	singer_idr   r   s        r:   r  "NetEaseMusicSingerIE._real_extractm  s    NN3'	i[YK0)B[  ] &3%89<x9RUXTY.Z[gcfg
 ##D$5$5dJ$GYYr=   r   Nr*  r   r=   r:   r,  r,  O  ss    G(GMJ%78
  .8,
  89?
 !F4Zr=   r,  c                       \ rS rSrSrSrSrSSSSS	/S
S\SS.SS.SSSSS/ SQSS\SS.SS.SSSSSSSS S!/S"S#S$.S%S./rS& r	S'r
g())NetEaseMusicListIEi{  z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})r}   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   韩语rC  u   Melon榜单i^)r}   r   r   r   r@  r>  r?  r   r.  c                    U R                  U5      nU R                  SUUSSSS.SS9n[        USS	[        14S
[        14SS[        14SS[        14SS[        14S[        SS914S.45      n[        US5      S:X  a2  UR                  S5       S[        UR                  S5      S5       3US'   U R                  " U R                  US5      U40 UD6$ )Nz/v3/playlist/detailz-15000)r}   tnszDownloading playlist inforw   playlistr   r   r>  .creatornicknameuserId
updateTimerE   r   )r   r   r>  r?  r@  r   )rO  specialType
   r   r   r   z%Y-%m-%d)rO  tracks)
r   rn   r   r-   r   r	   r   r   r&  r   )r1   r   list_idr   r  s        r:   r   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##D$5$5d<R$SU\i`hiir=   r   Nr   r   r   r   r  r  r  r^   r  r  r   r   r=   r:   r:  r:  {  s     G(GdJ<-AJ&%&	
   (BG52,"&	
  (CTA%$x(%#	
 7)FVjr=   r:  c                       \ rS rSrSrSrSrSSSSS	S
/SSS\\\S.S.SSSSSS/SSS\\\S.SS.SSSSS/ SQSS\\S\S .
S!./rS" r	S#r
g$)%NetEaseMusicMvIEi  z
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  )r}   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   )r   r   r   zThis MV has multiple creators.z&https://music.163.com/#/mv?id=2259354322593543u   老北京杀器)u   秃子2zu   辉子u   Saber梁维嘉   20240618)
r}   r   r   r   r   r   ra  rb  r   r`  )rx   r   r   c                    U R                  U5      nU R                  SU S3US5      S   nUS   R                  5        VVs/ s H  u  pEUSU S3[        U5      S.PM     nnnUU[	        US	5      =(       d    UR                  S
5      /S.[	        US[        14S[        1[        4S[        14S[        14S[        SS914S[        14S[        14S[        14S.SS9E$ s  snnf )Nzmv/detail?id=z	&type=mp4zDownloading mv infor8   brsr]  p)r   r   r   heightr   
artistName)r}   r   r   r   )desc	briefDescr   coverr   rE   r   	playCount	likeCountcommentCount)r   r   r   r   r   r`  ra  rb  Fr   )
r   r   rh   r	   r   r   r-   filterr   r   )r1   r   mv_idr   rj  mv_urlr   s          r:   r  NetEaseMusicMvIE._real_extract  s&   s#E7),e5JLLRT
  $E{002
2 5#ayKX[L\]2 	 
 $T+CD`R^I_H`
 4 3% 5ufE -/@A%}5'+D*A)BC*[M:*[M:"0;-!@	" 		
 	

s   C!r   NrY  r   r=   r:   r[  r[    s    G$GIJ7#A$%* 
  53>$%* 
 1" 17&@% *
?.F`
r=   r[  c                       \ rS rSrSrSrSrSSSSS	S
/SSSSS.	S.SSSSSS/SSSS.SS.SSSSSSS/SSSSS.	SS0S ./rS! rS"r	g#)$NetEaseMusicProgramIEi  z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20150613r_  i  )	r}   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)r}   r   r   r   r   r   r      r/  32647209iP  
noplaylistT)rx   r   r   paramsc                    U R                  U5      nU R                  SU 3USS9S   n[        US[        14S[        14SS[        14S	[        14S
[        SS914S.5      nU R                  US   =(       a    UUS   S   SSS9(       d@  U R                  US   5      n[        US   S   5      U[        USS[        SS9145      S.UE$ [        US5      nU R                  " U R                  U5      U40 UD6$ )Nzdj/program/detail?id=zDownloading program inforw   programr   r   djbrandcoverUrl
createTimerE   r   )r   r   rP  r   r   r   mainSongr}   r   )playlist_labelvideo_labelr   )r}   r   r   ))r  )r   .)
r   r   r   r-   r   r	   _yes_playlistr   r&  r   )r1   r   
program_idr   r  r   r   s          r:   r  #NetEaseMusicProgramIE._real_extractA  sH   ^^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##D$5$5e$<jUHUUr=   r   Nr*  r   r=   r:   ry  ry    s    G.GNJ;2<'(#%*

 7;2A*+#%*
  7;2A*+#%*

 $
5+FZVr=   ry  c                   >    \ rS rSrSrSrSrSSSSS	.S
S.rSrS r	Sr
g)NetEaseMusicDjRadioIEi^  z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)r}   r   r   (   r  rE   c           
        ^  T R                  U5      n0 n/ n[        R                  " ST R                  S9 H|  nT R	                  ST R                   SU SU 3USU 3S9nUR                  U 4S jUS	    5       5        U(       d!  [        US	SS
S[        14S[        14S.45      nUS   (       a  M|    O   T R                  " XB40 UD6$ )Nr   )startstepz#dj/program/byradio?asc=false&limit=z	&radioId=z&offset=zDownloading dj programs - rw   c           	   3      >#    U  H5  nTR                  S US    3[        US   UR                  S5      5      v   M7     g7f)z"http://music.163.com/#/program?id=r}   r   N)r   ry  r   )r   r  r1   s     r:   r   6NetEaseMusicDjRadioIE._real_extract.<locals>.<genexpr>w  sJ      UCS  ??4WT]ODF[w{{624 4CSs   =A programsradior   rn  )r   r   r  )	r   	itertoolscount
_PAGE_SIZEr   extendr   r-   r&  )r1   r   dj_idr  entriesoffsetr   s   `      r:   r  #NetEaseMusicDjRadioIE._real_extractm  s    s#ooADOODF??5doo5FiPUwV^_e^fg8A # CD NN UCG
CSU U 'z1g$se_$*SE?H / 
 << E" ##G?h??r=   r   N)r   r   r   r   r  r  r  _TESTr  r  r   r   r=   r:   r  r  ^  s;    G(GNJ5#A

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