feat: Felo 上传首页案例脚本

This commit is contained in:
Paul
2026-05-15 11:36:58 +08:00
parent 7ce3d8c8d5
commit 0e42d20199
2 changed files with 270 additions and 0 deletions
+115
View File
@@ -0,0 +1,115 @@
#!/usr/bin/env node
const https = require('https');
const url = require('url');
const AUTHORIZATION = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIyMiJ9.2XLrkX3Fryw4c1Mn3Peqsp8JOMMOu25GP7yxl0gsIG4w9JjfUzlsharGdm8PDusK1fvwMRs5rc1p6LJe0cSg4w';
const API_URL = 'https://bops.felo.ai/api/home/case/type/add';
const data = [
{
name: 'Logo 设计',
skill_id: 'logo-and-branding',
case_prompt: '请设计一个Logo,品牌名称是:[输入您的品牌名],所属行业是:[如:科技/餐饮/服装]。',
case_type: 'logo_design',
},
{
name: '品牌周边',
skill_id: 'logo-and-branding',
case_prompt: '基于我们的 Logo 设计一套品牌周边,用在[办公/生活/服饰]上',
case_type: 'brand_merchandise',
},
{
name: '亚马逊套图',
skill_id: 'ecommerce-product-image',
case_prompt: '用 [$name$] 的视觉风格,生成亚马逊 7 张套图(白底主图 + 信息图 + 生活场景图 + 细节图 + 多角度图),我的产品卖点是:[输入产品卖点]',
case_type: 'amazon_product_images',
},
{
name: '电商 Banner',
skill_id: 'ecommerce-product-image',
case_prompt: '生成宽幅 Banner 背景图。商品放在[左侧/右侧],卖点是:[输入产品卖点]',
case_type: 'ecommerce_banner',
},
{
name: '名片',
skill_id: 'marketing-materials',
case_prompt: '设计一套名片,我的要求是:[输入所属行业/职位/风格偏好]',
case_type: 'business_card',
},
{
name: '海报',
skill_id: 'marketing-materials',
case_prompt: '设计一张海报,我的要求是:[输入活动主题/核心卖点]',
case_type: 'poster',
},
{
name: '折页',
skill_id: 'marketing-materials',
case_prompt: '设计成一份[三折页宣传册/高级画册],用作活动宣传,活动基础信息为:[输入活动基础信息]',
case_type: 'brochure',
},
];
function post(payload, index) {
return new Promise((resolve, reject) => {
const body = JSON.stringify({
case_prompt: payload.case_prompt,
case_type: payload.case_type,
name: payload.name,
skill_id: payload.skill_id,
sort: 0,
});
const parsed = new url.URL(API_URL);
const options = {
hostname: parsed.hostname,
path: parsed.pathname,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(body),
'Authorization': AUTHORIZATION,
},
};
const req = https.request(options, (res) => {
let data = '';
res.on('data', (chunk) => (data += chunk));
res.on('end', () => {
try {
resolve({ status: res.statusCode, body: JSON.parse(data) });
} catch {
resolve({ status: res.statusCode, body: data });
}
});
});
req.on('error', reject);
req.write(body);
req.end();
});
}
async function main() {
console.log(`开始提交 ${data.length} 条分类数据...\n`);
for (let i = 0; i < data.length; i++) {
const item = data[i];
process.stdout.write(`[${i + 1}/${data.length}] ${item.name} (${item.case_type}) ... `);
try {
const result = await post(item, i + 1);
if (result.status >= 200 && result.status < 300) {
console.log(`✓ ${result.status}`);
} else {
console.log(`✗ ${result.status}: ${JSON.stringify(result.body)}`);
}
} catch (err) {
console.log(`✗ 请求失败: ${err.message}`);
}
}
console.log('\n完成。');
}
main();