酷狗音乐搜索爬虫解析

网络爬虫 2021-09-28 51

最近在仿写某项目时,打算加入一些新的功能,需要用到通过歌曲名称来搜索歌曲信息的功能(数据可靠性无法保证),这些在各大音乐厂商那有现成的,调研了几大厂家后,决定使用酷狗,恭喜酷狗

酷狗音乐的搜索功能中,加入了一个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条评论