セットアップ
Copy
Ask AI
npm install ai @ai-sdk/openai @mendable/firecrawl-js
.env ファイルを作成:
Copy
Ask AI
FIRECRAWL_API_KEY=your_firecrawl_key
OPENAI_API_KEY=your_openai_key
注: Node < 20 を使用している場合は、dotenvをインストールし、コードにimport 'dotenv/config'を追加してください。
スクレイプ + テキスト生成
Copy
Ask AI
import FirecrawlApp from '@mendable/firecrawl-js';
import { openai } from '@ai-sdk/openai';
import { generateText } from 'ai';
const firecrawl = new FirecrawlApp({ apiKey: process.env.FIRECRAWL_API_KEY });
const scrapeResult = await firecrawl.scrape('https://firecrawl.dev', {
formats: ['markdown']
});
console.log('スクレイプしたコンテンツの長さ:', scrapeResult.markdown?.length);
const { text } = await generateText({
model: openai('gpt-5-nano'),
prompt: `要約: ${scrapeResult.markdown}`
});
console.log('要約:', text);
スクレイプ + テキストのストリーミング
Copy
Ask AI
import FirecrawlApp from '@mendable/firecrawl-js';
import { openai } from '@ai-sdk/openai';
import { streamText } from 'ai';
const firecrawl = new FirecrawlApp({ apiKey: process.env.FIRECRAWL_API_KEY });
const scrapeResult = await firecrawl.scrape('https://stripe.com', {
formats: ['markdown']
});
console.log('スクレイプしたコンテンツの長さ:', scrapeResult.markdown?.length);
const { textStream } = await streamText({
model: openai('gpt-5-nano'),
prompt: `この企業を分析し、主要製品をリストアップしてください: ${scrapeResult.markdown}`
});
for await (const chunk of textStream) {
process.stdout.write(chunk);
}
ツール呼び出し
Copy
Ask AI
import FirecrawlApp from '@mendable/firecrawl-js';
import { openai } from '@ai-sdk/openai';
import { generateText, tool } from 'ai';
import { z } from 'zod';
console.log('Firecrawlを初期化しています...');
const firecrawl = new FirecrawlApp({ apiKey: process.env.FIRECRAWL_API_KEY });
const scrapeWebsiteTool = tool({
description: '任意のウェブサイトURLからコンテンツをスクレイピングします',
inputSchema: z.object({
url: z.string().url().describe('スクレイピング対象のURL')
}),
execute: async ({ url }) => {
console.log('スクレイピング中:', url);
const result = await firecrawl.scrape(url, {
formats: ['markdown']
});
console.log('スクレイピングしたコンテンツのプレビュー:', result.markdown?.slice(0, 200) + '...');
return { content: result.markdown };
}
});
console.log('AIでテキストを生成しています...');
const { text, toolCalls } = await generateText({
model: openai('gpt-5-nano'),
prompt: 'Firecrawlとは何ですか? firecrawl.devにアクセスして教えてください。',
tools: {
scrapeWebsite: scrapeWebsiteTool
},
});
console.log('ツール呼び出し:', toolCalls);
// 会話を続けるか、他の用途でテキストを使用します
構造化データの抽出
Copy
Ask AI
import FirecrawlApp from '@mendable/firecrawl-js';
import { openai } from '@ai-sdk/openai';
import { generateObject } from 'ai';
import { z } from 'zod';
const firecrawl = new FirecrawlApp({ apiKey: process.env.FIRECRAWL_API_KEY });
const scrapeResult = await firecrawl.scrape('https://stripe.com', {
formats: ['markdown']
});
console.log('スクレイプしたコンテンツの長さ:', scrapeResult.markdown?.length);
const CompanyInfoSchema = z.object({
name: z.string(),
industry: z.string(),
description: z.string(),
products: z.array(z.string())
});
const { object } = await generateObject({
model: openai('gpt-5-nano'),
schema: CompanyInfoSchema,
prompt: `このウェブサイトのコンテンツから企業情報を抽出: ${scrapeResult.markdown}`
});
console.log('抽出された企業情報:', object);

