import { getQuery, createError } from 'h3' import axios from 'axios' export default defineEventHandler(async (event) => { const query = getQuery(event) const hash = query.hash as string if (!hash) { throw createError({ statusCode: 400, message: 'Hash is required' }) } try { // 首先尝试通过移动端API获取播放链接 const infoUrl = `http://m.kugou.com/app/i/getSongInfo.php?cmd=playInfo&hash=${hash}` const infoRes = await axios.get(infoUrl, { validateStatus: () => true }) if (infoRes.data && infoRes.data.url) { return { data: { play_url: infoRes.data.url } } } // 如果失败或者需要付费(VIP),通过标题和歌手名从网易云匹配一个试听链接 if (infoRes.data && infoRes.data.songName) { const keyword = `${infoRes.data.songName} ${infoRes.data.singerName || ''}`.trim() try { // 搜索网易云音乐 const searchUrl = `https://music.163.com/api/search/get/web?s=${encodeURIComponent(keyword)}&type=1&offset=0&total=true&limit=1` const searchRes = await axios.get(searchUrl, { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } }) if (searchRes.data?.result?.songs?.length > 0) { const songId = searchRes.data.result.songs[0].id // 获取网易云播放链接 const neteaseUrl = `https://music.163.com/song/media/outer/url?id=${songId}.mp3` return { data: { play_url: neteaseUrl } } } } catch (e) { console.error('Fallback to Netease failed:', e) } } // 如果都没有,尝试使用原本的 API const url = `http://www.kugou.com/yy/index.php?r=play/getdata&hash=${hash}` const response = await axios.get(url, { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Cookie': 'kg_mid=1234567890' }, validateStatus: () => true }) return response.data } catch (error) { throw createError({ statusCode: 500, message: 'Music service unavailable' }) } })