3
›b`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20141227u	   æž—ä¿Šæ�°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jƒ d ƒd } t ttjƒ d ƒ|  d ƒS )Niè  iÿÿÿg    _ B)ÚintÚtimeÚroundÚrandom)ZcurMs© r&   úHC:\Users\Broad\Desktop\All-Down\binaries\youtube_dl\extractor\qqmusic.pyÚm_r_get_ruinG   s    zQQMusicIE.m_r_get_ruinc             C   s˜  | j |ƒ}| jd| |dddd�}| jd|dƒ}| jd|d	d d
�}|rR|jddƒ}| jd|dd d
�}| jd|dd d
�}|r†|jddƒ}d }| jddg|dd d
�}	|	r¾d|	d,d-… |	d. |	f }| jƒ }
| jd|
 |ddtd�d }g }xL| jj	ƒ D ]>\}}|j
d|d ||d  ||
f |||d! |jd"ƒd#œƒ qòW | j||ƒ | j|ƒ djd$d%„ tj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.jpgr   r   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 )r0   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éþÿÿÿéÿÿÿÿr>   )Ú	_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_timer/   Úlrc_contentÚthumbnail_urlZalbummidÚguidÚvkeyr8   r4   ÚdetailsZactual_lrc_lyricsr   r&   r&   r'   Ú_real_extractL   sr    





zQQMusicIE._real_extractN)Ú__name__Ú
__module__Ú__qualname__ÚIE_NAMEÚIE_DESCÚ
_VALID_URLÚ_TESTSrE   Ústaticmethodr(   rW   r&   r&   r&   r'   r
      sJ   

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.htmlr   r   r=   r>   r&   )ÚcategoryrO   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Úutf8zutf-8Zyqqr   Úlistenr   )
r3   Z	inCharsetÚ
outCharsetÚplatformZneedNewCodeÚ	singermidÚorderÚbeginÚnumZ
songstatus)Úquery)r@   )rN   Úsingmidrk   r&   r&   r'   Úget_singer_all_songsž   s    z%QQPlaylistBaseIE.get_singer_all_songsc       	      C   s    g }d}| j ||ƒ}| j||ƒ}|d dkrP|d d }| j ||ƒ}| j||ƒ}xJ|d d D ]:}|d jdƒd k	r^|d d }|j| jd	| d
|ƒƒ q^W |S )Nr   Úcoder   r;   ÚtotalÚlistZ	musicDataÚsongmidz#https://y.qq.com/n/yqq/song/%s.htmlÚQQMusic)rn   Ú_parse_jsonrH   rG   Ú
url_result)	rN   rm   ÚentriesZdefault_numZ	json_textZjson_obj_all_songsrp   Úitemrr   r&   r&   r'   Úget_entries_from_page®   s    z&QQPlaylistBaseIE.get_entries_from_pageN)rX   rY   rZ   r_   rb   rn   rx   r&   r&   r&   r'   r`   ™   s   r`   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001BLpXF2DyJe2u	   æž—ä¿Šæ�°z$md5:870ec08f7d8547c29c93010899103751)r   r   r   é   )r   r   Úplaylist_mincountc          	   C   sz   | j |ƒ}| j|ƒ}| j||dƒ}| jd|dd d�}d }|rj| jd|dddd	|d
œddid�}|jdƒj}| j||||ƒS )NzDownload singer pagezsingername\s*:\s*'(.*?)'zsinger name)r,   z>http://s.plcloud.music.qq.com/fcgi-bin/fcg_get_singer_desc.fcgzDonwload singer description XMLr   zutf-8Úxml)rd   rf   r3   rh   ÚRefererzhttps://y.qq.com/n/yqq/singer/)rl   Úheadersz./data/info/desc)r?   rx   r@   rA   Ú_download_xmlÚfindÚtextÚplaylist_result)rN   r   rO   rv   Zsinger_pageÚsinger_nameZsinger_descZsinger_desc_pager&   r&   r'   rW   Ñ   s    

zQQMusicSingerIE._real_extractN)rX   rY   rZ   r[   r\   r]   Ú_TESTrW   r&   r&   r&   r'   ry   Ã   s   ry   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:179c5dce203a5931970d306aa9607ea6)r   r   r   é   )r   r   Úplaylist_countz0https://y.qq.com/n/yqq/album/002Y5a3b3AlCu3.htmlZ002Y5a3b3AlCu3u   ê·¸ë¦¬ê³ ...z$md5:a48823755615508a95080e81b51ba729é   c                sj   ˆ j |ƒ}ˆ jd| |dƒd }‡ fdd„|d D ƒ}|jdƒ}|jdƒ}|d k	rZ|jƒ }ˆ j||||ƒ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 | ]"}ˆ j d |d  d d|d ƒ‘qS )zhttps://y.qq.com/n/yqq/song/rr   z.htmlrs   )ru   )r5   Úsong)rN   r&   r'   ú
<listcomp>  s   z0QQMusicAlbumIE._real_extract.<locals>.<listcomp>rq   ÚnameÚdesc)r?   rD   rH   Ústripr‚   )rN   r   rO   Úalbumrv   Ú
album_nameZalbum_detailr&   )rN   r'   rW   ý   s    



zQQMusicAlbumIE._real_extractN)rX   rY   rZ   r[   r\   r]   r^   rW   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:89db2335fdbb10678dee2d43fe9aba08)r   r   r   éd   )r   r   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 |ƒ}ˆ jd|dd|ddœd�}‡ fdd„|d	 D ƒ}|jd
i ƒ}|jdƒ}|jdƒ}ˆ j||||ƒS )Nz2http://i.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcgzDownload toplist pageZtoplistrc   )ÚtypeZtopidr3   )r   rl   c                s2   g | ]*}ˆ j d |d d  d d|d d ƒ‘qS )zhttps://y.qq.com/n/yqq/song/r;   rr   z.htmlrs   )ru   )r5   r‰   )rN   r&   r'   rŠ   8  s   z2QQMusicToplistIE._real_extract.<locals>.<listcomp>ÚsonglistÚtopinfoZListNameÚinfo)r?   rD   rH   r‚   )rN   r   Úlist_idZtoplist_jsonrv   r˜   Ú	list_nameÚlist_descriptionr&   )rN   r'   rW   0  s    



zQQMusicToplistIE._real_extractN)rX   rY   rZ   r[   r\   r]   r^   rW   r&   r&   r&   r'   r�     s&   
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:d2c9d758a96b9888cf4fe82f603121d4)r   r   r   r   zplaylist gone)r   r   r‡   Úskipz/https://y.qq.com/n/yqq/playlist/1374105607.htmlZ
1374105607u   æ˜“å…¥äººå¿ƒçš„å�Žè¯­æ°‘è°£uí   æ°‘è°£çš„æ­Œæ›²æ˜“äºŽä¼ å”±ã€�ã€�æ­Œè¯�æœ—æœ—ä¼¤å�£ã€�æ—‹å¾‹ç®€å�•æ¸©é¦¨ã€‚å±žäºŽé‚£ç§�æ‰�å…¥è€³å­”ã€‚å�´ä¸Šå¿ƒå¤´çš„æ„Ÿè§‰ã€‚æ²¡æœ‰å¤ªå¤šçš„å¤�æ�‚æƒ…ç»ªã€‚ç®€å�•è€Œç›´æŽ¥åœ°è¡¨è¾¾ä¹�è€…çš„æƒ…ç»ªï¼Œå°±æ˜¯è¿™æ ·çš„ç®€å�•æ‰�æ˜“å…¥äººå¿ƒã€‚é   )r   r   r‡   c          
      s®   ˆ j |ƒ}ˆ jd|ddddd|dœtd�}t|jdg ƒƒs`|jdƒrXtd	|d  d
d�‚tdƒ‚|d d }‡ fdd„|d D ƒ}|jdƒ}tt|jdƒƒƒ}ˆ j||||ƒS )NzDhttp://i.y.qq.com/qzone-music/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcgzDownload list pager   r   )r–   rc   rd   ZonlysongZdisstid)rl   r1   Úcdlistro   z1QQ Music said: error %d in fetching playlist infoT)ÚexpectedzUnable to get playlist infoc                s*   g | ]"}ˆ j d |d  d d|d ƒ‘qS )zhttps://y.qq.com/n/yqq/song/rr   z.htmlrs   )ru   )r5   r‰   )rN   r&   r'   rŠ   k  s   z3QQMusicPlaylistIE._real_extract.<locals>.<listcomp>r—   ZdissnamerŒ   )	r?   rD   r   ÚlenrH   r   r   r	   r‚   )rN   r   rš   Z	list_jsonr    rv   r›   rœ   r&   )rN   r'   rW   [  s$    




zQQMusicPlaylistIE._real_extractN)rX   rY   rZ   r[   r\   r]   r^   rW   r&   r&   r&   r'   r�   C  s   
r�   )Ú
__future__r   r%   rL   r#   Úcommonr   Úutilsr   r   r   r	   r
   r`   ry   r…   r�   r�   r&   r&   r&   r'   Ú<module>   s    	*#+2