Laravel
Usa Firecrawl con Laravel para buscar, hacer scraping e interactuar con datos web mediante la API REST.
- Proyecto de Laravel 10+
- Una clave de API de Firecrawl — obtén una gratis
Añade tu clave de API a .env:
FIRECRAWL_API_KEY=fc-YOUR-API-KEYAñade la entrada de configuración a config/services.php:
'firecrawl' => [
'api_key' => env('FIRECRAWL_API_KEY'),
'base_url' => env('FIRECRAWL_API_URL', 'https://api.firecrawl.dev/v2'),
],Crea app/Services/FirecrawlService.php:
<?php
namespace App\Services;
use Illuminate\Support\Facades\Http;
class FirecrawlService
{
private string $apiKey;
private string $baseUrl;
public function __construct()
{
$this->apiKey = config('services.firecrawl.api_key');
$this->baseUrl = config('services.firecrawl.base_url');
}
public function search(string $query, int $limit = 5): array
{
$response = Http::withToken($this->apiKey)
->post("{$this->baseUrl}/search", [
'query' => $query,
'limit' => $limit,
]);
return $response->json();
}
public function scrape(string $url, array $options = []): array
{
$response = Http::withToken($this->apiKey)
->post("{$this->baseUrl}/scrape", array_merge(['url' => $url], $options));
return $response->json();
}
public function interact(string $url, string $prompt, ?string $followUp = null): array
{
// 1. Hacer scraping para abrir una sesión de navegador
$scrapeResult = $this->scrape($url, ['formats' => ['markdown']]);
$scrapeId = $scrapeResult['data']['metadata']['scrapeId'];
// 2. Enviar el primer prompt
Http::withToken($this->apiKey)
->post("{$this->baseUrl}/scrape/{$scrapeId}/interact", [
'prompt' => $prompt,
]);
// 3. Enviar el prompt de seguimiento
$result = null;
if ($followUp) {
$result = Http::withToken($this->apiKey)
->post("{$this->baseUrl}/scrape/{$scrapeId}/interact", [
'prompt' => $followUp,
])->json();
}
// 4. Cerrar la sesión
Http::withToken($this->apiKey)
->delete("{$this->baseUrl}/scrape/{$scrapeId}/interact");
return $result ?? $scrapeResult;
}
}Crea app/Http/Controllers/FirecrawlController.php:
<?php
namespace App\Http\Controllers;
use App\Services\FirecrawlService;
use Illuminate\Http\Request;
class FirecrawlController extends Controller
{
public function __construct(private FirecrawlService $firecrawl) {}
public function search(Request $request)
{
$validated = $request->validate(['query' => 'required|string']);
return response()->json(
$this->firecrawl->search($validated['query'], $request->input('limit', 5))
);
}
public function scrape(Request $request)
{
$validated = $request->validate(['url' => 'required|url']);
return response()->json($this->firecrawl->scrape($validated['url']));
}
public function interact(Request $request)
{
$validated = $request->validate([
'url' => 'required|url',
'prompt' => 'required|string',
]);
return response()->json(
$this->firecrawl->interact(
$validated['url'],
$validated['prompt'],
$request->input('followUp')
)
);
}
}En routes/api.php:
use App\Http\Controllers\FirecrawlController;
Route::post('/search', [FirecrawlController::class, 'search']);
Route::post('/scrape', [FirecrawlController::class, 'scrape']);
Route::post('/interact', [FirecrawlController::class, 'interact']);php artisan serve
# Buscar en la web
curl -X POST http://localhost:8000/api/search \
-H "Content-Type: application/json" \
-d '{"query": "firecrawl web scraping"}'
# Hacer scraping de una página
curl -X POST http://localhost:8000/api/scrape \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
# Interactuar con una página
curl -X POST http://localhost:8000/api/interact \
-H "Content-Type: application/json" \
-d '{"url": "https://www.amazon.com", "prompt": "Search for iPhone 16 Pro Max", "followUp": "Click on the first result and tell me the price"}'Documentación de búsqueda
Busca en la web y obtén el contenido completo de la página
Documentación de scraping
Todas las opciones de scraping, incluidas formatos, acciones y proxies
Documentación de interacción
Haz clic, completa formularios y extrae contenido dinámico
Referencia de la API
Documentación completa de la API REST
Was this page helpful?Suggest editsRaise issue