30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
|
|
const FREESOUND_API = "https://freesound.org/apiv2/search/text/";
|
|
const API_KEY = process.env.FREESOUND_API_KEY || "";
|
|
|
|
export async function GET(req: NextRequest) {
|
|
const query = req.nextUrl.searchParams.get("q") || "";
|
|
const page = parseInt(req.nextUrl.searchParams.get("page") || "1");
|
|
|
|
if (!query) return NextResponse.json({ results: [] });
|
|
if (!API_KEY) return NextResponse.json({ error: "Freesound API key not configured" }, { status: 500 });
|
|
|
|
try {
|
|
const url = `${FREESOUND_API}?query=${encodeURIComponent(query)}&page=${page}&token=${API_KEY}&page_size=12&fields=id,name,duration,previews`;
|
|
const res = await fetch(url);
|
|
const data = await res.json();
|
|
|
|
const results = (data.results || []).map((r: any) => ({
|
|
id: r.id,
|
|
name: r.name,
|
|
duration: r.duration,
|
|
previewUrl: r.previews?.["preview-lq-mp3"] || r.previews?.["preview-hq-mp3"] || null,
|
|
}));
|
|
|
|
return NextResponse.json({ results, count: data.count || 0 });
|
|
} catch (e) {
|
|
return NextResponse.json({ error: "Freesound search failed" }, { status: 500 });
|
|
}
|
|
}
|