利用python从网易云喜欢歌单中获取适合跑步的歌曲

本文介绍了如何使用Python从网易云音乐的喜欢歌单中获取bpm为180的歌曲。首先,通过分析网页元素获取歌单信息和歌曲下载地址,接着使用音乐文件识别库music-tempo分析bpm,最后根据bpm将歌曲归类到相应的跑步配乐目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

佳节胖三斤,跑步减脂势在必行。而跑步配乐很重要,根据丹尼尔斯经典跑步训练法,长跑步频控制在180左右最为高效,下面我们使用python和nodejs从网易云喜欢歌单中挑选bpm为180左右的歌曲。

1.获取歌单音乐文件

获取歌单信息

登录网易云https://music.163.com,登录账户,点开“我的喜欢”,url形如:https://music.163.com/#/my/m/music/playlist?id=441143083。即ID形如441143083为我们要获取的歌单ID。以后根据此id即可获取歌单信息,不再次需要登录。

获取歌曲信息

分析歌单网页元素,发现每首歌都有一个唯一id,根据id构造成形如https://music.163.com/#/song?id=26883017的url,此页面为歌曲的详细信息,可以直接获取到歌名、歌手、专辑及封面等信息。下载地址并没有直接给出,需要进一步分析

获取下载地址

打开浏览器的Network抓包功能,点击播放按钮,可发现形如https://m10.music.126.net/20190201105733/434339567651b37996b1a8729b752930/ymusic/ae75/980f/7b41/83ffac06ee0af1802ce0e50e3d7a9208.mp3的url被加载,此url就是下载地址了。根据下载url,分析播放音乐时,加载的其他包,可以看到形如https://music.163.com/weapi/song/enhance/player/url?csrf_token=3755d273a3b04482f79f27997ad96efa请求返回的正是mp3的下载地址,而这个请求是post类型的,需要提交两个参数paramsencSecKey。这两个参数是从何而来?查找网页的所有js文件,发现https://s3.music.126.net/web/s/core_4400a8199614820ac541685ca5726316.js?4400a8199614820ac541685ca5726316中包含paramsencSecKey,格式化js文件后在12984和19852行可以看到相关代码

var bUK5P =window.asrsea(JSON.stringify(i5n), brA7t(["流泪", "强"]), brA7t(WU9L.md), brA7t(["爱心", "女孩", "惊恐", "大笑"]));
        e5j.data = k5p.cz6t({
            params: bUK5P.encText,
            encSecKey: bUK5P.encSecKey
        })

发现params和enSecKey和window.asrsea函数有关。
windows.asrsea()的代码为

!function() {
    function a(a) {
	var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
	for (d = 0; a > d; d += 1)
	    e = Math.random() * b.length,
	    e = Math.floor(e),
	    c += b.charAt(e);
	return c
    }
    function b(a, b) {
	var c = CryptoJS.enc.Utf8.parse(b)
	  , d = CryptoJS.enc.Utf8.parse("0102030405060708")
	  , e = CryptoJS.enc.Utf8.parse(a)
	  , f = CryptoJS.AES.encrypt(e, c, {
	    iv: d,
	    mode: CryptoJS.mode.CBC
	});
	return f.toString()
    }
    function c(a, b, c) {
	var d, e;
	return setMaxDigits(131),
	d = new RSAKeyPair(b,"",c),
	e = encryptedString(d, a)
    }
    function d(d, e, f, g) {
	var h = {}
	  , i = a(16);
	return h.encText = b(d, g),
	h.encText = b(h.encText, i),
	h.encSecKey = c(i, e, f),
	h
    }
    function e(a, b, d, e) {
	var f = {};
	return f.encText = c(a + e, b, d),
	f
    }
    window.asrsea = d,
    window.ecnonasr = e
}();

windows.asrsea即为函数名为d的函数,d函数有4个参数d,e,f,g;
经加断点调试,发现函参数d内有三个属性br,csrf_token,ids,其中ids为音乐id,csrf_token为url中的参数值,经测试csrf_token在实际构造请求时可以为任何值;br为128000,估计是波特率,对应音质的;参数e,f,g为常量。

e=010001”
f=00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a87
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值