78 lines
2.0 KiB
JavaScript

// GD音乐台get(适配SPlayer的UNM-Server)
// 感谢来自GD Studio的开发API
// https://music.gdstudio.xyz/
const createOption = require('../util/option.js')
module.exports = async (query, request) => {
try {
const { id, br = '320' } = query
if (!id) {
return {
status: 400,
body: {
code: 400,
message: '缺少必要参数 id',
data: [],
},
}
}
const validBR = ['128', '192', '320', '740', '999']
// const covertBR = ['128000', '192000', '320000','740000', '999000']
if (!validBR.includes(br)) {
return {
status: 400,
body: {
code: 400,
message: '无效音质参数',
allowed_values: validBR,
data: [],
},
}
}
const apiUrl = new URL('https://music-api.gdstudio.xyz/api.php')
apiUrl.searchParams.append('types', 'url')
apiUrl.searchParams.append('id', id)
apiUrl.searchParams.append('br', br)
const response = await fetch(apiUrl.toString())
if (!response.ok) throw new Error(`API 响应状态: ${response.status}`)
const result = await response.json()
// 代理逻辑
const useProxy = process.env.ENABLE_PROXY || false
const proxy = process.env.PROXY_URL
if (useProxy && result.url && result.url.includes('kuwo')) {
result.proxyUrl = proxy + result.url.replace(/^http:\/\//, 'http/')
}
return {
status: 200,
body: {
code: 200,
message: '请求成功',
data: {
id,
br,
url: result.url,
...(proxy && result.proxyUrl ? { proxyUrl: result.proxyUrl } : {}),
},
},
}
} catch (error) {
console.error('Error in song_url_ncmget:', error)
return {
status: 500,
body: {
code: 500,
message: '服务器处理请求失败',
...(process.env.NODE_ENV === 'development'
? { error: error.message }
: {}),
data: [],
},
}
}
}