
    VGh{K                        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y)    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                   R    e Zd Zd	dZd Zd Zed        Zed        Z	d
dZ
i fdZy)QQMusicBaseIENc                 X    t        | j                  d      j                  |      d|      S )Nzhttps://y.qq.comvalue)getattr_get_cookiesget)selfkeydefaults      a/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/qqmusic.py_get_cookiezQQMusicBaseIE._get_cookie   s)    t(();<@@EwPWXX    c                 f    d}| j                  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   sD    !!-4 	#A!q&CF""A	#:~r   c                 >    t        | j                  d            xs dS )Nuinr   )r	   r   r   s    r   _get_uinzQQMusicBaseIE._get_uin!   s    4++E238q8r   c                 Z    t        | j                         xr | j                  d            S )N	fqm_pvqid)boolr*   r   r)   s    r   is_logged_inzQQMusicBaseIE.is_logged_in$   s#    DMMOE(8(8(E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*   sA    TYY[4'(4/5:56?$FGGr   c                 `    | j                  |||      }| j                  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/   sB    ((c(?  !@'!,cJV[ ! ] 	]r   c                      | j                   d|ft        j                  dddd| j                         di|d      j	                         |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   sy    "t""3S	K?Czz$==?	K K %@& '-fh	K DJ	K 		Kr   )N)T)__name__
__module____qualname__r   r&   r*   propertyr.   staticmethodr5   r?   rQ    r   r   r   r      sO    Y9 G G
 H H]
 46 
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yT)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                 8   | j                  |      | j                  |d      }| j                  ddddddid	
      d   d   d   }|d   d   }| j                  ddt        | j	                               gt        | j                        z  dgt        | j                        z  t        | j                               dd| j                  j                         D cg c]  }|d    | d|d     c}dddddiddd| j                               }t        |ddt        hf      }|dk7  rt        d|xs d        g }t        |ddd!fd"f      D ]  }	t        |	d#t        hd$ hf      }
| j                  j                  |
      xs i }|j                  d%      }|j                  t        d&|	d'         ||t        |dd(| t         hf      |j                  d)      |j                  d*      |j                  d      d+d,        |s| j"                  s| j%                          t        |d-      r| j'                  d.|d/   d          t        |d/dd0d1 hf      }|d2t        |d3t        hfd4d3t        ht(        fd5d6 hfd7d8d%t        hfd9t        ht(        fd:t         hfd;      t        |d<d=t*        hfdd>d?d8d@t        hfddAd?d8d@t        ht,        fdBfdC      }|r+dDdE|dFgi|dG<   t/        |j                  dH      |dIJ      |dH<   |S c c}w )KNFr7   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   20r   .rc   )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(  xr |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    QRSUTUQV r   r   z https://dl.stream.qqmusic.qq.comr   size_r   r   none)r<   rF   	format_idrk   qualityr   rc   vcodec)r   r   z Failed to download lyric, error r   lyricc                 J    t        j                  |       j                  d      S )Nzutf-8)base64	b64decodedecoder   s    r   r   z)QQMusicIE._real_extract.<locals>.<lambda>   s    vO_O_`aObOiOijqOr r   rb   formatsrd   re   time_publicc                 .    | j                  dd      xs d S )N-r    )replacer   s    r   r   z)QQMusicIE._real_extract.<locals>.<lambda>   s    199S";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_datar   frJ   r   r   
media_info
format_keyformat_infor   lrc_contentro   r=   s                  @r   _real_extractzQQMusicIE._real_extract   s   nnS!,,S#U,C	&&0+1
 ( - ' / 067 8>? @LM	 f%k2	!!.& 2 2 45 #us4=='99!"c$--&8 8t}}/!" $QUQ^Q^QeQeQg hAAhK=1QuXJ!G h >,#S)#
& 4d>[>[>]' " _* D7FSE":;19 #NtO`W`Na!bcc&tV\+Y.[ 
 	J &j:uFW2XYJ--++J7=2K#/INNA:fCUV#&$Y59L{m0\]&??<8"u-"u- 	 		" t00%%'/0"B4=QWCXB[ \]"4'67ErDs)tu 
 9!C5)!7SE6:!.1U0V W%sFSE:(3%8'+7' 
 9x&6 &C3%P!7IsGcUCP2 ' 	
	" &.1T0U%VIk"'4Y]]=5QS^fj'kIm$u !is    LN)	rR   rS   rT   IE_NAMEIE_DESC
_VALID_URL_TESTSr   r   rW   r   r   rY   rY   A   sd   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&bQ!VEQS\_`!VEQS\_` F5PR[]^ F5PR[]^HTr   rY   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ddgdgddddigdgZdZd Zd Z	y )!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    j                  dddd|||z  |ddi|d|       }t        |dd	d
d fdhf      E d {    y 7 w)Nr   zmusic.web_singer_info_svrget_singer_detail_infor!   )sort	singermidsinnumr   zDownloading page r   rJ   songlist.c                 d    j                  d| d    t        | d   | j                  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>  s:    TXTcTc1!E(<i5STSXSXY`SaUc r   )rQ   r   )r   r=   	page_sizepage_numrJ   s   `    r   _fetch_pagezQQMusicSingerIE._fetch_page  s     !!71. )+ 	- # .xj9 " ;  w
C Kc Jd 'e f 	f 	fs   >A	AA	c                 >   | j                  |      }| j                  ||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	#t##i//0@0@#tWY]YhYh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
r   r   c                       e Zd Zd Zy)QQPlaylistBaseIEc           	   #      K   t        ||      D ]B  }|j                  d      }|s| j                  d| t        ||j                  d             D y w)Nr   r	  songname)r   r   r
  rY   )r   	info_jsonpathsongr   s        r   _extract_entriesz!QQPlaylistBaseIE._extract_entries+  s[      D1 	;Dxx	*H//5hZ@8TXXj%9; ;		;s   AAN)rR   rS   rT   r  rW   r   r   r  r  *  s    ;r   r  c                   F    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y)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           
          | j                  |      }| j                  d|d|dd      d   }| j                  |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 ) 7 8>?

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

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

 F$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)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           
          | j                  |      }| j                  d|dd|dd      }| j                  | j                  |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 + K
 ##!!,0IJG(,N+P \WZ\!-l<O!P	 $ R 	Rr   Nr/  rW   r   r   r1  r1  \  su    G$GEJ 5BG

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

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

 !F4Rr   r1  c                   4    e Zd ZdZdZdZdddddd	d
gZd Zy)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                    | j                  |      }| j                  d|ddddd|dt        d|i      }t        |j	                  dg             s3t        t        d	t        d
d|      |j	                  d      d            | j                  |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   )r8  rC   utf8onlysongdisstidReferer)r)  r9   rK   cdlistzUnable to get playlist infor   subcode)	from_dictmsgz: r   )rJ  r   r  .dissnamer  r+  )r   rL   r   r   r   r   r
   r  r  r   r   r   )r   r<   r@  	list_jsonr.  s        r   r   zQQMusicPlaylistIE._real_extract  s    ..%''R)agV(9c2B	 ( D	
 9==2./ -fi9Ee$D"2 3 3
 ''	3QR#t##GW YQY[\ 3%("ZL1_
 Q 9  	r   Nr/  rW   r   r   rC  rC    s=     G!GFJ =2 K

  Fr   rC  c                   H    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	y)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           	      V    t        |dd ddt        hfdt        hfdt        hfdf      S )NrS  c                     |d   S )Nfreeflow_urlrW   )r   r   s     r   r   z3QQMusicVideoIE._parse_url_formats.<locals>.<lambda>  s    1^;L r   rY  r   fileSizenewFileType)r<   filesizer   )r   r   r	   r   )r   url_datas     r   _parse_url_formatsz!QQMusicVideoIE._parse_url_formats  sA    Hu.L"A}5#k]3'+7O
 '  	r   c                    | j                  |      }| j                  dd|gg dddddd|gidd	|| j                         
      }t        |dd|df      dk(  r| j	                          || j                  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)vidr8  sid	cover_picrg   singers	video_payhintr   rM  r   r  playcntpubdateplay_forbid_reason)vidlistrequiredr   zmusic.stream.MvUrlProxy	GetMvUrlsvids)mvInfomvUrl)rK   rn  rJ   ri     ro  r   r   r  rc  rh  rg   rd  .rg  )rd   rj   rl   rU  rg   rh   rV  )	r   rQ   r   r   raise_geo_restrictedr^  r   r   r	   )r   r<   video_id
video_infos       r   r   zQQMusicVideoIE._real_extract  s+   >>#&''10 (z!D
 4% 8*-)
" T::<# ( >
$ 
XvxAU$VW[\\%%' ..|JRXZbHc/de
 :&( 3% &)K=9&/+%?'+7&VcU;(;-8E ( 
 	
r   N)
rR   rS   rT   r   r   r   r0   r   r^  r   rW   r   r   rQ  rQ    sQ    GGFJ ;"7:!+&&
 F $
r   rQ  )r   r  rC   r3   r1   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   rY   r   r  r!  r1  rC  rQ  rW   r   r   <module>rv     s         !   'KM 'KTc cL@m @F;} ;$% $N+R' +R\"( "J@
] @
r   