
    yf4                         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	  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   )
clean_htmlExtractorErrorstrip_jsonpunescapeHTMLc                       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 id!gZd"dd#d$d%d&dd'd(d%d)d*d+d,d-Zed.        Z	d/ Z
y0)1	QQMusicIEqqmusicu   QQ音乐z9https?://y\.qq\.com/n/yqq/song/(?P<id>[0-9A-Za-z]+)\.htmlz/https://y.qq.com/n/yqq/song/004295Et37taLD.html 5f1e6cea39e182857da7ffc5ef5e6bb8004295Et37taLDmp3u   可惜没如果20141227	   林俊杰z$md5:d85afb3051952ecc50a1ee8a286d1eaczre:^https?://.*\.jpg$)idexttitlerelease_datecreatordescription	thumbnail)urlmd5	info_dictz)There is no mp3-320 version of this song.z/https://y.qq.com/n/yqq/song/004MsGEo3DdNxV.html fa3926f0c585cda0af8fa4f796482e3e004MsGEo3DdNxVu   如果20050626u	   李季美z$md5:46857d5ed62bc4ba84607a805dccf437)noter   r   r   zlyrics not in .lrc formatz/https://y.qq.com/n/yqq/song/001JyApY11tIp6.html001JyApY11tIp6zShadows Over Transylvania19970225zDark Funeralz$md5:c9b20210587cbcd6836a1c597bab4525skip_downloadT)r   r   r   paramsM800(   i@  )prefixr   
preferenceabrM500      C200m4a
   )r&   r   r'   )zmp3-320zmp3-128r-   c                      t        t        j                         dz        dz  } t        t        t        j                         dz        | z  dz        S )Ni  ig    _B)inttimeroundrandom)curMss    :/usr/lib/python3/dist-packages/yt_dlp/extractor/qqmusic.pym_r_get_ruinzQQMusicIE.m_r_get_ruinD   sA    DIIK$&'$.5:56>EFF    c                 v   | j                  |      }| j                  d|z  |ddd      }| j                  d|d      }| j                  d|d	d 
      }|r|j                  dd      }| j                  d|dd 
      }| j                  d|dd 
      }|r|j                  dd      }d }| j	                  ddg|dd 
      }	|	rd|	dd d|	d   d|	d}| j                         }
| j                  d|
z  |ddt              d   }g }| j                  j                         D ]C  \  }}|j                  d |d!   |d"|d#   d$|d%|
d&
|||d'   |j                  d(      d)       E | j                  ||       dj                  d* t        j                  d+|      D              }|||||||d,}|rd-d.|d/gi|d0<   |S )1NzUhttp://s.plcloud.music.qq.com/fcgi-bin/fcg_yqq_song_detail_info.fcg?songmid=%s&play=0zDownload song detail infozUnable to get song detail infogbk)r   errnoteencodingzsongname:\s*'([^']+)'z	song nameu"   发行时间：(\d{4}-\d{2}-\d{2})zpublish timedefault- zsinger:\s*'([^']+)singerz:<div class="content" id="lrc_content"[^<>]*>([^<>]+)</div>z
LRC lyricsz\n
zalbummid:\'([0-9a-zA-Z]+)\'z"albummid":"([0-9a-zA-Z]+)"z	album midz,http://i.gtimg.cn/music/photo/mid_album_500//z.jpgzEhttp://base.music.qq.com/fcgi-bin/fcg_musicexpress.fcg?json=3&guid=%szRetrieve vkeyzUnable to get vkey)r   r:   transform_sourcekeyz http://cc.stream.qqmusic.qq.com/r&   .r   z?vkey=z&guid=z
&fromtag=0r'   r(   )r   format	format_idqualityr(   c              3   &   K   | ]	  }|d z     yw)rA   N ).0lines     r5   	<genexpr>z*QQMusicIE._real_extract.<locals>.<genexpr>~   s      $` D4K$`s   z=(?m)^(\[[0-9]{2}:[0-9]{2}(?:\.[0-9]{2,})?\][^\n]*|\[[^\]]*\]))r   formatsr   r   r   r   r   originlrc)r   data	subtitles)	_match_id_download_webpage_html_search_regexreplace_search_regexr6   _download_jsonr   _FORMATSitemsappendget_check_formatsjoinrefindall)selfr   middetail_info_page	song_namepublish_timer@   lrc_contentthumbnail_urlalbummidguidvkeyrP   rI   detailsactual_lrc_lyricsr   s                    r5   _real_extractzQQMusicIE._real_extractI   sj   nnS!11cfii14u 2 F
 ++$&6E	 ..13CD / * '//R8L((!#3Xt ) M --IlD . : %--eT:K%%+-KLk4 & 9 '2hHM   """SVZZo/C( # * +01
 "&--"5"5"7 	IwNN!(+S'%.$N#&"<0{{5) 	 	GS)GG $`$&JJPR]%_$` `
 (&&
	  - &Ik" r7   N)__name__
__module____qualname__IE_NAMEIE_DESC
_VALID_URL_TESTSr[   staticmethodr6   ro   rL   r7   r5   r   r      s    GGMJ@1"&&"A1
 <@1"&"A1
	 ,@"0&%A1
 T
3(FV %U"SQ$U"SQ bAH G GIr7   r   c                   (    e Zd Zed        Zd Zd Zy)QQPlaylistBaseIEc           	      ,    d| d|d   d|d   d|d	S )Nzhttp://y.qq.com/y/static/rD   rB   rC   .htmlrL   )categoryrd   s     r5   qq_static_urlzQQPlaylistBaseIE.qq_static_url   s    >FBQTUWQXZ]^^r7   c                 @    | j                  d|ddddd|dd|dd	

      S )Nz8https://c.y.qq.com/v8/fcg-bin/fcg_v8_singer_track_cp.fcgjsonutf8utf-8yqqr   listenr   )
rH   	inCharset
outCharsetplatformneedNewCode	singermidorderbeginnum
songstatus)query)rV   )rc   singmidr   s      r5   get_singer_all_songsz%QQPlaylistBaseIE.get_singer_all_songs   sB    %%G #%! $! &  	r7   c                 \   g }d}| j                  ||      }| j                  ||      }|d   dk(  r,|d   d   }| j                  ||      }| j                  ||      }|d   d   D ]D  }|d   j                  d      |d   d   }|j                  | j	                  d	|z  d
|             F |S )Nr   coder   rS   totallist	musicDatasongmidz#https://y.qq.com/n/yqq/song/%s.htmlQQMusic)r   _parse_jsonr^   r]   
url_result)	rc   r   entriesdefault_num	json_textjson_obj_all_songsr   itemr   s	            r5   get_entries_from_pagez&QQPlaylistBaseIE.get_entries_from_page   s    --g{C	!--iAf%*&v.w7E11'5AI!%!1!1)W!E&v.v6 	[DK $$Y/;{+I6t:WDiQX Z [	[ r7   N)rp   rq   rr   rw   r}   r   r   rL   r7   r5   ry   ry      s     _ _ r7   ry   c                   2    e Zd ZdZdZdZdddddd	d
Zd Zy)QQMusicSingerIEzqqmusic:singeru   QQ音乐 - 歌手z;https?://y\.qq\.com/n/yqq/singer/(?P<id>[0-9A-Za-z]+)\.htmlz1https://y.qq.com/n/yqq/singer/001BLpXF2DyJe2.html001BLpXF2DyJe2r   z$md5:870ec08f7d8547c29c93010899103751r   r   r      )r   r   playlist_mincountc           
      6   | j                  |      }| j                  |      }| j                  ||d      }| j                  d|dd       }d }|r8| j	                  d|dddd	|d
ddi      }|j                  d      j                  }| j                  ||||      S )NzDownload singer pagezsingername\s*:\s*'(.*?)'zsinger namer<   z>http://s.plcloud.music.qq.com/fcgi-bin/fcg_get_singer_desc.fcgzDonwload singer description XMLr   r   xml)r   r   rH   r   Refererzhttps://y.qq.com/n/yqq/singer/)r   headersz./data/info/desc)rU   r   rV   rW   _download_xmlfindtextplaylist_result)rc   r   rd   r   singer_pagesinger_namesinger_descsinger_desc_pages           r5   ro   zQQMusicSingerIE._real_extract   s    nnS!,,S1,,S#7MN--'mT . S#11PRU1 5WZ["$DE	  2  G +//0BCHHK##GS+{KKr7   N)rp   rq   rr   rs   rt   ru   _TESTro   rL   r7   r5   r   r      s4    G!GOJB" A

  ELr7   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/yqq/album/(?P<id>[0-9A-Za-z]+)\.htmlz0https://y.qq.com/n/yqq/album/000gXCTb2AhRR1.html000gXCTb2AhRR1u   我们都是这样长大的z$md5:179c5dce203a5931970d306aa9607ea6r      r   r   playlist_countz0https://y.qq.com/n/yqq/album/002Y5a3b3AlCu3.html002Y5a3b3AlCu3u   그리고...z$md5:a48823755615508a95080e81b51ba729   c           	      N   | j                  |      }| j                  d|z  |d      d   }|d   D cg c]!  }| j                  d|d   z   dz   d|d         # }}|j                  d	      }|j                  d
      }||j	                         }| j                  ||||      S c c}w )NzMhttp://i.y.qq.com/v8/fcg-bin/fcg_v8_album_info_cp.fcg?albummid=%s&format=jsonzDownload album pagerS   r   https://y.qq.com/n/yqq/song/r   r{   r   namedesc)rU   rZ   r   r^   stripr   )rc   r   rd   albumsongr   
album_namealbum_details           r5   ro   zQQMusicAlbumIE._real_extract   s    nnS!##[^aa&((.0  -
  OO.i@7JIW[\eWf
 

 YYv&
yy(#'--/L##GS*lKK
s   &B"Nrp   rq   rr   rs   rt   ru   rv   ro   rL   r7   r5   r   r      sZ    G!GNJ B"2A

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

 F$Lr7   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音乐 - 排行榜z6https?://y\.qq\.com/n/yqq/toplist/(?P<id>[0-9]+)\.htmlz'https://y.qq.com/n/yqq/toplist/123.html123u   美国iTunes榜z$md5:89db2335fdbb10678dee2d43fe9aba08r   d   r   z%https://y.qq.com/n/yqq/toplist/3.html3u   巅峰榜·欧美z$md5:5a600d42c01696b26b71f8c4d43407daz'https://y.qq.com/n/yqq/toplist/106.html106u   韩国Mnet榜z$md5:cb84b325215e1d21708c615cac82a6e72   c           	      Z   | j                  |      }| j                  d|dd|dd      }|d   D cg c]'  }| j                  d|d	   d
   z   dz   d|d	   d
         ) }}|j                  di       }|j                  d      }|j                  d      }| j	                  ||||      S c c}w )Nz2http://i.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcgzDownload toplist pagetoplistr   )typetopidrH   )r   r   songlistr   rS   r   r{   r   topinfoListNameinfo)rU   rZ   r   r^   r   )	rc   r   list_idtoplist_jsonr   r   r   	list_namelist_descriptions	            r5   ro   zQQMusicToplistIE._real_extract,  s    ..%**@'($w&I + K %Z02  ??*T&\)-DDwNPYL#% 2 2
 ""9b1KK
+	";;v.##GWiAQRR2s   ,B(Nr   rL   r7   r5   r   r     su    G$GJJ 9&A

  7(A

  9$A

 !F4Sr7   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dgZd Zy)QQMusicPlaylistIEzqqmusic:playlistu   QQ音乐 - 歌单z7https?://y\.qq\.com/n/yqq/playlist/(?P<id>[0-9]+)\.htmlz.http://y.qq.com/n/yqq/playlist/3462654915.html
3462654915u   韩国5月新歌精选下旬z$md5:d2c9d758a96b9888cf4fe82f603121d4r   r%   zplaylist gone)r   r   r   skipz/https://y.qq.com/n/yqq/playlist/1374105607.html
1374105607u   易入人心的华语民谣u   民谣的歌曲易于传唱、、歌词朗朗伤口、旋律简单温馨。属于那种才入耳孔。却上心头的感觉。没有太多的复杂情绪。简单而直接地表达乐者的情绪，就是这样的简单才易入人心。   r   c                     | j                  |      }| j                  d|ddddd|dt              }t        |j	                  dg             s/|j	                  d      rt        d	|d   z  d
      t        d      |d   d   }|d   D cg c]!  }| j                  d|d   z   dz   d|d         # }}|j	                  d      }t        t        |j	                  d                  }| j                  ||||      S c c}w )NzDhttp://i.y.qq.com/qzone-music/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcgzDownload list pager   r   )r   r   r   onlysongdisstid)r   rE   cdlistr   z1QQ Music said: error %d in fetching playlist infoT)expectedzUnable to get playlist infor   r   r   r{   r   dissnamer   )
rU   rZ   r   lenr^   r   r   r   r	   r   )	rc   r   r   	list_jsonr   r   r   r   r   s	            r5   ro   zQQMusicPlaylistIE._real_extractW  s+   ..%''R)agV(	 ( *	
 9==2./}}V$$G)TZJ[[!# # !!>??8$Q' z*, ??*T)_<wF	SWXaSbd , , JJz*	%l6::f3E&FG##GWiAQRR,s   &C;Nr   rL   r7   r5   r   r   ?  s`     G!GKJ @3A

 	 A2 K

 F&Sr7   r   )r3   ra   r1   commonr   utilsr   r   r   r	   r   ry   r   r   r   r   rL   r7   r5   <module>r      sv     	  ! D DN'} 'T L&  LF(L% (LV/S' /Sd.S( .Sr7   