音乐从哪里来?

现在互联网提供开放音乐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:播放码,这是这次请求获得的最重要的参数,它用于组织音乐源地址

三、组织音乐源地址

有了上面取得的FilenameVKEY信息之后,再结合上一步的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}图片的尺寸,腾讯提供的专辑封面图片都是正方形,而且尺寸固定为三种:90x90180x180300x300

{1}专辑MID,在第一步中已经获得该信息

这个请求直接返回图片数据,可以直接在浏览器中显示。

更多相关文章

  1. 基于scrapy框架的关于58同城招聘网站信息的爬取
  2. python爬虫:爬取豌豆荚APP第一页数据信息(selenium)
  3. 信息隐藏-空域隐藏-python-LSB
  4. 我需要帮助完成这个生物信息学计划
  5. 运用Python语言编写获取Linux基本系统信息(三):Python与数据库编
  6. 使用python实现一个简单的学生信息管理系统
  7. Python脚本如何获取当前环节和用户等信息
  8. 使用/proc/meminfo文件查看内存状态信息
  9. 通过指令“ps -l”查看进程信息

随机推荐

  1. redis 6.0源码安装
  2. Ansible 之 ansible-doc模块文档说明
  3. 硬货来了!轻松掌握 MongDB 流式聚合操作
  4. JavaScript引擎是如何工作的?从调用栈到Pr
  5. WebSockets实战:在 Node 和 React 之间进
  6. 干货丨时序数据库DolphinDB横截面引擎教
  7. 一步步教你用 WebVR 实现虚拟现实游戏[每
  8. 用惰性加载优化 React 程序[每日前端夜话
  9. 聊聊我的 Java 自学之路
  10. 用JavaScript实现插入排序[每日前端夜话0