
    yf\                     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                   V    e Zd Zg dZdZdZed        Zd Zi fdZ	d Z
d Zd	 ZddZy
)NetEaseMusicBaseIE)bMusicmMusichMusiczhttp://music.163.com/api/Fc                     t        | d      S )N  )scaler	   values    ?/usr/lib/python3/dist-packages/yt_dlp/extractor/neteasemusic.pykilo_or_nonezNetEaseMusicBaseIE.kilo_or_none   s    5--    c                    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	            r   _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;;r   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 pcr   _r   04)osverdeviceIdappverversioncode
mobilenamebuildver
resolution__csrfoschannel	requestIdMUSIC_Uc                     | j                   S Nr   )is    r   <lambda>z8NetEaseMusicBaseIE._download_eapi_json.<locals>.<lambda>:   s
    !'' r   z!https://interface3.music.163.com/z/eapiz/apizhttps://music.163.comz; =)RefererCookie)r;   headers)inttimerandomrandintr   _get_cookies	_API_BASE_download_jsonr   r=   joinitems)	r4   pathvideo_idr6   rZ   kwargsr7   kvs	            r   _download_eapi_jsonz&NetEaseMusicBaseIE._download_eapi_json,   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                 @    | j                  d|d| d|dd|       S )Nz/song/enhance/player/url[])idsbrz#Downloading song URL info: bitrate note)ri   )r4   song_idbitrates      r   _call_player_apiz#NetEaseMusicBaseIE._call_player_apiE   s:    ''&1WIQw1W6wi@ ( B 	Br   c                 f   d}g }|d   }| j                   D ]  }|j                  |      }|st        |j                  d            xs d}t        | j	                  ||      dd f      D ]  }|d   }	| j                  |	|d   d      rR|j                  |	|t        |d	t        hf      d
t        |dt        hfd| j                  hfdt        hfd             p|dk(  svt        |dt        hf      xs d}  |s4|dk7  r|dk  s|dk\  rt        d| dd      | j                  ddg       |S )Nr   idrr   iX> r;   c                     t        |d         S )Nurl)r   )rE   rh   s     r   rV   z4NetEaseMusicBaseIE.extract_formats.<locals>.<lambda>S   s    dopqrwpxdy r   rw   songsr)rw   	format_idasrtypern   size)extabrfilesizecode   i  z No media links found (site code )T)expectedz6No media links found: probably due to geo restriction.CN)	countries)_FORMATSgetr	   r   rs   _is_valid_urlappendr0   r   r[   r   raise_geo_restricted)
r4   infoerrformatsrq   song_formatdetailsrr   rx   song_urls
             r   extract_formatsz"NetEaseMusicBaseIE.extract_formatsJ   st   t*== 	CKhh{+G!'++i"89CVG$T%:%:7G%LvWyNz{ C;%%hT
FCNN'%0+Gd[M5JK	$ 't$*SE?$(4+<+<*=#>)/+(?. 		$ 	 AX&tfse_=BCC	C* axS3Y#*$'GuA%NY]^^))LY]X^ * `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   r   r9   rC   i2zLogin required to download: r   zFailed to get meta info:  )ra   r`   r   r[   r0   raise_login_requiredr   )r4   endpointre   rp   resultr   r9   s          r   	query_apizNetEaseMusicBaseIE.query_apik   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 rT   r   )rE   rh   id_keys     r   rV   z1NetEaseMusicBaseIE._get_entries.<locals>.<lambda>y   s    [634? r   zhttp://music.163.com/#/song?id=)r   r   r0   r1   dictset
url_resultNetEaseMusicIE)r4   
songs_data
entry_keysr   name_keyrx   rq   s      `   r   _get_entrieszNetEaseMusicBaseIE._get_entriesv   s       .A*sE4&=>.A?.A B 	@D $v,'G//1';^dXu,=>@ @		@s   A5A8)Nru   name)__name__
__module____qualname__r   r`   _GEO_BYPASSstaticmethodr   r=   ri   rs   r   r   r    r   r   r   r      sK    -H+IK. .	< GI 2B
B	@r   r   c                      e Zd ZdZdZdZdddddd	d
ddddigidddedddddddddddddddeddd d!d"dd#d$d%d&d'dddigid(d)ded*d+d,d-d.d/d0dd1d2d3d4d5dddigid6dd1ed7d8d9d:d;d<d=dd>d?d@dAdBdddigidCdDdedEd?d,d9dFgZdG ZdH Z	yI)Jr   znetease:songu   网易云音乐zEhttps?://(y\.)?music\.163\.com/(?:[#m]/)?song\?.*?\bid=(?P<id>[0-9]+)z)https://music.163.com/#/song?id=548648087	548648087mp3u   戒烟 (Live)ub   李荣浩 / 朱正廷 / 陈立农 / 尤长靖 / ONER灵超 / ONER木子洋 / 杨非同 / 陆定昊i HZ20180405z$md5:3650af9ee22c87e8637cb2dde22a765clyricsr~   lrc   re:^http.*\.jpgu"   偶像练习生 表演曲目合集u   偶像练习生)ru   r~   titlecreator	timestampupload_datedescription	subtitlesduration	thumbnailalbumaverage_ratingalbum_artistrw   	info_dictz
No lyrics.z%http://music.163.com/song?id=1724142417241424zOpus 28zDustin O'Halloran20080211i qGi  zPiano Solos Vol. 2)ru   r~   r   r   r   r   r   r   r   r   r   )rp   rw   r   zehttps://y.music.163.com/m/song?app_version=8.8.45&id=95670&uct2=sKnvS4+0YStsWkqsPhFijw%3D%3D&dlt=0846 95826c73ea50b1c288b22180ec9e754d95670u	   国际歌u   马备19911130i7)z$md5:1ba2f911a2b0aa398479f595224f2141i  u-   伴唱:现代人乐队 合唱:总政歌舞团u   红色摇滚u	   侯牧人)ru   r~   r   r   r   r   r   r   r   	alt_titler   r   r   r   )rw   r-   r   z'http://music.163.com/#/song?id=32102397 3e909614ce09b1ccef4a3eb20544119032102397z	Bad BloodzTaylor Swift / Kendrick Lamar20150516iiWUz$md5:21535156efb73d6d1c355f95616e285a   zTaylor Swift)ru   r~   r   r   r   r   r   r   r   r   r   r   r   Blocked outside Mainland China)rw   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!)rp   rw   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   )r;   r~   z*(\[[0-9]{2}:[0-9]{2}\.[0-9]{2,}\])([^\n]+)
c              3   h   K   | ])  \  }}t        | | j                  |d       d       + yw)rC    / delimN)r
   r   ).0r   texttranslation_ts_dicts      r   	<genexpr>z1NetEaseMusicIE._process_lyrics.<locals>.<genexpr>   sB      6	4 YKv.0C0G0G	SU0V^cdd6s   /2)lyrics_mergedr   lyrics_translated)r   r0   refindallr   rb   )r4   lyrics_infooriginal
translatedlyrics_exproriginal_ts_textsmergedr   s          @r   _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                 V   | 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 dj                  t	        |d            xs d dj                  t	        |d            xs d d|t	        |dt        hfdd| j                  hfddt        hfd| j                  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   r;   Fget_all)r   r   /))
transNamesalias.r   )artists.r   )r   r   .r   )ru   r   r   r   r   r   r   publishTimepicUrlr   score)r   r   r   r   r   r   )
	_match_idr   r   r   r   rb   r0   r   r   r	   )r4   rw   rq   r   r   r   
lyric_datas          r   _real_extractzNetEaseMusicIE._real_extract   s~   ..%~~gYhwis;WF]__fhhik &&t,%%dnnWI\2G=V'X Y
  (0Xbgh
  	 ,t5S"TU]Y]zz,t5M"NOWSW!JJ|D:['\]eae
 
 4 3%%}t7H7H6IJ%x+?'$*;*;)<=!6C51#*[M":" 
 	
r   N)
r   r   r   IE_NAMEIE_DESC
_VALID_URLr[   _TESTSr   r   r   r   r   r   r      sx   GGYJ:${#%A"eU^$45+9!-
$ 6+%#+)0!
" w1 %"A"eU^$45H+!#'
( 91 6%#A"eU^$45+ !*
 1%( '82%%#A"eU^$451+!*
  1'O[Fz
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   网易云音乐 - 专辑z6https?://music\.163\.com/(#/)?album\?id=(?P<id>[0-9]+)z*https://music.163.com/#/album?id=133153666	133153666u   桃几的翻唱20210913u   桃几2021年翻唱合集r   )ru   r   r   r   r      rw   r   playlist_mincountz&http://music.163.com/#/album?id=220780220780zB'Day20060904z$md5:71a74e1d8f392d88cf1bbe48879ad0b0   )rw   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     r   r   z4NetEaseMusicAlbumIE._real_extract.<locals>.<genexpr>@  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   )r4   rw   album_idwebpager   r  s         r   r   z!NetEaseMusicAlbumIE._real_extract6  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   r   r   r     sb    G(GJJ;&%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   网易云音乐 - 歌手z7https?://music\.163\.com/(#/)?artist\?id=(?P<id>[0-9]+)zSinger has aliases.z&http://music.163.com/#/artist?id=1055910559u!   张惠妹 - aMEI;阿妹;阿密特)ru   r   2   rp   rw   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 dataro   artistr   )trans)r   .r   ;z - r   hotSongs)r   r   r
   r   r0   r  r   )r4   rw   	singer_idr   r   s        r   r   z"NetEaseMusicSingerIE._real_extractf  s    NN3'	~~i[YK0)B[  ] &3%89<x9RUXTY.Z[gcfg
 ##D$5$5dJ$GTXYYr   Nr  r   r   r   r  r  H  ss    G(GKJ%78
  .8,
  89?
 !F4Zr   r  c                   x    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Zd! Zy")#NetEaseMusicListIEznetease:playlistu   网易云音乐 - 歌单zLhttps?://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})ru   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   榜单u   Billboard公告牌48171d   r  z2http://music.163.com/#/discover/toplist?id=37330033733003u8   re:韩国Melon排行榜周榜 [0-9]{4}-[0-9]{2}-[0-9]{2}z$md5:73ec782a612711cadc7872d9c1e134fcru   r   r   r  r   )rp   rw   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| j
                  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)ru   tnszDownloading playlist inforo   playlistr   r   r+  .r   nicknameuserId
updateTime)r   r   r+  r,  r-  r   )r:  specialType
   r   r   r   z%Y-%m-%d)r:  tracks)
r   ri   r   r0   r   r   r   r   r  r   )r4   rw   list_idr   r  s        r   r   z NetEaseMusicListIE._real_extract  s
   ..%''!7E<, ( .
  zse_)C51S3%("J6%x+?&):):(;<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   r   r'  r'  t  s     G(G`J<-AJ&%&	
   (BG52,"&	
  (COA

 0
7%FNjr   r'  c                   b    e Zd ZdZdZdZdddddd	d
ddeeedddddddddddeeeddgZd Zy)NetEaseMusicMvIEz
netease:mvu   网易云音乐 - MVz3https?://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  )ru   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   c                    | j                  |      }| j                  d| d|d      d   }|d   j                         D cg c]  \  }}|d| dt        |      d }}}||d	t	        |d
t
        hfdt
        hd hfdt
        hfdt        hfdt        hfd| j                  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 infor;   brsrF  p)rw   r~   rz   height)ru   r   r   )desc	briefDescc                     | xs d S rT   r   )xs    r   rV   z0NetEaseMusicMvIE._real_extract.<locals>.<lambda>  s
    d r   
artistNamer   coverr   	playCount	likeCountcommentCount)	r   r   r   r   r   r   rI  rJ  rK  Fr   )	r   r   rc   r	   r   r0   r   r   r   )r4   rw   mv_idr   rP  mv_urlr   s          r   r   zNetEaseMusicMvIE._real_extract  s   s#~~E7),e5JLLRT
  $E{002
V 5#ayKX[L\]
 
 
 4 3% 5u?R>ST(3%0 -/@A%}5'$*;*;)<=*[M:*[M:"0;-!@
" 

 	

s   CNrB  r   r   r   rD  rD    s|    G$GGJ7#A"%* 
  53>"%* 
F@
r   rD  c                   ~    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idgZd  Zy!)"NetEaseMusicProgramIEznetease:programu   网易云音乐 - 电台节目z8https?://music\.163\.com/(#/?)program\?id=(?P<id>[0-9]+)z*http://music.163.com/#/program?id=1010905532593346r   u   不丹足球背后的故事u   喜马拉雅人的足球梦 ...u   大话西藏i{U20150613rH  i  )	ru   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)ru   r   r   r   r   r   r      r  32647209iP  
noplaylistT)rp   rw   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
| j
                  hfd      }| j                  |d   xr ||d   d         sC| j                  |d         }t        |d   d         |t        |dd| j
                  hf      d|S t        |d      } | j                  | j                  |      |fi |S )Nzdj/program/detail?id=zDownloading program inforo   programr   r   djbrandcoverUrl
createTime)r   r   r   r   r   r   mainSongru   r   )ru   r   r   ))rn  )r   .)
r   r   r   r0   r   r   _yes_playlistr   r  r   )r4   rw   
program_idr   r  r   r   s          r   r   z#NetEaseMusicProgramIE._real_extract&  s=   ^^C(
~~#J<0*C]  __hj  se_)C51gu-${m4&):):(;<'
  !!$w-">JZ@PQU@VW**4
+;<G $z*401"(
JIZIZH[/\] 	  T#BC#t##D$5$5e$<jUHUUr   Nr  r   r   r   r_  r_    s    G.GLJ;2<%#%*

 7;2A(#%*
  7;2A(#%*

 $
5+FZVr   r_  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   网易云音乐 - 电台z8https?://music\.163\.com/(#/)?djradio\?id=(?P<id>[0-9]+)z$http://music.163.com/#/djradio?id=4242u   声音蔓延z$md5:c7381ebd7989f9f367668a5aee7d5f08r3  (   r   r   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 - ro   c           	   3   ~   K   | ]4  }j                  d |d    t        |d   |j                  d             6 yw)z"http://music.163.com/#/program?id=ru   r   N)r   r_  r   )r   ri  r4   s     r   r   z6NetEaseMusicDjRadioIE._real_extract.<locals>.<genexpr>[  sG      U8?  ??4WT]ODF[w{{624 Us   :=programsradior   rS  )r   r   r
  )	r   	itertoolscount
_PAGE_SIZEr   extendr   r0   r  )r4   rw   dj_idr  entriesoffsetr   s   `      r   r   z#NetEaseMusicDjRadioIE._real_extractQ  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   r   rr  rr  B  s;    G(GLJ5#A

  E J@r   rr  )r,   r{  r)   r]   r   r\   commonr   aesr   r   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r  r'  rD  r_  rr  r   r   r   <module>r     s        	  ! 0  e@ e@PY
' Y
x)T, )TX)Z- )ZX>j+ >jB=
) =
@JV. JVZ%@. %@r   