最近在仿写某项目时,打算加入一些新的功能,需要用到通过歌曲名称来搜索歌曲信息的功能(数据可靠性无法保证),这些在各大音乐厂商那有现成的,调研了几大厂家后,决定使用酷狗,恭喜酷狗
酷狗音乐的搜索功能中,加入了一个signature的参数,该参数必传,这让你的爬虫无法稳定的使用该接口
1.找到接口,并搜索该参数
全局搜索该参数signature
在inf_public-min.js中找到了该参数,在此文件中找到生成逻辑,找到时,最好打断点看参数
2.通过代码,编写生成逻辑
断点调试发现,是该接口传递的所有参数的字符串计算md5值
const date = new Date()
const timestamp = date.getTime()
const keyword = ctx.request.query.keyword
// 分析思路
// 找到搜索的接口url,通过f12找到源代码
const qs = {
bitrate: 0,
callback: 'callback123',
clienttime: timestamp,
clientver: 2000,
dfid: '-',
inputtype: 0,
iscorrection: 1,
isfuzzy: 0,
keyword: keyword,
mid: timestamp,
page: 1,
pagesize: 10,
platform: 'WebFilter',
privilege_filter: 0,
srcappid: 2919,
tag: 'em',
userid: 0,
uuid: timestamp,
}
let list = []
for (const i in qs) {
const key = i
const value = qs[i]
list.push(`${key}=${value}`)
}
list.push("NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt")
list.unshift("NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt")
qs['signature'] = md5(list.join("")).toUpperCase()
这样signature就生成完成了,但是这显然没有达到我的功能,我需要取到搜索结果的第一条数据的详情数据
3.获取歌曲详情接口和分析
通过浏览器f12,可以得到接口如下:
https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery1910851602793140904_1632815623535&hash=84ABD20BA9309A7ECF2DA088A96CF2FE&dfid=3LJTRh3BvJ6w1mshPz3VOn5w&appid=1014&mid=62271a1334b6cf7d8d312b336b13ad3d&platid=4&album_id=4316898&_=1632815623536
这其中有部分参数可以从搜索接口中获取到,比如hash和album_id
在经过多次刷新后,发现mid的参数是动态的,这时任务又来,又要浪淘沙了
通过此接口的请求信息发现,调用地方在playbyAudio.js内部,通过搜索传递参数,发现了下方代码
看到了mid参数是通过kgUser.getKgMid()获取,在控制台调用window.KgUser.getKgMid()确实获取到了mid,那就寻找KgUser的位置,全局搜索此变量名,发现在
找到此文件
真相大白,找到e函数就ok了
完事了,下方完整代码:
function kgSongDetail(item) {
// mid 是通过guid生成 md5 生成
function guid() {
function e() {
return (65536 * (1 + Math.random()) | 0).toString(16).substring(1)
}
return e() + e() + "-" + e() + "-" + e() + "-" + e() + "-" + e() + e() + e()
}
return new Promise(((resolve, reject) => {
request({
url: 'https://wwwapi.kugou.com/yy/index.php',
qs: {
r: "play/getdata",
callback: "jQuery10086",
hash: item.FileHash,
appid: 1014,
mid: md5(guid()),
platid: 4,
album_id: item.AlbumID
},
headers: {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"referer": "https://www.kugou.com/"
}
}, function (err, res, body) {
resolve({data: body})
})
}))
}
评论列表
已有0条评论