您的位置:首页 > 运维架构 > Linux

一个在线音乐软件的故事(三、音乐从哪里来?)

2017-08-27 09:28 330 查看

音乐从哪里来?

现在互联网提供开放音乐API接口的平台还是比较多的,比如:百度音乐API接口、腾讯音乐API接口、虾米音乐API接口甚至中国移动都曾经有过音乐API接口,有兴趣可以度娘一下,还有很多知名不知名的互联网平台都提供音乐API的接口。
经过音乐数量、音乐品质、用户数量、开发复杂度等方面的比较,最终选择了腾讯QQ音乐作为音乐源。但是腾讯的API是在移动设备上对QQ音乐软件的调用,对于我等开发桌面应用来说,依然没有什么用处,无奈之下只能直接分析QQ在线音乐的有关接口。
经过天(分)人(析)交(请)战(求),得出以下几个基本接口及其使用方法:

一、音乐信息搜索

主要是获取音乐的基本信息,如:歌曲名称、media_mid媒体ID(后面需要用到)、歌手信息、专辑信息、封面信息、歌词信息等等,具体方法与过程如下:
音乐信息的搜索地址:
https://c.y.qq.com/soso/fcgi-bin/client_search_cp?t=0&aggr=1&cr=1&lossless=0&flag_qc=0&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&p={0}&n={1}&w={2}
上面的请求地址中有三个参数:
{0}表示页码。
{1}表示每页显示的记录数量。
{2}表示要搜索的关键字,多个关键字可以用空格分开。
这个请求发出之后,服务器会响应一个包含搜索结果的JSON字符串,在这个字符串中包含了音乐的所有信息,格式和信息的含义这里暂不逐一说明,只说我们需要用到的部分,基本信息如下:
Albumid:专辑ID编号。
Albummid:专辑MID编号,在获取专辑封面图片等信息时,都需要用这个参数。
Albumname:专辑名称。
Songid:音乐ID编号。
Songmid:音乐MID编号,在获取播放KEY和音乐数据时,需要用到这个参数。
Songname:音乐名称。
Interval:音乐时间长度,单位是秒。
Pubtime:音乐发布时间。
Songurl:音乐介绍页面的地址,指向音乐信息的Web页面。
Nt:不是非常清楚这个参数的含义和作用,我是用来作为获取音乐信息的GUID。
Singer:歌手或表演者信息,是个数组,包含了歌手的姓名、MID等信息。

二、获取音乐播放KEY信息

从腾讯搜索到的所有音乐信息中并没有包含音乐的直接播放地址,真正的音乐地址需要通过获取播放KEY之后才能组织出来,继续分析获取播放KEY的请求:
https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&cid=205361747&callback=MusicJsonCallback&uin=0&songmid={0}&filename=C400{0}.{1}&guid={2}
上面这个请求地址有四个参数,其中两个参数相同,具体含义是:
{0}上一步获得的音乐MID。
{1}音乐的扩展名,默认是m4a。
{2}GUID,一个随机数,但是要保留,在下一步中还要使用,这个软件中是使用上一步获取的Nt参数作为GUID。
这个请求也是返回一个JSON字符串。但这个字符串会包含MusicJsonCallback()函数的回调,解析之前要先删除这部分回调文本。
这个JSON对象的主要参数说明如下:
Code:响应码,成功响应0,其他为错误,同时会包含错误信息
Filename:文件名
Songmid:音乐MID,和上面请求参数中的MID相同
Vkey:播放码,这是这次请求获得的最重要的参数,它用于组织音乐源地址

三、组织音乐源地址

有了上面取得的Filename、VKEY信息之后,再结合上一步的GUID,就能组织出一个音乐源的请求地址,基本格式如下:
http://dl.stream.qqmusic.qq.com/{0}?vkey={1}&guid={2}&fromtag=66
音乐地址是固定的,里面有三个参数,具体含义是:
{0}文件名,在上一步请求中获得
{1}VKEY,播放KEY信息,在上一步请求中获得
{2}GUID,必须与上一步发送给服务器的请求GUID相同
该请求直接返回可以播放的音频数据,可以在支持HTML5的浏览器中直接播放。此地址也作为音乐下载地址使用。

四、获取专辑封面图片

有了音乐源之后,音乐是可以播放了,但还要显示专辑封面图片,才能与主流播放器一样,组织出完整的播放界面。腾讯音乐有专门的专辑封面图片服务器,可以通过下面的请求获得封面图片数据:
https://y.gtimg.cn/music/photo_new/T002R{0}x{0}M000{1}.jpg?max_age=2592000
这个请求包含两个参数:
{0}图片的尺寸,腾讯提供的专辑封面图片都是正方形,而且尺寸固定为三种:90x90、180x180、300x300。
{1}专辑MID,在第一步中已经获得该信息
这个请求直接返回图片数据,可以直接在浏览器中显示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息