146 lines
4.8 KiB
TypeScript
146 lines
4.8 KiB
TypeScript
/**
|
|
* 测试关键词词云 API 端点
|
|
* 模拟 n8n 工作流发送的请求
|
|
*
|
|
* 运行前请确保已设置环境变量:
|
|
* export API_URL=http://localhost:3000
|
|
* export WEBHOOK_API_KEY=your_api_key
|
|
*/
|
|
|
|
const API_URL = process.env.API_URL || 'http://localhost:3000';
|
|
const API_KEY = process.env.WEBHOOK_API_KEY || '';
|
|
|
|
async function testAPI() {
|
|
console.log('🧪 测试关键词词云 API...\n');
|
|
|
|
// 测试 1: 获取季度列表
|
|
console.log('1️⃣ 测试 GET /api/keyword-cloud/quarters');
|
|
try {
|
|
const response = await fetch(`${API_URL}/api/keyword-cloud/quarters`);
|
|
const data = await response.json();
|
|
console.log('✅ 成功:', data.success);
|
|
console.log(` 季度数量: ${data.quarters?.length || 0}`);
|
|
if (data.quarters?.length > 0) {
|
|
console.log(` 第一个季度: ${data.quarters[0].quarter} (${data.quarters[0].keywordCount} 个关键词)`);
|
|
}
|
|
} catch (err) {
|
|
const error = err as Error;
|
|
console.log('❌ 失败:', error.message);
|
|
}
|
|
console.log();
|
|
|
|
// 测试 2: 获取关键词
|
|
console.log('2️⃣ 测试 GET /api/keyword-cloud/keywords/2023-Q1');
|
|
try {
|
|
const response = await fetch(`${API_URL}/api/keyword-cloud/keywords/2023-Q1`);
|
|
const data = await response.json();
|
|
console.log('✅ 成功:', data.success);
|
|
console.log(` 关键词数量: ${data.keywords?.length || 0}`);
|
|
if (data.keywords?.length > 0) {
|
|
console.log(` 最热词汇: ${data.keywords[0].word} (${data.keywords[0].trendScore}分)`);
|
|
}
|
|
} catch (err) {
|
|
const error = err as Error;
|
|
console.log('❌ 失败:', error.message);
|
|
}
|
|
console.log();
|
|
|
|
// 测试 3: 获取视觉规则
|
|
console.log('3️⃣ 测试 GET /api/keyword-cloud/rules');
|
|
try {
|
|
const response = await fetch(`${API_URL}/api/keyword-cloud/rules`);
|
|
const data = await response.json();
|
|
console.log('✅ 成功:', data.success);
|
|
console.log(` 规则数量: ${data.rules?.length || 0}`);
|
|
if (data.rules?.length > 0) {
|
|
console.log(` 规则示例: ${data.rules[0].name} (${data.rules[0].minScore}-${data.rules[0].maxScore}分)`);
|
|
}
|
|
} catch (err) {
|
|
const error = err as Error;
|
|
console.log('❌ 失败:', error.message);
|
|
}
|
|
console.log();
|
|
|
|
// 测试 4: 批量写入关键词(模拟 n8n 工作流)
|
|
console.log('4️⃣ 测试 POST /api/keyword-cloud/keywords (模拟 n8n 请求)');
|
|
|
|
const testPayload = {
|
|
apiKey: API_KEY,
|
|
quarter: '2024-Q1',
|
|
keywords: [
|
|
{
|
|
word: 'Claude',
|
|
trendScore: 95,
|
|
description: 'Anthropic 开发的 AI 助手',
|
|
descriptionEn: 'AI assistant developed by Anthropic',
|
|
detailPoints: ['支持长上下文', '安全对齐', '多模态能力'],
|
|
detailPointsEn: ['Long context', 'Safety alignment', 'Multimodal'],
|
|
visualConfig: {
|
|
color: 'primary',
|
|
size: 'text-5xl',
|
|
border: 'border-4',
|
|
rotation: 'rotate-1',
|
|
},
|
|
},
|
|
{
|
|
word: 'Gemini',
|
|
trendScore: 88,
|
|
description: 'Google 的多模态 AI 模型',
|
|
descriptionEn: 'Multimodal AI model by Google',
|
|
detailPoints: ['原生多模态', '长上下文窗口', '推理能力'],
|
|
detailPointsEn: ['Native multimodal', 'Long context', 'Reasoning'],
|
|
visualConfig: {
|
|
color: 'secondary',
|
|
size: 'text-4xl',
|
|
border: 'border-4',
|
|
rotation: 'rotate-2',
|
|
},
|
|
},
|
|
],
|
|
};
|
|
|
|
try {
|
|
const response = await fetch(`${API_URL}/api/keyword-cloud/keywords`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify(testPayload),
|
|
});
|
|
const data = await response.json();
|
|
if (data.success) {
|
|
console.log('✅ 成功: 创建了', data.created, '个关键词');
|
|
if (data.failed > 0) {
|
|
console.log('⚠️ 失败:', data.failed, '个');
|
|
data.errors?.forEach((err: any) => console.log(' -', err.word, ':', err.error));
|
|
}
|
|
} else {
|
|
console.log('❌ 失败:', data.error);
|
|
}
|
|
} catch (err) {
|
|
const error = err as Error;
|
|
console.log('❌ 失败:', error.message);
|
|
}
|
|
console.log();
|
|
|
|
// 验证新创建的数据
|
|
console.log('5️⃣ 验证新创建的数据 (2024-Q1)');
|
|
try {
|
|
const response = await fetch(`${API_URL}/api/keyword-cloud/keywords/2024-Q1`);
|
|
const data = await response.json();
|
|
console.log('✅ 成功:', data.success);
|
|
console.log(` 关键词数量: ${data.keywords?.length || 0}`);
|
|
if (data.keywords?.length > 0) {
|
|
console.log(` 关键词: ${data.keywords.map((k: any) => k.word).join(', ')}`);
|
|
}
|
|
} catch (err) {
|
|
const error = err as Error;
|
|
console.log('❌ 失败:', error.message);
|
|
}
|
|
console.log();
|
|
|
|
console.log('✨ 测试完成!');
|
|
}
|
|
|
|
testAPI().catch(console.error);
|