
    V|h{K                        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	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   )ExtractorErrorOnDemandPagedList
clean_htmlint_or_nonejoin_nonempty
js_to_jsonstr_or_nonestrip_jsonptraverse_objurl_or_noneurljoinc                   `    \ rS rSrSS jrS rS r\S 5       r\	S 5       r
SS jr0 4S	 jrS
rg)QQMusicBaseIE   Nc                 X    [        U R                  S5      R                  U5      SU5      $ )Nzhttps://y.qq.comvalue)getattr_get_cookiesget)selfkeydefaults      R/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/qqmusic.py_get_cookieQQMusicBaseIE._get_cookie   s)    t(();<@@EwPWXX    c                 h    SnU R                  SS5       H  nXS-  [        U5      -   -  nM     US-  $ )Ni  qqmusic_key    )r   ord)r   ncs      r   	_get_g_tkQQMusicBaseIE._get_g_tk   s=    !!-4Aq&CF""A 5:~r   c                 H    [        U R                  S5      5      =(       d    S$ )Nuinr   )r	   r   r   s    r   _get_uinQQMusicBaseIE._get_uin!   s    4++E238q8r   c                 d    [        U R                  5       =(       a    U R                  S5      5      $ )N	fqm_pvqid)boolr-   r   r,   s    r   is_logged_inQQMusicBaseIE.is_logged_in$   s#    DMMOE(8(8(EFFr   c                      [        [        R                  " 5       S-  5      S-  n [        [        [        R                  " 5       S-  5      U -  S-  5      $ )Ni  r$   g    _B)inttimeroundrandom)cur_mss    r   _m_r_get_ruinQQMusicBaseIE._m_r_get_ruin*   sA    TYY[4'(4/5:56?$FGGr   c           	      R    U R                  XUS9nU R                  SUSU[        US9$ )Nfatalzwindow\.__INITIAL_DATA__\s*=z	init data)transform_sourcer>   )_download_webpage_search_jsonr   )r   urlmidr>   webpages        r   _download_init_data!QQMusicBaseIE._download_init_data/   s@    (((?  !@'!,cJV[ ! ] 	]r   c                     U R                   " SU4[        R                  " SSSSU R                  5       S.0UESS9R	                  5       US	.UD6$ )
Nz%https://u.y.qq.com/cgi-bin/musicu.fcgcommr      json)cvctformatr+   ),:)
separators)dataheaders)_download_jsonrJ   dumpsr-   encode)r   req_dictrC   rR   kwargss        r   _make_fcu_reqQQMusicBaseIE._make_fcu_req4   sw    ""3S	K?Czz$==?	K K %@& '-fh	K DJ	K 		Kr    )N)T)__name__
__module____qualname____firstlineno__r   r(   r-   propertyr2   staticmethodr:   rE   rX   __static_attributes__rZ   r   r   r   r      sO    Y9 G G
 H H]
 46 
K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&S'S(S)S*// S+S,SS-.S..S/S0S1SS2S3S4S5SS6.S7S80S9S:./rS;S<S;S=S>.S?S@S?SAS>.SBSCSSDSESF.SGSHSSISJSF.SKSLSMSNSOSF.SPSQSMSNSRSF.SS.rST r	SUr
gV)W	QQMusicIEA   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)rB   md5	info_dictz1https://y.qq.com/n/ryqq/songDetail/004295Et37taLD 5f1e6cea39e182857da7ffc5ef5e6bb8004295Et37taLDu   可惜没如果u!   新地球 - 人 (Special Edition)20150129*  	   林俊杰z$md5:f568421ff618d2066e74b65a04149c4e)
rm   rn   ro   rp   rq   rr   rs   rt   ru   rw   zpremium member only)rB   ry   rz   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 rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   )noterB   ry   rz   zlyrics not in .lrc formatz1https://y.qq.com/n/ryqq/songDetail/001JyApY11tIp6001JyApY11tIp6zShadows Over Transylvania19970225zDark Funeralz$md5:c9b20210587cbcd6836a1c597bab4525)rm   rn   ro   rq   creatorru   rw   skip_downloadTzno longer available)r   rB   rz   paramsr   flacF000<   )nameprefixrn   
preferenceapeA0002   320mp3M800(   i@  )r   r   rn   r   abr128mp3M500      96aacC400m4a   `   48aacC2000   )r   r   r   r   r   r   c                 d  ^ U R                  U5      mU R                  UTSS9nU R                  SSSTSS.S.0TS	S
9S   S   S   nUS   S   nU R                  SS[        U R	                  5       5      T/[        U R                  5      -  S/[        U R                  5      -  [        U R                  5       5      SSU R                  R                  5        Vs/ s H  oUS    U SUS    3PM     snS.S.SSST0S.S.TSU R                  5       S9n[        USS[        145      nUS:w  a  [        SU=(       d    S  35      e/ n[        USSS!U4S" j45       H  n	[        U	S#[        1S$ 145      n
U R                  R                  U
5      =(       d    0 nUR                  S%5      nUR                  [        S&U	S'   5      UU[        USS(U 3[         145      UR                  S)5      UR                  S*5      UR                  S5      S+S,.5        M     U(       d!  U R"                  (       d  U R%                  5         [        US-5      (       a  U R'                  S.US/   S   < 35        [        US/SS0S1 145      nTUS2.[        US3[        14S4S3[        1[(        4S5S6 14S7S8S%[        14S9[        1[(        4S:[         14S;.5      E[        US<S=[*        14SS>S?S8S@[        14SSAS?S8S@[        1[,        4SB.4SSC9EnU(       a(  SDSEUSF./0USG'   [/        UR                  SH5      USISJ9USH'   U$ s  snf )KNFr=   infozmusic.pf_song_detail_svrget_song_detail_yqqr   )song_mid	song_typemodulemethodparamzDownloading song infor   rQ   
track_infofile	media_midzvkey.GetVkeyServer
CgiGetVkeyr   20r   .rn   )guidsongmidsongtyper+   	loginflagplatformfilenamez!music.musichallSong.PlayLyricInfoGetPlayLyricInfosongMID)req_1req_2zDownloading formats and lyric)r   rR   r   codez+Failed to download format info, error code unknown
midurlinfoc                 ,   > US   T:H  =(       a    US   $ )Nr   purlrZ   )_vrC   s     r   <lambda>)QQMusicIE._real_extract.<locals>.<lambda>   s    )8K8YPQRXPY8Yr   r   c                     U S S $ )N   rZ   xs    r   r   r      s    QRSUTUQVr   r   z https://dl.stream.qqmusic.qq.comr   size_r   r   none)rB   rM   	format_idrv   qualityr   rn   vcodec)r   r   z Failed to download lyric, error r   lyricc                 L    [         R                  " U 5      R                  S5      $ )Nzutf-8)base64	b64decodedecoder   s    r   r   r      s    vO_O_`aObOiOijqOrr   rm   formatsro   rp   time_publicc                 8    U R                  SS5      =(       d    S $ )N-r"   )replacer   s    r   r   r      s    199S";M;UQU;Ur   singer.subtitleinterval)ro   rp   rq   rs   	alt_titlerr   detailpicurlintrocontentr   genre)rw   ru   rt   )get_alloriginlrc)rn   rQ   rx   ru   
delim)	_match_idrE   rX   strr:   len_FORMATSr-   valuesgeo_verification_headersr   r5   r   r   appendr   r	   r2   raise_login_requiredreport_warningfilterr   allr
   )r   rB   	init_data	info_datar   frQ   r   r   
media_info
format_keyformat_infor   lrc_contentrz   rC   s                  @r   _real_extract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 hQgAhK=1QuXJ!GQg 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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-rZ   N)r[   r\   r]   r^   IE_NAMEIE_DESC
_VALID_URL_TESTSr   r   ra   rZ   r   r   rc   rc   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   rc   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.0/S./rSrS r	S  r
S!rg")#QQMusicSingerIE   z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001BLpXF2DyJe2r   z$md5:10624ce73b06fa400bc846f59b0305farl   )rm   ro   ru   rw   d   )rB   rz   playlist_mincountz-https://y.qq.com/n/ryqq/singer/000Q00f213YzNV000Q00f213YzNVu	   桃几OvOu5   小破站小唱见~希望大家喜欢听我唱歌~！   rz   0016cvsy02mmClrh   u   群青u   桃几2021年翻唱集20210913   rk   z$md5:4296005a04edcb5cdbe0889d5055a7aei< r   )rB   rz   playlist_countplaylistr   c           
   #      ^ #    T R                  SSSSUX2-  US.S.0USU 3S9n[        USS	S
SU 4S j145       S h  vN   g  N7f)Nr   zmusic.web_singer_info_svrget_singer_detail_infor#   )sort	singermidsinnumr   zDownloading page r   rQ   songlist.c                 d   > TR                  SU S    3[        U S   U R                  S5      5      $ )N#https://y.qq.com/n/ryqq/songDetail/rC   ro   )
url_resultrc   r   )r   r   s    r   r   -QQMusicSingerIE._fetch_page.<locals>.<lambda>  s8    TXTcTc1!E(<i5STSXSXY`SaUcr   )rX   r   )r   rC   	page_sizepage_numrQ   s   `    r   _fetch_pageQQMusicSingerIE._fetch_page  s     !!71. + 	- # .xj9 " ;  w
C Kc Jd 'e f 	f 	fs   ;AAAc                 6   U R                  U5      nU R                  XSS9nU R                  " [        [        R
                  " U R                  X R                  5      U R                  5      U40 [        USSS[        14SS[        14SS[        14S	.45      D6$ )
NFr=   singerDetail
basic_infor   ex_infodescpic)ro   ru   rw   )r   rE   playlist_resultr   	functoolspartialr  
_PAGE_SIZEr   r   r   )r   rB   rC   r   s       r   r   QQMusicSingerIE._real_extract  s    nnS!,,SU,C	##i//0@0@#WY]YhYhi	N&6 )6C59#U[M:= ,  	r   rZ   N)r[   r\   r]   r^   r   r   r  r  r(  r  r   ra   rZ   r   r   r  r     s    G!GJJ>" A:	
 !	 ?" R:	
 &!1 *(M 'E>
 !FF Jf
r   r  c                       \ rS rSrS rSrg)QQPlaylistBaseIEr~   c           	   #      #    [        X5       HH  nUR                  S5      nU(       d  M  U R                  SU 3[        XCR                  S5      5      v   MJ     g 7f)Nr   r  songname)r   r   r  rc   )r   	info_jsonpathsongr   s        r   _extract_entries!QQPlaylistBaseIE._extract_entries+  sQ      1Dxx	*H//5hZ@8XXj%9; ;	 2s   AArZ   N)r[   r\   r]   r^   r1  ra   rZ   r   r   r+  r+  *  s    ;r   r+  c                   N    \ 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./rS rSr	g)QQMusicAlbumIEi5  z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rm   ro   ru   r   rB   rz   r  z2https://y.qq.com/n/ryqq/albumDetail/002Y5a3b3AlCu3002Y5a3b3AlCu3u   그리고…z$md5:a48823755615508a95080e81b51ba729   c           
          U R                  U5      nU R                  SUSUSS.S9S   nU R                  US5      nU R                  " XB40 [	        US[
        14S	[
        R                  14S
.5      D6$ )Nz5http://i.y.qq.com/v8/fcg-bin/fcg_v8_album_info_cp.fcgzDownload album pagerJ   )albummidrM   )queryrQ   )list.r   r#  ro   ru   )r   rS   r1  r%  r   r   strip)r   rB   rC   
album_jsonentriess        r   r   QQMusicAlbumIE._real_extractL  s    nnS!((C&"f5 ) 7 8>?

 ''
MB##G Lse_"SYYK0N
 5  	r   rZ   N
r[   r\   r]   r^   r   r   r  r  r   ra   rZ   r   r   r4  r4  5  sY    G!GOJ D"2A

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

 F$r   r4  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)QQMusicToplistIEi\  z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*   美国热门音乐榜，每周一更新。r6  _   r7  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           
          U R                  U5      nU R                  SUSSUSS.S9nU R                  U R                  US5      U[	        [        US5      S	S
06[        US5      S9$ )Nz2http://i.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcgzDownload toplist pagetoplistrJ   )typetopidrM   )r   r<  )r  .rQ   )))topinfoListNameupdate_timeNr    )rN  r   )playlist_titleplaylist_description)r   rS   r%  r1  r
   r   )r   rB   list_idtoplist_jsons       r   r   QQMusicToplistIE._real_extract{  s    ..%**@'($w&I + K
 ##!!,0IJG(,N+P \WZ\!-l<O!P	 $ R 	Rr   rZ   NrC  rZ   r   r   rE  rE  \  su    G$GEJ 5BG

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

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

 !F4Rr   rE  c                   <    \ rS rSrSrSrSrSSSSS	.S
S./rS rSr	g)QQMusicPlaylistIEi  z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   民谣的歌曲易于传唱、、歌词朗朗伤口、旋律简单温馨。属于那种才入耳孔。却上心头的感觉。没有太多的复杂情绪。简单而直接地表达乐者的情绪，就是这样的简单才易入人心。r6  r   r7  c                    U R                  U5      nU R                  SUSSSSSUS.[        SU0S9n[        UR	                  S/ 5      5      (       d-  [        [        S	[        S
SUS9UR	                  S5      SS95      eU R                  US5      nU R                  " XB40 [        USSS[        14S[        14S.45      D6$ )NzDhttp://i.y.qq.com/qzone-music/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcgzDownload list pager   r   )rL  rJ   utf8onlysongdisstidReferer)r<  r?   rR   cdlistzUnable to get playlist infor   subcode)	from_dictmsgz: r   )r_  r   r  .dissnamer#  r>  )r   rS   r   r   r   r   r
   r1  r%  r   r   r   )r   rB   rT  	list_jsonrA  s        r   r   QQMusicPlaylistIE._real_extract  s    ..%''R)agV(9c2B	 ( D	
 9==2.// -fi9Ee$D"2 3 3
 ''	3QR##G YQY[\ 3%("ZL1_
 Q 9  	r   rZ   NrC  rZ   r   r   rX  rX    s=     G!GFJ =2 K

  Fr   rX  c                   P    \ rS rSrSrSrSrSSSSS	S
SSSS/\S.
S./rS r	S r
Srg)QQMusicVideoIEi  z
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"   rl   i٪d20230709i9  zDuke Dumont)
rm   rn   ro   ru   rw   release_timestamprq   rr   rs   
view_count)rB   rz   c           	      V    [        USS SS[        14S[        14S[        14S.45      $ )Nri  c                     US   $ )Nfreeflow_urlrZ   )r   r   s     r   r   3QQMusicVideoIE._parse_url_formats.<locals>.<lambda>  s	    1^;Lr   ro  r   fileSizenewFileType)rB   filesizer   )r   r   r	   r   )r   url_datas     r   _parse_url_formats!QQMusicVideoIE._parse_url_formats  sA    Hu.L"A}5#k]3'+7O
 '  	r   c                    U R                  U5      nU R                  SSU// SQS.S.SSSU/0S.S	.X R                  5       S
9n[        USSUS45      S:X  a  U R	                  5         UU R                  [        USSU45      5      S.[        USSUS[        14S[        14S[        14S[        14S[        14SSS[        14S[        14S.45      E$ )Nzmusic.video.VideoDataget_video_info_batch)vidrL  sid	cover_picrr   singers	video_payhintr   rb  r   r#  playcntpubdateplay_forbid_reason)vidlistrequiredr   zmusic.stream.MvUrlProxy	GetMvUrlsvids)mvInfomvUrl)rR   r  rQ   r     r  r   r   r#  r{  r  rr   r|  .r  )ro   ru   rw   rk  rr   rs   rl  )	r   rX   r   r   raise_geo_restrictedru  r   r   r	   )r   rB   video_id
video_infos       r   r   QQMusicVideoIE._real_extract  s)   >>#&''10 (z!D
 4% 8*-)
" ::<# ( >
$ 
XvxAU$VW[\\%%' ..|JRXZbHc/de
 :&( 3% &)K=9&/+%?'+7&VcU;(;-8E ( 
 	
r   rZ   N)r[   r\   r]   r^   r   r   r  r5   r  ru  r   ra   rZ   r   r   rg  rg    sQ    GGFJ ;"7:!+&&
 F $
r   rg  )r   r&  rJ   r8   r6   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   rc   r  r+  r4  rE  rX  rg  rZ   r   r   <module>r     s         !   'KM 'KTc cL@m @F;} ;$% $N+R' +R\"( "J@
] @
r   