酷我音乐解析mp3

通过js解析酷我音乐的流地址

缘由

最近经常听到的一首歌曲,但是不知道是什么歌曲名,直到一个偶然的机会,我找到了这个音乐
清新的小女孩,习惯于其他音乐播放器的我,希望下载这首动听的歌曲,但是有意思的是歌曲的下载必须要下载客户端。由于某人比较懒,所以就开启了解析解析之路

1)http://m.kuwo.cn/newh5/singles/songinfoandlrc?musicId=72891154&reqId=5e80bd50-69f9-11ea-91f5-c5b065da4b63
(2)http://www.kuwo.cn/url?format=mp3&rid=73068685&response=url&type=convert_url3&br=128kmp3&from=web&t=1584632489746&reqId=17b249acXea5dX4164Xb6eeX8de501c2ed6a

思路

  • 先请求(1)链接,获取到 reqid ,36位字符串。拼接到(2),就可以获取到这首歌mp3的下载地址
  • 所以目标变成了,如何获取到(1)中的 ·reqId,类似于(5e80bd50-69f9-11ea-91f5-c5b065da4b63)这一字符串的形式,这个是通过 js获取到的

这边整理了一个js文件,通过js引擎获取到参数
kuwomusic.js

l = function(t){
   var n, o, h = 0, d = 0 ,e;
	var f = [157, 158, 13, 133, 205, 78];
	var i = e && r || 0
	  , b = e || new Uint8Array(16)
	  , v =  o;
	var y = (new Date).getTime()
	  , w =  d + 1
	  , dt = y - h + (w - d) / 1e4;
	if (dt < 0 && void 0 === t.clockseq && (v = v + 1 & 16383),
	(dt < 0 || y > h) && void 0 === t.nsecs && (w = 0),
	w >= 1e4)
		throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
	h = y,
	d = w,
	o = v;
	var A = (1e4 * (268435455 & (y += 122192928e5)) + w) % 4294967296;
	b[i++] = A >>> 24 & 255,
	b[i++] = A >>> 16 & 255,
	b[i++] = A >>> 8 & 255,
	b[i++] = 255 & A;
	var T = y / 4294967296 * 1e4 & 268435455;
	b[i++] = T >>> 8 & 255,
	b[i++] = 255 & T,
	b[i++] = T >>> 24 & 15 | 16,
	b[i++] = T >>> 16 & 255,
	b[i++] = v >>> 8 | 128,
	b[i++] = 255 & v;
	for (var x = 0; x < 6; ++x)
		b[i + x] = f[x];
		return b;
};
		
c = function(t, e) {
	for (var r = [], i = 0; i < 256; ++i)
		r[i] = (i + 256).toString(16).substr(1);
		var i = e || 0
		  , n = r;
		return [n[t[i++]], n[t[i++]], n[t[i++]], n[t[i++]], "-", n[t[i++]], n[t[i++]], "-", n[t[i++]], n[t[i++]], "-", n[t[i++]], n[t[i++]], "-", n[t[i++]], n[t[i++]], n[t[i++]], n[t[i++]], n[t[i++]], n[t[i++]]].join("")
	};
		

java的js执行引擎

/**
 * 酷我音乐
 */
public class KuwoMusic {
    public static void main(String[] args) {
        String fileName = "e:/video/kuwomusic.js"; // 调用以上的js文件脚本
        Object l = parseJs("l", 4, fileName);
        Object reqId = parseJs("c", l, fileName);
        System.out.println(reqId);

        /**
         * 然后执行
         * http://m.kuwo.cn/newh5/singles/songinfoandlrc?musicId=72891154&reqId=5e80bd50-69f9-11ea-91f5-c5b065da4b63
         *
         * 获取到 reqid
         * 再请求 http://www.kuwo.cn/url?format=mp3&rid=73068685&response=url&type=convert_url3&br=128kmp3&from=web&t=1584632489746&reqId=17b249acXea5dX4164Xb6eeX8de501c2ed6a
         */
    }

    /**
     * 通过js解析 获取 reqId 的值
     *
     * @param method
     * @param param
     * @param fileName
     * @return
     */
    private static Object parseJs(String method, Object param, String fileName) {
        ScriptEngineManager engineManager = new ScriptEngineManager();
        ScriptEngine javascript = engineManager.getEngineByName("javascript");
        FileReader reader = null;
        try {
            reader = new FileReader(fileName);
            javascript.eval(reader);
            if (javascript instanceof Invocable) {
                Invocable invocation = (Invocable) javascript;
                return invocation.invokeFunction(method, param);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (Exception e) {
                }
            }
        }
        return null;
    }
}

至此,也就可以获取到 reqId的值,然后根据以下的连接,也就可以获取到这首心仪的歌曲的下载地址

1)http://m.kuwo.cn/newh5/singles/songinfoandlrc?musicId=72891154&reqId=5e80bd50-69f9-11ea-91f5-c5b065da4b63
(2)http://www.kuwo.cn/url?format=mp3&rid=73068685&response=url&type=convert_url3&br=128kmp3&from=web&t=1584632489746&reqId=17b249acXea5dX4164Xb6eeX8de501c2ed6a
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于爬取酷我音乐的问题,可以使用Python来实现。根据提供的引用内容,可以看出代码中使用了Python的requests库和pyquery库。其中,getRanklist函数用于获取榜单歌曲信息,getSongurl函数用于组装歌曲信息页面的URL,getRankTypeNamelist函数用于获取不同榜单的名称和ID。 首先,需要导入requests和pyquery库。然后,可以创建一个函数getRanklist来获取榜单歌曲信息。这个函数接受两个参数:rankType(榜单类型)和bangid(榜单ID)。在函数中,需要设置请求头headers,并构建请求URL。通过发送GET请求,获取到返回的HTML页面内容。接着,使用pyquery库来解析HTML页面,并提取出歌曲信息。最后,可以将获取到的歌曲信息打印出来。 接下来,可以创建一个函数getSongurl来组装歌曲信息页面的URL。这个函数接受一个参数songid(歌曲ID)。在函数中,需要构建基础URL,并将songid拼接到URL中。返回组装后的URL。 最后,可以创建一个函数getRankTypeNamelist来获取不同榜单的名称和ID。在函数中,同样需要设置请求头headers,并发送GET请求获取HTML页面内容。使用pyquery库解析HTML页面,并提取出榜单名称和ID。可以将获取到的榜单名称和ID打印出来。 这样,就可以使用这些函数来实现爬取酷我音乐的功能了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python爬虫(20)获取酷我音乐排行榜榜单作品](https://blog.csdn.net/qiqiyingse/article/details/83343752)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值