U
    ¦y^N5  ã                   @   s¬   d dl m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 G dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )é    )Úunicode_literalsNé   )ÚInfoExtractoré   )Ú
clean_htmlÚExtractorErrorÚstrip_jsonpÚunescapeHTMLc                   @   s®   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.d/„ ƒZ	d0d1„ Z
d2S )3Ú	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.htmlZ 5f1e6cea39e182857da7ffc5ef5e6bb8Z004295Et37taLDÚmp3u   å�¯æƒœæ²¡å¦‚æžœZ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.htmlZ fa3926f0c585cda0af8fa4f796482e3eZ004MsGEo3DdNxVu   å¦‚æžœZ20050626u	   æ�Žå­£ç¾Žz$md5:46857d5ed62bc4ba84607a805dccf437)Únoter   r   r   zlyrics not in .lrc formatz/https://y.qq.com/n/yqq/song/001JyApY11tIp6.htmlZ001JyApY11tIp6zShadows Over TransylvaniaZ19970225zDark Funeralz$md5:c9b20210587cbcd6836a1c597bab4525Úskip_downloadT)r   r   r   ÚparamsZM800é(   i@  )Úprefixr   Ú
preferenceÚabrZM500é   é€   ZC200Úm4aé
   )r   r   r   )zmp3-320zmp3-128r!   c                  C   s0   t t ¡ d ƒd } t tt ¡ d ƒ|  d ƒS )Niè  iÿÿÿg    _ B)ÚintÚtimeÚroundÚrandom)ZcurMs© r'   úOC:\Users\TaGoRe\Desktop\beinconnect-dl\binaries\youtube_dl\extractor\qqmusic.pyÚm_r_get_ruinG   s    zQQMusicIE.m_r_get_ruinc              
   C   s”  |   |¡}| jd| |dddd�}|  d|d¡}| jd|d	d d
�}|rR| dd¡}| jd|dd d
�}| jd|dd d
�}|r†| dd¡}d }| jddg|dd d
�}	|	r¾d|	dd… |	d |	f }|  ¡ }
| jd|
 |ddtd�d }g }| j 	¡ D ]>\}}| 
d|d ||d  ||
f |||d! | d"¡d#œ¡ qð|  ||¡ |  |¡ d d$d%„ t d&|¡D ƒ¡}|||||||d'œ}|�r�d(d)|d*œgi|d+< |S ),NzUhttp://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 midz8http://i.gtimg.cn/music/photo/mid_album_500/%s/%s/%s.jpgéþÿÿÿéÿÿÿÿzEhttp://base.music.qq.com/fcgi-bin/fcg_musicexpress.fcg?json=3&guid=%szRetrieve vkeyzUnable to get vkey)r   r+   Útransform_sourceÚkeyzAhttp://cc.stream.qqmusic.qq.com/%s%s.%s?vkey=%s&guid=%s&fromtag=0r   r   r   r   )r   ÚformatÚ	format_idr   r   c                 s   s   | ]}|d  V  qdS )r2   Nr'   )Ú.0Úliner'   r'   r(   Ú	<genexpr>‚   s    z*QQMusicIE._real_extract.<locals>.<genexpr>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_regexr)   Ú_download_jsonr   Ú_FORMATSÚitemsÚappendÚgetÚ_check_formatsÚ_sort_formatsÚjoinÚreÚfindall)Úselfr   ÚmidZdetail_info_pageÚ	song_nameÚpublish_timer1   Úlrc_contentÚthumbnail_urlZalbummidÚguidÚvkeyr<   r8   ÚdetailsZactual_lrc_lyricsr   r'   r'   r(   Ú_real_extractL   s´    
  ý  ÿ  þ   ÿ  þ  þÿ  ýýÿú


 ÿÿù	þÿzQQMusicIE._real_extractN)Ú__name__Ú
__module__Ú__qualname__ÚIE_NAMEÚIE_DESCÚ
_VALID_URLÚ_TESTSrG   Ústaticmethodr)   rY   r'   r'   r'   r(   r
      s`   ùýùüù
 ÿôç+
ý
r
   c                   @   s(   e Zd Zedd„ ƒZdd„ Zdd„ ZdS )ÚQQPlaylistBaseIEc                 C   s   d| |d |d |f S )Nz)http://y.qq.com/y/static/%s/%s/%s/%s.htmlr3   r4   r'   )ÚcategoryrQ   r'   r'   r(   Úqq_static_urlš   s    zQQPlaylistBaseIE.qq_static_urlc                 C   s&   | j d|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-8Zyqqr   Úlistenr   )
r7   Z	inCharsetÚ
outCharsetÚplatformZneedNewCodeÚ	singermidÚorderÚbeginÚnumZ
songstatus)Úquery)rB   )rP   Úsingmidrn   r'   r'   r(   Úget_singer_all_songsž   s     öþz%QQPlaylistBaseIE.get_singer_all_songsc           	      C   sœ   g }d}|   ||¡}|  ||¡}|d dkrP|d d }|   ||¡}|  ||¡}|d d D ]:}|d  d¡d k	r\|d d }| |  d	| d
|¡¡ q\|S )Nr   Úcoder   r?   ÚtotalÚlistZ	musicDataÚsongmidz#https://y.qq.com/n/yqq/song/%s.htmlÚQQMusic)rq   Ú_parse_jsonrJ   rI   Ú
url_result)	rP   rp   ÚentriesZdefault_numZ	json_textZjson_obj_all_songsrs   Úitemru   r'   r'   r(   Úget_entries_from_page®   s"      ÿz&QQPlaylistBaseIE.get_entries_from_pageN)rZ   r[   r\   ra   rd   rq   r{   r'   r'   r'   r(   rb   ™   s   
rb   c                   @   s4   e Zd ZdZdZdZdddddœd	d
œZdd„ ZdS )Ú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.htmlZ001BLpXF2DyJe2r   z$md5:870ec08f7d8547c29c93010899103751©r   r   r   é   )r   r   Úplaylist_mincountc              	   C   sz   |   |¡}|  |¡}|  ||d¡}| jd|dd d�}d }|rj| jd|dddd	|d
œddid�}| d¡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   rg   Úxml)rf   ri   r7   rk   ÚRefererzhttps://y.qq.com/n/yqq/singer/)ro   Úheadersz./data/info/desc)rA   r{   rB   rC   Ú_download_xmlÚfindÚtextÚplaylist_result)rP   r   rQ   ry   Zsinger_pageÚsinger_nameZsinger_descZsinger_desc_pager'   r'   r(   rY   Ñ   s(    

   ÿ üzQQMusicSingerIE._real_extractN)rZ   r[   r\   r]   r^   r_   Ú_TESTrY   r'   r'   r'   r(   r|   Ã   s   ýù
r|   c                   @   sH   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d„ ZdS )Ú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.htmlZ000gXCTb2AhRR1u   æˆ‘ä»¬éƒ½æ˜¯è¿™æ ·é•¿å¤§çš„z$md5:179c5dce203a5931970d306aa9607ea6r}   é   ©r   r   Úplaylist_countz0https://y.qq.com/n/yqq/album/002Y5a3b3AlCu3.htmlZ002Y5a3b3AlCu3u   ê·¸ë¦¬ê³ ...z$md5:a48823755615508a95080e81b51ba729é   c                    sj   ˆ   |¡}ˆ  d| |d¡d }‡ fdd„|d D ƒ}| d¡}| d¡}|d k	rZ| ¡ }ˆ  ||||¡S )	NzMhttp://i.y.qq.com/v8/fcg-bin/fcg_v8_album_info_cp.fcg?albummid=%s&format=jsonzDownload album pager?   c                    s*   g | ]"}ˆ   d |d  d d|d ¡‘qS ©úhttps://y.qq.com/n/yqq/song/ru   ú.htmlrv   ©rx   ©r9   Úsong©rP   r'   r(   Ú
<listcomp>  s   þ  ÿz0QQMusicAlbumIE._real_extract.<locals>.<listcomp>rt   ÚnameÚdesc)rA   rF   rJ   Ústripr†   )rP   r   rQ   Úalbumry   Ú
album_nameZalbum_detailr'   r”   r(   rY   ý   s     
 þþ
ý

zQQMusicAlbumIE._real_extractN©rZ   r[   r\   r]   r^   r_   r`   rY   r'   r'   r'   r(   r‰   æ   s&   ýù	ýùør‰   c                   @   sZ   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d„ ZdS )Ú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:cb84b325215e1d21708c615cac82a6e7é2   c                    sj   ˆ   |¡}ˆ jd|dd|ddœd�}‡ fdd„|d	 D ƒ}| d
i ¡}| d¡}| d¡}ˆ  ||||¡S )Nz2http://i.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcgzDownload toplist pageZtoplistre   )ÚtypeZtopidr7   )r   ro   c                    s2   g | ]*}ˆ   d |d d  d d|d d ¡‘qS )r�   r?   ru   r�   rv   r‘   r’   r”   r'   r(   r•   8  s   ý 
þz2QQMusicToplistIE._real_extract.<locals>.<listcomp>ÚsonglistÚtopinfoZListNameÚinfo)rA   rF   rJ   r†   )rP   r   Úlist_idZtoplist_jsonry   r¤   Ú	list_nameÚlist_descriptionr'   r”   r(   rY   0  s    
 
ý
ý

zQQMusicToplistIE._real_extractNr›   r'   r'   r'   r(   rœ     s4   ýù	ýù	ýùðrœ   c                   @   sJ   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d„ ZdS )ÚQQMusicPlaylistIEzqqmusic:playlistu   QQéŸ³ä¹� - æ­Œå�•z7https?://y\.qq\.com/n/yqq/playlist/(?P<id>[0-9]+)\.htmlz.http://y.qq.com/n/yqq/playlist/3462654915.htmlZ
3462654915u   éŸ©å›½5æœˆæ–°æ­Œç²¾é€‰ä¸‹æ—¬z$md5:d2c9d758a96b9888cf4fe82f603121d4r}   r   zplaylist gone)r   r   rŒ   Úskipz/https://y.qq.com/n/yqq/playlist/1374105607.htmlZ
1374105607u   æ˜“å…¥äººå¿ƒçš„å�Žè¯­æ°‘è°£uí   æ°‘è°£çš„æ­Œæ›²æ˜“äºŽä¼ å”±ã€�ã€�æ­Œè¯�æœ—æœ—ä¼¤å�£ã€�æ—‹å¾‹ç®€å�•æ¸©é¦¨ã€‚å±žäºŽé‚£ç§�æ‰�å…¥è€³å­”ã€‚å�´ä¸Šå¿ƒå¤´çš„æ„Ÿè§‰ã€‚æ²¡æœ‰å¤ªå¤šçš„å¤�æ�‚æƒ…ç»ªã€‚ç®€å�•è€Œç›´æŽ¥åœ°è¡¨è¾¾ä¹�è€…çš„æƒ…ç»ªï¼Œå°±æ˜¯è¿™æ ·çš„ç®€å�•æ‰�æ˜“å…¥äººå¿ƒã€‚é   r‹   c              
      s®   ˆ   |¡}ˆ jd|ddddd|dœtd�}t| dg ¡ƒs`| d¡rXtd	|d  d
d�‚tdƒ‚|d d }‡ fdd„|d D ƒ}| d¡}tt| d¡ƒƒ}ˆ  ||||¡S )NzDhttp://i.y.qq.com/qzone-music/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcgzDownload list pager   r   )r¢   re   rf   ZonlysongZdisstid)ro   r5   Úcdlistrr   z1QQ Music said: error %d in fetching playlist infoT)ÚexpectedzUnable to get playlist infoc                    s*   g | ]"}ˆ   d |d  d d|d ¡‘qS rŽ   r‘   r’   r”   r'   r(   r•   k  s   þ  ÿz3QQMusicPlaylistIE._real_extract.<locals>.<listcomp>r£   Zdissnamer—   )	rA   rF   r   ÚlenrJ   r   r   r	   r†   )rP   r   r¦   Z	list_jsonr¬   ry   r§   r¨   r'   r”   r(   rY   [  s,    
 ü

þ
þ
zQQMusicPlaylistIE._real_extractNr›   r'   r'   r'   r(   r©   C  s(   ýø
ýù÷r©   )Ú
__future__r   r&   rN   r$   Úcommonr   Úutilsr   r   r   r	   r
   rb   r|   r‰   rœ   r©   r'   r'   r'   r(   Ú<module>   s    	*#+2