前提条件#
- Java 17+ と Spring Boot 3+
- Firecrawl APIキー — 無料で取得できます
依存関係を追加する#
dependencies { implementation("com.firecrawl:firecrawl-java:1.2.0")}<dependency> <groupId>com.firecrawl</groupId> <artifactId>firecrawl-java</artifactId> <version>1.2.0</version></dependency>設定#
application.properties にAPIキーを追加します:
firecrawl.api-key=${FIRECRAWL_API_KEY}または、環境変数として設定します:
export FIRECRAWL_API_KEY=fc-YOUR-API-KEY設定Beanを作成する#
FirecrawlConfig.java を作成します。
import com.firecrawl.client.FirecrawlClient;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class FirecrawlConfig { @Bean public FirecrawlClient firecrawlClient( @Value("${firecrawl.api-key}") String apiKey) { return FirecrawlClient.builder() .apiKey(apiKey) .build(); }}RESTコントローラーを作成#
FirecrawlController.java を作成します。
import com.firecrawl.client.FirecrawlClient;import com.firecrawl.models.Document;import com.firecrawl.models.SearchData;import com.firecrawl.models.SearchOptions;import com.firecrawl.models.ScrapeOptions;import com.firecrawl.models.BrowserExecuteResponse;import org.springframework.web.bind.annotation.*;import java.util.List;import java.util.Map;@RestController@RequestMapping("/api")public class FirecrawlController { private final FirecrawlClient firecrawl; public FirecrawlController(FirecrawlClient firecrawl) { this.firecrawl = firecrawl; } @PostMapping("/search") public SearchData search(@RequestBody Map<String, Object> body) { return firecrawl.search( (String) body.get("query"), SearchOptions.builder() .limit((int) body.getOrDefault("limit", 5)) .build() ); } @PostMapping("/scrape") public Map<String, Object> scrape(@RequestBody Map<String, String> body) { Document doc = firecrawl.scrape(body.get("url")); return Map.of( "markdown", doc.getMarkdown(), "metadata", doc.getMetadata() ); } @PostMapping("/interact") public Map<String, Object> interact(@RequestBody Map<String, String> body) { Document doc = firecrawl.scrape(body.get("url"), ScrapeOptions.builder().formats(List.of((Object) "markdown")).build()); String scrapeId = (String) doc.getMetadata().get("scrapeId"); BrowserExecuteResponse response = firecrawl.interact(scrapeId, body.getOrDefault("code", "const title = await page.title(); console.log(title);")); firecrawl.stopInteractiveBrowser(scrapeId); return Map.of("result", response.getStdout()); }}実行してみる#
./gradlew bootRun試す#
# ウェブを検索するcurl -X POST http://localhost:8080/api/search \ -H "Content-Type: application/json" \ -d '{"query": "firecrawl web scraping"}'# ページをスクレイピングするcurl -X POST http://localhost:8080/api/scrape \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com"}'# ページをInteractするcurl -X POST http://localhost:8080/api/interact \ -H "Content-Type: application/json" \ -d '{"url": "https://www.amazon.com", "code": "const title = await page.title(); console.log(title);"}'
