From eb8546ad6a237760716dc80039de96a5720cdc23 Mon Sep 17 00:00:00 2001 From: Tianling Shen Date: Thu, 20 Jul 2023 15:51:49 +0800 Subject: [PATCH] feat(hook): support new player API Signed-off-by: Tianling Shen --- src/hook.js | 53 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/src/hook.js b/src/hook.js index 386ab35a1e..4624228206 100644 --- a/src/hook.js +++ b/src/hook.js @@ -182,12 +182,12 @@ hook.request.before = (ctx) => { ctx.netease = netease; // console.log(netease.path, netease.param) - if ( - netease.path === '/api/song/enhance/download/url' || - netease.path === '/api/song/enhance/download/url/v1' - ) + if (netease.path === '/api/song/enhance/download/url') return pretendPlay(ctx); + if (netease.path === '/api/song/enhance/download/url/v1') + return pretendPlayV1(ctx); + if (BLOCK_ADS) { if (netease.path.startsWith('/api/ad')) { ctx.error = new Error('ADs blocked.'); @@ -507,21 +507,7 @@ const pretendPlay = (ctx) => { netease.param = { ids: `["${id}"]`, br }; query = crypto.linuxapi.encryptRequest(turn, netease.param); } else { - let { id, br, level, e_r, header } = netease.param; - if (!br && level) { - switch (level) { - case 'hires': - case 'lossless': - br = 999000; - break; - case 'exhigh': - br = 320000; - break; - case 'standard': - br = 128000; - break; - } - } + const { id, br, e_r, header } = netease.param; netease.param = { ids: `["${id}"]`, br, e_r, header }; query = crypto.eapi.encryptRequest(turn, netease.param); } @@ -529,6 +515,35 @@ const pretendPlay = (ctx) => { req.body = query.body + netease.pad; }; +const pretendPlayV1 = (ctx) => { + const { req, netease } = ctx; + const turn = 'http://music.163.com/api/song/enhance/player/url/v1'; + let query; + if (netease.forward) { + const { id, level, immerseType } = netease.param; + netease.param = { + ids: `["${id}"]`, + level, + encodeType: 'flac', + immerseType, + }; + query = crypto.linuxapi.encryptRequest(turn, netease.param); + } else { + const { id, level, immerseType, e_r, header } = netease.param; + netease.param = { + ids: `["${id}"]`, + level, + encodeType: 'flac', + immerseType, + e_r, + header, + }; + query = crypto.eapi.encryptRequest(turn, netease.param); + } + req.url = query.url; + req.body = query.body + netease.pad; +}; + const tryCollect = (ctx) => { const { req, netease } = ctx; const { trackIds, pid, op } = netease.param;