From 52eb1586c2d4fba62745ec5faa15ac4e32920657 Mon Sep 17 00:00:00 2001 From: MoeFurina Date: Sun, 21 Dec 2025 12:00:50 +0800 Subject: [PATCH] refactor: update unblock settings and improve song URL matching logic --- .env.prod.example | 4 +-- module/song_url_match.js | 3 +- module/song_url_v1.js | 68 +++++++++++++++++----------------------- server.js | 13 ++++---- vercel.json | 2 +- 5 files changed, 40 insertions(+), 50 deletions(-) diff --git a/.env.prod.example b/.env.prod.example index d0fbd65..c4d52d7 100644 --- a/.env.prod.example +++ b/.env.prod.example @@ -10,8 +10,8 @@ PROXY_URL = "https://your-proxy-url.com/?proxy=" ### UnblockNeteaseMusic 设置项 -## 启用全局解灰, 无论是否调用参数都会使用解灰(推荐开启) -ENABLE_GENERAL_UNBLOCK = true +## 启用全局解灰, 无论是否调用参数都会使用解灰(不推荐开启) +ENABLE_GENERAL_UNBLOCK = false ## 歌曲启用无损音质 ENABLE_FLAC = true ## 启用无损音质时,是否选择音质最高的 diff --git a/module/song_url_match.js b/module/song_url_match.js index 7a9b42b..8268b2e 100644 --- a/module/song_url_match.js +++ b/module/song_url_match.js @@ -9,7 +9,7 @@ module.exports = async (query, request) => { const { matchID, } = require('@neteasecloudmusicapienhanced/unblockmusic-utils') - const result = await matchID(query.id) + const result = await matchID(query.id, query.source) const proxy = process.env.PROXY_URL logger.info('开始解灰', query.id, result) const useProxy = process.env.ENABLE_PROXY || 'false' @@ -22,6 +22,7 @@ module.exports = async (query, request) => { body: { code: 200, data: result.data.url, + proxyUrl: result.proxyUrl || '', }, } } catch (e) { diff --git a/module/song_url_v1.js b/module/song_url_v1.js index b9b5f9a..82af7ca 100644 --- a/module/song_url_v1.js +++ b/module/song_url_v1.js @@ -6,8 +6,9 @@ const logger = require('../util/logger.js') const createOption = require('../util/option.js') module.exports = async (query, request) => { - const match = require('@unblockneteasemusic/server') - const source = ['pyncmd', 'bodian', 'kuwo', 'qq', 'migu', 'kugou'] + const { + matchID, + } = require('@neteasecloudmusicapienhanced/unblockmusic-utils') require('dotenv').config() const data = { ids: '[' + query.id + ']', @@ -16,45 +17,34 @@ module.exports = async (query, request) => { } if (query.unblock === 'true') { try { - const result = await match(query.id, source) + const result = await matchID(query.id, query.source) logger.info('Starting unblock(uses modules unblock):', query.id, result) - // avoid optional chaining for compatibility - let url - if (Array.isArray(result)) { - url = result[0] && result[0].url ? result[0].url : result[0] - } else { - url = result && result.url ? result.url : result - } - // decide proxyUrl after we resolved the actual url value + const useProxy = process.env.ENABLE_PROXY || 'false' let proxyUrl = '' - if (url) { - if (url.includes('kuwo')) { - const useProxy = process.env.ENABLE_PROXY || 'false' - if (useProxy === 'true' && process.env.PROXY_URL) { - proxyUrl = process.env.PROXY_URL + url - } else { - proxyUrl = url - } - } - return { - status: 200, - body: { - code: 200, - msg: 'Warning: you can only adjust unblock source in dotenv config, use /song/url/match instead.', - data: [ - { - id: Number(query.id), - url, - type: 'flac', - level: query.level, - freeTrialInfo: 'null', - fee: 0, - proxyUrl: proxyUrl || '', - }, - ], - }, - cookie: [], - } + if (result.data.url && result.data.url.includes('kuwo')) { + proxyUrl = + useProxy === 'true' && process.env.PROXY_URL + ? process.env.PROXY_URL + result.data.url + : result.data.url + } + return { + status: 200, + body: { + code: 200, + msg: 'Warning: you can only adjust unblock source song_url_unblock interface, use /song/url/match instead.', + data: [ + { + id: Number(query.id), + url: result.data.url, + type: 'flac', + level: query.level, + freeTrialInfo: 'null', + fee: 0, + proxyUrl: proxyUrl || '', + }, + ], + }, + cookie: [], } } catch (e) { console.error('Error in unblockneteasemusic:', e) diff --git a/server.js b/server.js index b96c1b1..3191db6 100644 --- a/server.js +++ b/server.js @@ -254,13 +254,12 @@ async function consturctServer(moduleDefs) { !song.url || [1, 4].includes(song.fee) ) { - const match = require('@unblockneteasemusic/server') - const source = process.env.UNBLOCK_SOURCE - ? process.env.UNBLOCK_SOURCE.split(',') - : ['pyncmd', 'bodian', 'kuwo', 'qq', 'migu', 'kugou'] - logger.info('Starting unblock(uses general unblock):', source) - const { url } = await match(req.query.id, source) - song.url = url + const { + matchID, + } = require('@neteasecloudmusicapienhanced/unblockmusic-utils') + logger.info('Starting unblock(uses general unblock):', req.query.id) + const result = await matchID(req.query.id) + song.url = result.data.url song.freeTrialInfo = 'null' logger.info('Unblock success! url:', song.url) } diff --git a/vercel.json b/vercel.json index 1aedba9..2c3e9e2 100644 --- a/vercel.json +++ b/vercel.json @@ -20,6 +20,6 @@ "env": { "NODE_ENV": "production", "ENABLE_FLAC": "true", - "ENABLE_GENERAL_UNBLOCK": "true" + "ENABLE_GENERAL_UNBLOCK": "false" } }