Spaces:
Paused
Paused
| import Providers from "../providers/index.js" | |
| import { format as lyricFormat, get_url } from "../util.js" | |
| export default async (ctx) => { | |
| const p = new Providers() | |
| const query = ctx.req.query() | |
| const server = query.server || 'tencent' | |
| const type = query.type || 'playlist' | |
| const id = query.id || '7326220405' | |
| if (!p.get_provider_list().includes(server) || !p.get(server).support_type.includes(type)) { | |
| ctx.status(400) | |
| return ctx.json({ status: 400, message: 'server 参数不合法', param: { server, type, id } }) | |
| } | |
| let data = await p.get(server).handle(type, id) | |
| if (type === 'url') { | |
| let url = data | |
| if (!url) { | |
| ctx.status(403) | |
| return ctx.json({ error: 'no url' }) | |
| } | |
| if (url.startsWith('@')) | |
| return ctx.text(url) | |
| return ctx.redirect(url) | |
| } | |
| if (type === 'pic') { | |
| return ctx.redirect(data) | |
| } | |
| if (type === 'lrc') { | |
| return ctx.text(lyricFormat(data.lyric, data.tlyric || '')) | |
| } | |
| // json 类型数据填充api | |
| return ctx.json(data.map(x => { | |
| for (let i of ['url', 'pic', 'lrc']) { | |
| const _ = String(x[i]) | |
| // 正常对象_均为id,以下例外不用填充:1.@开头/size为0=>qq音乐jsonp 2.已存在完整链接 | |
| if (!_.startsWith('@') && !_.startsWith('http') && _.length > 0) { | |
| x[i] = `${get_url(ctx)}?server=${server}&type=${i}&id=${_}` | |
| } | |
| } | |
| return x | |
| })) | |
| } | |