
    Ği{K                     N   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	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dS )    N   )InfoExtractor   )ExtractorErrorOnDemandPagedList
clean_htmlint_or_nonejoin_nonempty
js_to_jsonstr_or_nonestrip_jsonptraverse_objurl_or_noneurljoinc                   `    e Zd Zd
dZd Zd Zed             Zed             Z	ddZ
i fd	ZdS )QQMusicBaseIENc                 p    t          |                     d                              |          d|          S )Nzhttps://y.qq.comvalue)getattr_get_cookiesget)selfkeydefaults      ]C:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/extractor/qqmusic.py_get_cookiezQQMusicBaseIE._get_cookie   s2    t(();<<@@EEwPWXXX    c                 r    d}|                      dd          D ]}||dz  t          |          z   z  }|dz  S )Ni  qqmusic_key    )r   ord)r   ncs      r   	_get_g_tkzQQMusicBaseIE._get_g_tk   sK    !!-44 	# 	#A!q&CFF""AA:~r   c                 J    t          |                     d                    pdS )Nuinr   )r	   r   r   s    r   _get_uinzQQMusicBaseIE._get_uin!   s#    4++E22338q8r   c                 n    t          |                                 o|                     d                    S )N	fqm_pvqid)boolr*   r   r)   s    r   is_logged_inzQQMusicBaseIE.is_logged_in$   s+    DMMOOE(8(8(E(EFFFr   c                      t          t          j                    dz            dz  } t          t          t          j                    dz            | z  dz            S )Ni  r"   g    _B)inttimeroundrandom)cur_mss    r   _m_r_get_ruinzQQMusicBaseIE._m_r_get_ruin*   sJ    TY[[4'((4/5:566?$FGGGr   Tc                 r    |                      |||          }|                     d|d|t          |          S )Nfatalzwindow\.__INITIAL_DATA__\s*=z	init data)transform_sourcer8   )_download_webpage_search_jsonr   )r   urlmidr8   webpages        r   _download_init_dataz!QQMusicBaseIE._download_init_data/   sK    ((c(??  !@'!,cJV[ ! ] ] 	]r   c                      | j         d|ft          j        dddd|                                 di|d                                          |d	|S )
Nz%https://u.y.qq.com/cgi-bin/musicu.fcgcommr      json)cvctformatr(   ),:)
separators)dataheaders)_download_jsonrC   dumpsr*   encode)r   req_dictr=   rK   kwargss        r   _make_fcu_reqzQQMusicBaseIE._make_fcu_req4   s    "t"3S	K?Cz$==??	 K K %@& @& @& '-fhh	K 	K DJ	K 	K 		Kr   )N)T)__name__
__module____qualname__r   r&   r*   propertyr.   staticmethodr5   r?   rQ    r   r   r   r      s        Y Y Y Y  9 9 9 G G XG
 H H \H] ] ] ]
 46 
K 
K 
K 
K 
K 
Kr   r   c                      e Zd ZdZdZdZdddddd	d
dddgdgdddddddddddddddgdgddd
dd d!d"d#d$dd%d&d'd(d)gg d*d+dd,d-d.d/d0dd1d2d3d4dd5d6d7id8d9gZd:d;d:d<d=d>d?d>d@d=dAdBddCdDdEdFdGddHdIdEdJdKdLdMdNdEdOdPdLdMdQdEdRZdS ZdTS )U	QQMusicIEqqmusicu   QQ音乐z:https?://y\.qq\.com/n/ryqq/songDetail/(?P<id>[0-9A-Za-z]+)z1https://y.qq.com/n/ryqq/songDetail/004Ti8rT003TaZ d7adc5c438d12e2cb648cca81593fd47004Ti8rT003TaZmp3u'   永夜のパレード (永夜的游行)u    幻想遊園郷 -Fantastic Park-20111230i  u   ケーキ姫JUMAPopz$md5:b5261f3d595657ae561e9e6aee7eb7d9iD re:^https?://.*\.jpg(?:$|[#?])zcount:1)idexttitlealbumrelease_datedurationcreatorsgenresdescriptionsize	thumbnail	subtitles)r<   md5	info_dictz1https://y.qq.com/n/ryqq/songDetail/004295Et37taLD 5f1e6cea39e182857da7ffc5ef5e6bb8004295Et37taLDu   可惜没如果u!   新地球 - 人 (Special Edition)20150129i*  	   林俊杰z$md5:f568421ff618d2066e74b65a04149c4e)
rb   rc   rd   re   rf   rg   rh   ri   rj   rl   zpremium member only)r<   rn   ro   skipz)There is no mp3-320 version of this song.z1https://y.qq.com/n/ryqq/songDetail/004MsGEo3DdNxV 028aaef1ae13d8a9f4861a92614887f9004MsGEo3DdNxVu   如果u&   新传媒电视连续剧金曲系列II20050626   u	   李季美z$md5:fc711212aa623b28534954dc4bd67385ir5 rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   )noter<   rn   ro   zlyrics not in .lrc formatz1https://y.qq.com/n/ryqq/songDetail/001JyApY11tIp6001JyApY11tIp6zShadows Over Transylvania19970225zDark Funeralz$md5:c9b20210587cbcd6836a1c597bab4525)rb   rc   rd   rf   creatorrj   rl   skip_downloadTzno longer available)rz   r<   ro   paramsrt   flacF000<   )nameprefixrc   
preferenceapeA0002   320mp3M800(   i@  )r   r   rc   r   abr128mp3M500      96aacC400m4a   `   48aacC2000   )r   r   r   r   r   r   c                 "   |                      |          |                     |d          }|                     ddddddid	
          d         d         d         }|d         d         |                     ddt          |                                           gt          | j                  z  dgt          | j                  z  t          |                                           ddfd| j                                        D             dddddiddd| 	                                          }t          |ddt          hf          }|dk    rt          d|pd           g }t          |dddfd f          D ]}t          |d!t          hd" hf          }| j                            |          pi }	|	                    d#          }
|                    t          d$|d%                   |
|
t          |dd&|
 t           hf          |	                    d'          |	                    d(          |	                    d)          d*d+           |s| j        s|                                  t          |d,          r$|                     d-|d.         d                    t          |d.dd/d0 hf          }|d1t          |d2t          hfd3d2t          ht(          fd4d5 hfd6d7d#t          hfd8t          ht(          fd9t           hfd:          t          |d;d<t*          hfdd=d>d7d?t          hfdd@d>d7d?t          ht,          fdAfdB          }|r3dCdD|dEgi|dF<   t/          |                    dG          |dHI          |dG<   |S )JNFr7   infozmusic.pf_song_detail_svrget_song_detail_yqqr   )song_mid	song_typemodulemethodparamzDownloading song inforz   rJ   
track_infofile	media_midzvkey.GetVkeyServer
CgiGetVkeyr   20c                 :    g | ]}|d            d|d          S )r   .rc   rW   ).0fr   s     r   
<listcomp>z+QQMusicIE._real_extract.<locals>.<listcomp>   s4     h h hAAhK!G!G!GQuX!G!G h h hr   )guidsongmidsongtyper(   	loginflagplatformfilenamez!music.musichallSong.PlayLyricInfoGetPlayLyricInfosongMID)req_1req_2zDownloading formats and lyric)rz   rK   r   codez+Failed to download format info, error code unknown
midurlinfoc                 ,    |d         k    o|d         S )Nr   purlrW   )_vr=   s     r   <lambda>z)QQMusicIE._real_extract.<locals>.<lambda>   s    )8K8YPQRXPY r   r   c                     | d d         S )N   rW   xs    r   r   z)QQMusicIE._real_extract.<locals>.<lambda>   s    QRSUTUSUQV r   r   z https://dl.stream.qqmusic.qq.comr   size_r   r   rc   none)r<   rF   	format_idrk   qualityr   rc   vcodec)r   r   z Failed to download lyric, error r   lyricc                 P    t          j        |                               d          S )Nzutf-8)base64	b64decodedecoder   s    r   r   z)QQMusicIE._real_extract.<locals>.<lambda>   s!    vO_`aObObOiOijqOrOr r   rb   formatsrd   re   time_publicc                 2    |                      dd          pd S )N-r    )replacer   s    r   r   z)QQMusicIE._real_extract.<locals>.<lambda>   s    199S";M;M;UQU r   singer.subtitleinterval)rd   re   rf   rh   	alt_titlerg   detailpicurlintrocontentr   genre)rl   rj   ri   )get_alloriginlrc)rc   rJ   rm   rj   
delim)	_match_idr?   rQ   strr5   len_FORMATSr*   valuesgeo_verification_headersr   r0   r   r   appendr   r	   r.   raise_login_requiredreport_warningfilterr   allr
   )r   r<   	init_data	info_datarJ   r   r   
media_info
format_keyformat_infor   lrc_contentro   r   r=   s                @@r   _real_extractzQQMusicIE._real_extract   s   nnS!!,,S#U,CC	&&0+ 1
 1
 ( - ' / / 067 8>? @LM	 f%k2	!!.& 2 2 4 455 #us4='9'99!"c$-&8&8 8t}}//!" $ h h h hQUQ^QeQeQgQg h h h   >,#S) #
 #
& 4d>[>[>]>]' " _ _* D7FSE":;;199 !btO`W`!b!bccc&tV\+Y+Y+Y+Y.[ 
 
 	 	J &j:uFW2XYYJ-++J77=2K#//INNA:fCUVV#&$Y9L9L9L{m0\]]&??<88"u--"u-- 	 	 	 	 	 	  	(t0 	(%%'''/00 	^ \4=QWCX \ \]]]"4'67ErErDs)tuu 
 
 9!C5)!7SE6:!.1U1U0V W%sFSE:(3%8'+7' '  
 9x&6 &C3%P!7IsGcUCP2 2 ' 	  
	"  	l&.1T1T0U%VIk"'4Y]]=5Q5QS^fj'k'k'kIm$r   N)	rR   rS   rT   IE_NAMEIE_DESC
_VALID_URL_TESTSr   r   rW   r   r   rY   rY   A   s       GGNJB1">7&'0gA:"
 
 $ C1"&8&$gA:
 
 & " <B1"=&$A:
 
	 $ ,B"0&%A:
 
 #D)% e@FF  6&PRSS&bQQ!VEQS\_``!VEQS\_`` F5PR[]^^ F5PR[]^^ HT T T T Tr   rY   c                   z    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gdgddddigdgZdZd Zd Z	d S )!QQMusicSingerIEzqqmusic:singeru   QQ音乐 - 歌手z6https?://y\.qq\.com/n/ryqq/singer/(?P<id>[0-9A-Za-z]+)z-https://y.qq.com/n/ryqq/singer/001BLpXF2DyJe2001BLpXF2DyJe2rs   z$md5:10624ce73b06fa400bc846f59b0305fara   )rb   rd   rj   rl   d   )r<   ro   playlist_mincountz-https://y.qq.com/n/ryqq/singer/000Q00f213YzNV000Q00f213YzNVu	   桃几OvOu5   小破站小唱见~希望大家喜欢听我唱歌~！   ro   0016cvsy02mmClr]   u   群青u   桃几2021年翻唱集20210913   r`   z$md5:4296005a04edcb5cdbe0889d5055a7aei< ry   )r<   ro   playlist_countplaylistr   c           
   #       K                         dddd|||z  |ddi|d|           }t          |dd	d
d fdhf          E d {V  d S )Nr   zmusic.web_singer_info_svrget_singer_detail_infor!   )sort	singermidsinnumr   zDownloading page r   rJ   songlist.c                                          d| d          t          | d         |                     d                    S )N#https://y.qq.com/n/ryqq/songDetail/r=   rd   )
url_resultrY   r   )r   r   s    r   r   z-QQMusicSingerIE._fetch_page.<locals>.<lambda>  sE    TXTcTc<!E(<<i5STSXSXY`SaSaUc Uc r   )rQ   r   )r   r=   	page_sizepage_numrJ   s   `    r   _fetch_pagezQQMusicSingerIE._fetch_page  s      !!71. )+ 	 - - # 9x99 " ; ;  w
C Kc Kc Kc Kc Jd 'e f f 	f 	f 	f 	f 	f 	f 	f 	f 	fr   c                 :   |                      |          }|                     ||d          } | j        t          t	          j        | j        || j                  | j                  |fi t          |dddt          hfddt          hfddt          hfd	f          S )
NFr7   singerDetail
basic_infor   ex_infodescpic)rd   rj   rl   )r   r?   playlist_resultr   	functoolspartialr  
_PAGE_SIZEr   r   r   )r   r<   r=   r   s       r   r   zQQMusicSingerIE._real_extract  s    nnS!!,,S#U,CC	#t#i/0@#tWWY]Yhii 	N&6 )6C59#U[M:= = ,    	r   N)
rR   rS   rT   r   r   r   r   r  r  r   rW   r   r   r   r      s        G!GJJ>" A:	
 
 !	 	 ?" R:	
 
 &!1 *(M 'E> 
  !FF Jf f f
 
 
 
 
r   r   c                       e Zd Zd ZdS )QQPlaylistBaseIEc           	   #      K   t          ||          D ]O}|                    d          }|s|                     d| t          ||                    d                    V  Pd S )Nr   r  songname)r   r   r  rY   )r   	info_jsonpathsongr   s        r   _extract_entriesz!QQPlaylistBaseIE._extract_entries+  s       D11 	; 	;Dxx	**H //@h@@8TXXj%9%9; ; ; ; ; ;		; 	;r   N)rR   rS   rT   r"  rW   r   r   r  r  *  s#        ; ; ; ; ;r   r  c                   H    e Zd ZdZdZdZdddddd	d
ddddddd
gZd ZdS )QQMusicAlbumIEzqqmusic:albumu   QQ音乐 - 专辑z;https?://y\.qq\.com/n/ryqq/albumDetail/(?P<id>[0-9A-Za-z]+)z2https://y.qq.com/n/ryqq/albumDetail/000gXCTb2AhRR1000gXCTb2AhRR1u   我们都是这样长大的z$md5:179c5dce203a5931970d306aa9607ea6rb   rd   rj   r   r<   ro   r  z2https://y.qq.com/n/ryqq/albumDetail/002Y5a3b3AlCu3002Y5a3b3AlCu3u   그리고…z$md5:a48823755615508a95080e81b51ba729   c           
         |                      |          }|                     d|d|dd          d         }|                     |d          } | j        ||fi t	          |dt
          hfd	t
          j        hfd
          S )Nz5http://i.y.qq.com/v8/fcg-bin/fcg_v8_album_info_cp.fcgzDownload album pagerC   )albummidrF   )queryrJ   )list.r   r  rd   rj   )r   rL   r"  r  r   r   strip)r   r<   r=   
album_jsonentriess        r   r   zQQMusicAlbumIE._real_extractL  s    nnS!!((C&"f55 ) 7 7 8>?

 ''
MBB#t#GS  Lse_"SYK0N
 N
 5 5   	r   NrR   rS   rT   r   r   r   r   r   rW   r   r   r$  r$  5  s        G!GOJ D"2A
 

   D"#A
 

  F$    r   r$  c                   Z    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dS )QQMusicToplistIEzqqmusic:toplistu   QQ音乐 - 排行榜z1https?://y\.qq\.com/n/ryqq/toplist/(?P<id>[0-9]+)z#https://y.qq.com/n/ryqq/toplist/123123u*   re:美国热门音乐榜 \d{4}-\d{2}-\d{2}u*   美国热门音乐榜，每周一更新。r&  _   r'  z!https://y.qq.com/n/ryqq/toplist/33u&   re:巅峰榜·欧美 \d{4}-\d{2}-\d{2}z$md5:4def03b60d3644be4c9a36f21fd33857r   z#https://y.qq.com/n/ryqq/toplist/106106u"   re:韩国Mnet榜 \d{4}-\d{2}-\d{2}z$md5:cb84b325215e1d21708c615cac82a6e7r   c           
         |                      |          }|                     d|dd|dd          }|                     |                     |d          |t	          t          |d          d	d
it          |d                    S )Nz2http://i.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcgzDownload toplist pagetoplistrC   )typetopidrF   )rz   r,  )r
  .rJ   )))topinfoListNameupdate_timeNr    )r=  r   )playlist_titleplaylist_description)r   rL   r  r"  r
   r   )r   r<   list_idtoplist_jsons       r   r   zQQMusicToplistIE._real_extract{  s    ..%%**@'($w&II + K K
 ##!!,0IJJG(,N+P +P \WZ\ \!-l<O!P!P	 $ R R 	Rr   Nr2  rW   r   r   r4  r4  \  s        G$GEJ 5BG
 

   3>A
 

   5:A
 

  !F4R R R R Rr   r4  c                   6    e Zd ZdZdZdZdddddd	d
gZd ZdS )QQMusicPlaylistIEzqqmusic:playlistu   QQ音乐 - 歌单z2https?://y\.qq\.com/n/ryqq/playlist/(?P<id>[0-9]+)z+https://y.qq.com/n/ryqq/playlist/1374105607
1374105607u   易入人心的华语民谣u   民谣的歌曲易于传唱、、歌词朗朗伤口、旋律简单温馨。属于那种才入耳孔。却上心头的感觉。没有太多的复杂情绪。简单而直接地表达乐者的情绪，就是这样的简单才易入人心。r&  r   r'  c                    |                      |          }|                     d|ddddd|dt          d|i          }t          |                    dg                     sCt          t          d	t          d
d|          |                    d          d                    |                     |d          } | j        ||fi t          |dddt          hfdt          hfdf          S )NzDhttp://i.y.qq.com/qzone-music/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcgzDownload list pager   r   )r;  rC   utf8onlysongdisstidReferer)r,  r9   rK   cdlistzUnable to get playlist infor   subcode)	from_dictmsgz: r   )rM  r   r
  .dissnamer  r.  )r   rL   r   r   r   r   r
   r"  r  r   r   r   )r   r<   rC  	list_jsonr1  s        r   r   zQQMusicPlaylistIE._real_extract  s3   ..%%''R)agVV(9c2B	 ( D D	
 9==2..// 	3 -fi9EEEe$$D"2 "2 "2 3 3 3
 ''	3QRR#t#GW  YQY[\ 3%("ZL1_
 _
 Q 9 9   	r   Nr2  rW   r   r   rF  rF    sc         G!GFJ =2 K
 

   F    r   rF  c                   J    e Zd ZdZdZdZdddddd	d
dddged
dgZd Zd Z	dS )QQMusicVideoIEz
qqmusic:mvu   QQ音乐 - MVz2https?://y\.qq\.com/n/ryqq/mv/(?P<id>[0-9A-Za-z]+)z)https://y.qq.com/n/ryqq/mv/002Vsarh3SVU8K002Vsarh3SVU8Kmp4z The Chant (Extended Mix / Audio)r    ra   i٪d20230709i9  zDuke Dumont)
rb   rc   rd   rj   rl   release_timestamprf   rg   rh   
view_count)r<   ro   c           	      d    t          |dd ddt          hfdt          hfdt          hfdf          S )NrV  c                     |d         S )Nfreeflow_urlrW   )r   r   s     r   r   z3QQMusicVideoIE._parse_url_formats.<locals>.<lambda>  s    1^;L r   r\  r   fileSizenewFileType)r<   filesizer   )r   r   r	   r   )r   url_datas     r   _parse_url_formatsz!QQMusicVideoIE._parse_url_formats  sO    Hu.L.L"A}5#k]3'+7O
 O
 '   	r   c                    |                      |          }|                     dd|gg dddddd|gidd	||                                 
          }t          |dd|df          dk    r|                                  ||                     t          |dd|f                    dt          |dd|dt          hfdt          hfdt          hfdt          hfdt          hfdddt          hfdt          hfdf          S )Nzmusic.video.VideoDataget_video_info_batch)vidr;  sid	cover_picrg   singers	video_payhintr   rP  r   r  playcntpubdateplay_forbid_reason)vidlistrequiredr   zmusic.stream.MvUrlProxy	GetMvUrlsvids)mvInfomvUrl)rK   rq  rJ   rl     rr  r   r   r  rf  rk  rg   rg  .rj  )rd   rj   rl   rX  rg   rh   rY  )	r   rQ   r   r   raise_geo_restrictedra  r   r   r	   )r   r<   video_id
video_infos       r   r   zQQMusicVideoIE._real_extract  sx   >>#&&''10 (z!D !D !D 
 
 4% 8*- )
 )
" T::<<# ( > >
$ 
XvxAU$VWW[\\\%%''' ..|JRXZbHc/d/dee
 
 :&( 3% &)K=9&/+%?'+7&VcU;(;-8E E (  
 	
r   N)
rR   rS   rT   r   r   r   r0   r   ra  r   rW   r   r   rT  rT    s        GGFJ ;"7:!+&&
 
  F   $
 $
 $
 $
 $
r   rT  )r   r  rC   r3   r1   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   rY   r   r  r$  r4  rF  rT  rW   r   r   <module>ry     sV           ! ! ! ! ! !                         'K 'K 'K 'K 'KM 'K 'K 'KTc c c c c c c cL@ @ @ @ @m @ @ @F; ; ; ; ;} ; ; ;$ $ $ $ $% $ $ $N+R +R +R +R +R' +R +R +R\" " " " "( " " "J@
 @
 @
 @
 @
] @
 @
 @
 @
 @
r   