site/src/app/api/openpowerlifting/meets/route.ts
2026-01-06 20:51:48 +00:00

27 lines
912 B
TypeScript

import { NextResponse } from "next/server";
import { load } from "cheerio";
export const revalidate = 3600; // cache for 1 hour
export async function GET() {
try {
const res = await fetch("https://www.openpowerlifting.org/mlist/apportugal", {
headers: { "User-Agent": "APP-Website/1.0" },
next: { revalidate },
});
const html = await res.text();
const $ = load(html);
const meets: { id: string; name: string; href: string; date?: string; location?: string }[] = [];
$("a").each((_, el) => {
const href = $(el).attr("href") || "";
const text = $(el).text().trim();
const match = href.match(/\/m\/apportugal\/(\d+)/);
if (match) {
meets.push({ id: match[1], name: text, href });
}
});
return NextResponse.json({ meets });
} catch (e) {
return NextResponse.json({ error: "Failed to scrape meets" }, { status: 500 });
}
}