基于 Express + Axios 的 QQ音乐接口 nodejs 版
文件列表(压缩包大小 76.61K)
免费
概述
QQMusicApi
这是一个基于 Express + Axios 的 Nodejs 项目
对于所有处理过的返回数据,都会包含 result
,100
表示成功,500
表示穿参错误,400
为 node 捕获的未知异常,301
表示缺少用户登陆的 cookie
关于如何在服务器上存储 cookie
,可以查看接口 设置用户Cookie
开始
$ git clone git@github.com:jsososo/QQMusicApi.git
$ npm install
$ npm start
项目默认端口为3300
,默认qq号 1234567 (设置Cookie),可以通过修改 bin/config.js
或设置启动参数 PORT=3400QQ=7654321 npm start
如果使用的是微信号,则将 bin/config.js
中的 qq好改为wxuin
,具体数值可以在网页版qq音乐的 cookie 中获取
如果需要启用数据统计、ip拦截等,可以将bin/config.js
中的 useDataStatistics
设为 true
(会存在直接拦截部分来自其他后台的请求)
常见问题
1、为什么无法获取音乐链接等?
请确保已正确添加绿钻账号 Cookie 信息,具体操作可以查看 设置用户cookie,检测是否设置成功可以查看 查看当前cookie
2、为什么返回了 自己起一个 node 服务 这么难??
或 被加入了黑名单 ?
第一个,服务默认禁止了一些明显来源于爬虫的接口,可以将 util/dataStatistics.js
中相关代码注释重启, 如果短时大量请求会被拉入黑名单,可以通过移除黑名单、加入白名单,或者干脆在 app.js
里注释 dataHandle
相关代码
更新记录 21-02-10 修复部分歌手页面报错 & 增加歌手名字获取 21-02-09 修复日推歌单 & 部分歌手详情格式问题 21-01-19 优化404报错 21-01-17 优化获取链接接口报错提示 21-01-06: 底层格式修改,方便 electron 整合调用 20-12-15: 修复歌曲链接失效 20-08-03: 支持微信登录 20-08-03: 部分接口增加缓存策略 20-07-14: 修改了因图标导致的无法部署 20-06-24: 获取用户创建歌单接口出错 20-05-21: 新增推荐 banner、url 支持重定向、配置化启动 20-04-23: 修复高品音质获取失败问题 20-04-18: 写死的参数替换 20-04-14: 日推 20-04-07: 接口记录问题 20-03-30: 收藏歌单操作,获取用户收藏的歌单/专辑 20-03-22: 去除 cookie 中 uin 的其他字母 20-02-15: 新增评论操作相关接口 20-02-01: 新增多个歌单操作相关接口 20-01-31: 配合 chrome 插件自动获取存储 cookie 20-01-30: 增加快速搜索接口、歌单、专辑、歌单、mv的评论获取 20-01-19: issue#9 20-01-17: 更新歌曲链接的域名ip 20-01-09: 反馈 20-01-07: 歌单搜索接口修改 19-12-23: 排行榜相关接口优化、新增相似歌曲、相关歌单、相关mv 19-12-18: 批量获取歌曲信息、top排行榜数据优化 19-12-11: 高频ip黑白名单 19-12-05: 获取 mp3 和无损 ape、flac 等格式链接 19-11-14: 排行榜 19-10-29: 搜索歌手,专辑信息查询 19-10-15: url 获取 19-10-10: 热搜词、关注歌手、关注粉丝列表 19-09-23: 歌单、mv 的分类获取 19-09-21: 新增 MV 信息、根据分类筛选歌手、新碟推荐、新 MV 推荐 19-09-20: 支持在线测试 19-09-20: 新增 mv 接口,返回结果优化 19-09-19: 评论、推荐、歌手接口 19-09-18: init
公用参数说明
!> 非常重要,特别是和登陆 cookie 有关的参数
1、raw
前面提到的,默认为 0,
如果传了非0参数,则表示使用原汁原味的数据结构
2、ownCookie
默认为 0
,使用服务器上预存的 cookie
信息, 非0表示使用浏览器传过来的 cookie
,如果不使用的话,部分接口会遇到 301
, 如果该用户非 vip,也无法获取大部分歌曲的播放链接,我自己会不定时的更新这个服务器上(api.qq.jsososo.com)的 cookie
作为登陆用户
播放链接
/song/urls
id
: 歌曲的songmid
,必填,多个用逗号分割,该接口可用post
或get
并不是所有的音乐都能获取到播放链接,如果是未登陆或非 vip 用户的 cookie,只能获取到非 vip 用户可听的歌曲, 其他像一些必须要购买数字专辑才能收听的歌曲,如果未购买也是无法获取的,无法获取到的播放链接则不会在返回的对象中出现, 这点需要大家自己做好兼容,我这里服务器会默认使用自己会员的 cookie,如果需要使用自己的 cookie,请参考上面文档 示例:http://api.qq.jsososo.com/song/urls?id=0039MnYb0qxYhV,004Z8Ihr0JIu5s
// 晴天和七里香{
"data": {
"0039MnYb0qxYhV": "http://ws.stream.qqmusic.qq.com/C400002202B43Cq4V4.m4a?guid=2796982635&vkey=0A1ADCEDC042ABE27FE184A3436DBB6F15AFF286F0F06DDFAEA9ADAF2D82F67EF33746A9472F62B444B7E7CEB32EE0D34DFD53A6E2D97D7B&uin=1899&fromtag=66",
"004Z8Ihr0JIu5s": "http://ws.stream.qqmusic.qq.com/C4000012Ez0a1tFcOI.m4a?guid=2796982635&vkey=DB0E16676C581AE2E762FCA5D32FBB52454EA229C6BD58D9BA2976BA7CC3E49532EA299860E0F219148005848530335ABC254EC7A3374F80&uin=1899&fromtag=66"
},
"result": 100}
下载链接
这个接口跟上个接口一样,也是依赖服务器的 Cookie 信息的,不支持批量获取,不一定是全部的歌曲都有无损、高品的, 要注意结合size320
,sizeape
,sizeflac
等参数先判断下是否有播放链接
搜索
key
: 关键词 必填pageNo
: 页码,默认 1pageSize
: 一页返回数量,默认 20t
: 搜索类型 默认为 0 // 0:单曲,2:歌单,7:歌词,8:专辑,9:歌手,12:mv获取热搜词
/search/hot
k
为热搜词,n
为搜索量{
"result": 100,
"data": [
{
"k": "PHOENIX 涅槃 ",
"n": 440301
},
{
"k": "嚣张 ",
"n": 430912
},
...
]}
快速搜索
/search/quick
查找音乐 单个查找
/song/find
这个接口就像是简化版的搜索,根据关键词获取到搜出的第一个歌曲,不过他会直接带上播放链接,参数为url
, 如果没有则表示无法获取到播放链接。这个接口的作用是,对于其他平台的歌单如果需要获取到企鹅音乐的信息时, 可以通过 歌名 + 歌手 + 专辑 等关键词获取大致的歌曲,当然这是并不能保障稳定的。
批量获取
/song/finds
post
key
为歌曲id,value
为搜索关键词同样,并不是所有传过去的 id 都会有返回,没返回就是没有找到,返回的歌曲也都是会包含播放链接
anxios({
url: "/song/finds",
method: "post",
data: {
298838: "笑忘书 王菲",
abcdefg: "邮差 王菲"
}})
// 返回:
{
data: {
208838: obj,
abcdefg: obj,
},
result: 100,}
用户信息
设置用户Cookie
/user/setCookie
aaa=bbb; ccc=ddd; ....
该方法仅支持 post
请求,content-type
选择 application/json
,同时,当且仅当传入的 cookie 为写配置的 QQ 号(启动参数 或 bin/config.js
)时才会 被作为默认的公用 cookie 存储使用,各位在搭建自己的服务时记得修改这里的信。参考如下 :
查看当前Cookie
/user/cookie
cookie
为当前网站下的 cookie,userCookie
为服务器公用账号 cookie。用户主页信息 !> 这个接口是需要登陆 cookie 才能获取的,不然会返回 301,所以如果有误需要考虑一下可能是 cookie 过期
/user/detail
mymusic
为喜欢的音乐,mydiss
为用户创建的歌单,需要注意的是,喜欢的音乐中的歌单id为 id,歌单中的歌单id为 dissid
示例:http://api.qq.jsososo.com/user/collect/songlist?id=123456用户创建的歌单
/user/songlist
示例:http://api.qq.jsososo.com/user/songlist?id=123456
用户收藏的歌单
接口:/user/collect/songlist
参数:
uin
示例:http://api.qq.jsososo.com/user/collect/songlist?id=123456
用户收藏的专辑
/user/collect/album
uin
歌单 1、获取歌单详情
/songlist
返回说明: 这些表示各种码率对应的文件大小,如果为0则表示该格式的文件不存在
{
"size128": 1922927,
"size320": 4803503,
"sizeape": 10810010,
"sizeflac": 10827560,}
2、获取歌单分类
/songlist/category
这个接口没有参数,返回几种类型下的小分类 id
和 name
,不同于歌手的筛选,搜索歌单时只能用一个 id
,不能用且关系。
示例:http://api.qq.jsososo.com/songlist/category
3、根据分类获取歌单
/songlist/list
4、歌曲id、mid的哈希表 !> 这个接口强制使用浏览器传来的用户 Cookie 信息
/songlist/map
这个接口只能获取用户自己创建的歌单且只会返回歌曲的 id 和 mid 的哈希表,不包含其他数据
5、添加歌曲到歌单 !> 这个接口强制使用浏览器传来的用户 Cookie 信息
6、从歌单中移除歌曲 !> 这个接口强制使用浏览器传来的用户 Cookie 信息
/songlist/remove
与上一个添加接口不同,移除需要 id 不是 mid
7、新建歌单 !> 这个接口强制使用浏览器传来的用户 Cookie 信息
/songlist/create
如果歌单名重复,也会报错
8、删除歌单 !> 这个接口强制使用浏览器传来的用户 - Cookie 信息
/songlist/delete
9、收藏/取消收藏 歌单 !> 这个接口强制使用浏览器传来的用户 Cookie 信息
/songlist/collect
歌曲信息 单个获取
/song
这个接口包含了很多的歌曲信息,包括歌手、专辑、语种、曲风等,但是不包含歌词,songinfo.data.track_info.album.mid
为专辑的 mid, 下面为专辑封面图片的路径,在搜索接口中也能获取到这个参数。
https://y.gtimg.cn/music/photo_new/T002R300x300M000${mid}.jpg
批量获取
这个接口本质为上一个接口的批量调用
相似歌曲
返回相似歌曲列表
相关歌单
相关MV
/song/mv
返回相关mv列表 示例:http://api.qq.jsososo.com/song/mv?id=5105986
歌词
返回的接口中lyric
和trans
分别是歌词和翻译,转成了base64,这里node进行了解码。
示例:http://api.qq.jsososo.com/lyric?songmid=0039MnYb0qxYhV
示例:http://api.qq.jsososo.com/lyric?songmid=0039MnYb0qxYhV
推荐歌单 1、为你推荐歌单
/recommend/playlist/u
这个接口不需要参数,需要注意,和下面这个接口的数据格式不同
2、按分类推荐歌单
/recommend/playlist
3、日推
/recommend/daily
这个接口无需参数,强制使用传进来的 Cookie,返回日推歌单信息
4、轮播图Banner
这个接口无需参数,目前仅已知会返回专辑推荐,但是只能获取albumid
,非albummid
最新推荐 1、新歌推荐
/new/songs
type
,但是为了考虑与下面的新专和mv接口做兼容,所以做了改动2、新碟推荐(专辑)
接口:/new/album
参数:
type: 地区分类,默认为 1 // 1:内地,2:港台,3:欧美,4:韩国,5:日本,6:其他
num: 默认 10
这里和官方接口的参数是一致的
示例:/new/album
3、新 MV 推荐
/new/mv
歌手 1、歌手介绍
/singer/desc
获取歌手的一些详细信息介绍
2、获取热门歌曲
/singer/songs
3、获取歌手专辑
/singer/album
4、获取mv
/singer/mv
5、相似歌手
/singer/sim
官方接口是有返回数量参数的,但是最多只返回10个,所以这里就写死返回 10 个
6、获取歌手分类
/singer/category
这个接口没有参数,会返回 地区:area,类型:genre,首字母:index,性别/组合:sex 这些分类项的各个数据
7、根据分类获取歌手列表
/singer/list
这个接口固定返回 80 条信息
专辑 1、获取专辑信息
/album
2、获取专辑内的歌曲
/album/songs
评论 1、获取评论
/comment
当 pageNo
为 1 且 type
为 0 时,会返回15条热评 hot_comment
返回结果说明:ispraise
表示这条评论是否被赞过,1: 是,0: 否;enable_delete
表示这条评论是否能被删除,1: 是,0: 否
上述的判断以 cookie 中的uin
账号为准
2、发送评论
/comment/send
该接口需要用户登陆 cookie
3、删除评论
/comment/del
该接口需要用户登陆 cookie
只要登陆情况下,一般这个接口返回的都是操作成功,不管 id 是否存真实在。
4、点赞评论
/comment/like
该接口需要用户登陆 cookie
电台 1、电台分类
/radio/category
返回电台场景分类以及场景下的各个电台
2、获取电台歌曲
获取电台中歌曲,其中个性电台需要登陆 cookie
MV 1、获取 MV 信息
/mv
返回 info 为 MV 信息,recommend 为相关推荐的 MV
2、获取 MV 播放链接
/mv/url
返回的链接都是可以直接播放的完整mv视频
3、获取 MV 分类
/mv/category
和获取歌手分类接口类似4、根据分类获取 MV 列表
/mv/list
排行榜 1、获取榜单列表
这个接口列出了几个榜单的分类,包含了榜单名、榜单 id、更新时间、播放量,(榜单介绍、前三歌曲非必传回)
2、获取榜单详情
/top
传入的 time
、period
并非必定与传回参数相同,比如,当榜单最新时间为 2019_49, 而传入 period=2019_50
时,会返回 2019_49的榜单, 虽然这里不传或传入错误的 period 也会返回正确的数值,但是实际是通过第一次请求返回的结果来验证period
是否正确,如果不正确会再进行第二次请求, 因此会造成返回的比较慢,尽量都传入上一个接口中返回的period
关注、粉丝 1、获取关注的歌手列表
/user/follow/singers
该接口需要用户登陆 cookie
2、获取关注的用户列表
/user/follow/users
该接口需要用户登陆 cookie
3、获取用户的粉丝列表
/user/fans
该接口需要用户登陆 cookie
4、关注/取消关注 歌手
/user/follow
该接口需要用户登陆 cookie
接口调用统计 接口的数据统计包含系统、ip、路径、浏览器等信息,已经忽略掉 node 接口自身调用的情况,数据为用 json 方式存储 (我会说是因为我不会用数据库嘛 /data 下还包含了很多其他接口,不过大部分都是用户不需要的,给管理员调用的,所以大家在源码里自己探索吧 1、获取数据统计
ip, browser, browserVersion, os, osVersion, path, url, host
如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈
评论(0)