From 460c865249e49adf6e812586bd5a4fb4ca53a58d Mon Sep 17 00:00:00 2001 From: Caihaohan Date: Tue, 27 Jan 2026 19:35:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E8=AF=8D=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyword-cloud/keywords/[quarter]/route.ts | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/app/api/keyword-cloud/keywords/[quarter]/route.ts diff --git a/src/app/api/keyword-cloud/keywords/[quarter]/route.ts b/src/app/api/keyword-cloud/keywords/[quarter]/route.ts new file mode 100644 index 0000000..6ae9e04 --- /dev/null +++ b/src/app/api/keyword-cloud/keywords/[quarter]/route.ts @@ -0,0 +1,59 @@ +import { NextResponse } from 'next/server'; +import { getKeywordsByQuarter } from '@/hooks/useKeywordCloud'; + +export const dynamic = 'force-dynamic'; + +/** + * GET /api/keyword-cloud/keywords/[quarter] + * 获取指定季度的关键词 + */ +export async function GET( + request: Request, + { params }: { params: { quarter: string } } +) { + try { + const { quarter } = params; + + // 验证 quarter 格式 + if (!/^\d{4}-Q[1-4]$/.test(quarter)) { + return NextResponse.json( + { + success: false, + error: 'Invalid quarter format. Expected: YYYY-QN', + }, + { status: 400 } + ); + } + + const data = await getKeywordsByQuarter(quarter); + + if (!data) { + return NextResponse.json( + { + success: false, + error: `Quarter ${quarter} not found`, + }, + { status: 404 } + ); + } + + return NextResponse.json({ + success: true, + quarter: data.quarter, + title: data.title, + titleEn: data.titleEn, + subtitle: data.subtitle, + subtitleEn: data.subtitleEn, + keywords: data.keywords, + }); + } catch (error) { + console.error('Error fetching keywords:', error); + return NextResponse.json( + { + success: false, + error: 'Failed to fetch keywords', + }, + { status: 500 } + ); + } +}