Le SDK .NET officiel est maintenu dans le monorepo de Firecrawl à l’emplacement apps/.net-sdk.
Pour installer le SDK .NET de Firecrawl, ajoutez le package NuGet :
.NET CLI
Gestionnaire de packages
PackageReference
bash dotnet add package firecrawl-sdk
powershell Install-Package firecrawl-sdk
<PackageReference Include="firecrawl-sdk" Version="1.0.0" />
Nécessite .NET 8.0 ou une version ultérieure.
- Obtenez une clé API sur firecrawl.dev
- Définissez la clé API comme variable d’environnement nommée
FIRECRAWL_API_KEY, ou passez-la au constructeur FirecrawlClient
Voici un exemple rapide avec l’API actuelle du SDK :
using Firecrawl;
using Firecrawl.Models;
var client = new FirecrawlClient("fc-your-api-key");
// Scraper une seule page
var doc = await client.ScrapeAsync("https://firecrawl.dev",
new ScrapeOptions { Formats = new List<object> { "markdown" } });
// Crawler un site web
var job = await client.CrawlAsync("https://firecrawl.dev",
new CrawlOptions { Limit = 5 });
Console.WriteLine(doc.Markdown);
Console.WriteLine($"Crawled pages: {job.Data?.Count ?? 0}");
Pour effectuer le scraping d’une seule URL, utilisez la méthode ScrapeAsync.
using Firecrawl.Models;
var doc = await client.ScrapeAsync("https://firecrawl.dev",
new ScrapeOptions
{
Formats = new List<object> { "markdown", "html" },
OnlyMainContent = true,
WaitFor = 5000
});
Console.WriteLine(doc.Markdown);
Console.WriteLine(doc.Metadata?["title"]);
Extrayez des données JSON structurées avec JsonFormat via le point de terminaison scrape :
using Firecrawl.Models;
var jsonFmt = new JsonFormat
{
Prompt = "Extract the product name and price",
Schema = new Dictionary<string, object>
{
["type"] = "object",
["properties"] = new Dictionary<string, object>
{
["name"] = new Dictionary<string, object> { ["type"] = "string" },
["price"] = new Dictionary<string, object> { ["type"] = "number" }
}
}
};
var doc = await client.ScrapeAsync("https://example.com/product",
new ScrapeOptions
{
Formats = new List<object> { jsonFmt }
});
Console.WriteLine(doc.Json);
Effectuer un crawl sur un site web
Pour effectuer un crawl sur un site web et attendre la fin de l’opération, utilisez CrawlAsync. Cette méthode gère automatiquement l’interrogation et la pagination.
using Firecrawl.Models;
var job = await client.CrawlAsync("https://firecrawl.dev",
new CrawlOptions
{
Limit = 50,
MaxDiscoveryDepth = 3,
ScrapeOptions = new ScrapeOptions
{
Formats = new List<object> { "markdown" }
}
});
Console.WriteLine($"Status: {job.Status}");
Console.WriteLine($"Progress: {job.Completed}/{job.Total}");
if (job.Data != null)
{
foreach (var page in job.Data)
{
Console.WriteLine(page.Metadata?["sourceURL"]);
}
}
Lancez une tâche sans attendre avec StartCrawlAsync.
using Firecrawl.Models;
var start = await client.StartCrawlAsync("https://firecrawl.dev",
new CrawlOptions { Limit = 100 });
Console.WriteLine($"Job ID: {start.Id}");
Consultez la progression du crawl avec GetCrawlStatusAsync.
var status = await client.GetCrawlStatusAsync(start.Id!);
Console.WriteLine($"Status: {status.Status}");
Console.WriteLine($"Progress: {status.Completed}/{status.Total}");
Annulez un crawl en cours avec CancelCrawlAsync.
var result = await client.CancelCrawlAsync(start.Id!);
Console.WriteLine(result);
Cartographier un site web
Découvrez les liens d’un site avec MapAsync.
using Firecrawl.Models;
var data = await client.MapAsync("https://firecrawl.dev",
new MapOptions
{
Limit = 100,
Search = "blog"
});
if (data.Links != null)
{
foreach (var link in data.Links)
{
Console.WriteLine(link);
}
}
Effectuez une recherche avec des paramètres facultatifs via SearchAsync.
using Firecrawl.Models;
var results = await client.SearchAsync("firecrawl web scraping",
new SearchOptions
{
Limit = 10,
Location = "US"
});
if (results.Web != null)
{
foreach (var hit in results.Web)
{
Console.WriteLine($"{hit.Title} - {hit.Url}");
}
}
Scrapez plusieurs URL en parallèle à l’aide de BatchScrapeAsync. Cette méthode gère automatiquement l’interrogation et la pagination.
using Firecrawl.Models;
var urls = new List<string>
{
"https://firecrawl.dev",
"https://firecrawl.dev/blog"
};
var job = await client.BatchScrapeAsync(urls,
new BatchScrapeOptions
{
Options = new ScrapeOptions
{
Formats = new List<object> { "markdown" }
}
});
if (job.Data != null)
{
foreach (var doc in job.Data)
{
Console.WriteLine(doc.Markdown);
}
}
Pour éviter que des requêtes en double ne soient traitées, fournissez une IdempotencyKey :
var job = await client.BatchScrapeAsync(urls,
new BatchScrapeOptions
{
IdempotencyKey = "my-unique-key",
Options = new ScrapeOptions
{
Formats = new List<object> { "markdown" }
}
});
Vérifier la concurrence et les crédits restants :
using Firecrawl.Models;
var concurrency = await client.GetConcurrencyAsync();
Console.WriteLine($"Concurrency: {concurrency.Current}/{concurrency.MaxConcurrency}");
var credits = await client.GetCreditUsageAsync();
Console.WriteLine($"Remaining credits: {credits.RemainingCredits}");
Toutes les méthodes du SDK .NET sont async par défaut et renvoient Task<T>. Elles prennent également en charge CancellationToken pour permettre une annulation coopérative.
using Firecrawl.Models;
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(30));
var doc = await client.ScrapeAsync("https://example.com",
new ScrapeOptions
{
Formats = new List<object> { "markdown" }
},
cancellationToken: cts.Token);
Console.WriteLine(doc.Markdown);
Le constructeur FirecrawlClient accepte les options suivantes :
| Option | Type | Par défaut | Description |
|---|
apiKey | string? | variable d’environnement FIRECRAWL_API_KEY | Votre clé API Firecrawl |
apiUrl | string? | https://api.firecrawl.dev (ou FIRECRAWL_API_URL) | URL de base de l’API |
timeout | TimeSpan? | 5 minutes | Délai d’expiration de la requête HTTP |
maxRetries | int | 3 | Nouvelles tentatives automatiques en cas d’échecs temporaires |
backoffFactor | double | 0.5 | Facteur de backoff exponentiel en secondes |
httpClient | HttpClient? | Créé à partir de timeout | Instance HttpClient préconfigurée |
using Firecrawl;
var client = new FirecrawlClient(
apiKey: "fc-your-api-key",
apiUrl: "https://api.firecrawl.dev",
timeout: TimeSpan.FromMinutes(5),
maxRetries: 3,
backoffFactor: 0.5);
Vous pouvez transmettre un HttpClient préconfiguré pour contrôler le pool de connexions, les proxys, les gestionnaires de messages et toute autre fonctionnalité de HttpClient. Lorsqu’il est fourni, le paramètre timeout est ignoré au profit de la configuration du client lui-même.
using Firecrawl;
var handler = new HttpClientHandler
{
Proxy = new WebProxy("http://proxy.example.com:8080"),
UseProxy = true
};
var httpClient = new HttpClient(handler)
{
Timeout = TimeSpan.FromSeconds(60)
};
var client = new FirecrawlClient(
apiKey: "fc-your-api-key",
httpClient: httpClient);
Configuration des variables d’environnement
Le SDK détermine sa configuration à partir des variables d’environnement lorsque les paramètres du constructeur ne sont pas fournis :
// Utilise les variables d'environnement FIRECRAWL_API_KEY et FIRECRAWL_API_URL
var client = new FirecrawlClient();
Le SDK génère des exceptions spécifiques dans Firecrawl.Exceptions.
using Firecrawl.Exceptions;
using Firecrawl.Models;
try
{
var doc = await client.ScrapeAsync("https://example.com");
}
catch (AuthenticationException ex)
{
Console.Error.WriteLine($"Auth failed: {ex.Message}");
}
catch (RateLimitException ex)
{
Console.Error.WriteLine($"Rate limited: {ex.Message}");
}
catch (JobTimeoutException ex)
{
Console.Error.WriteLine($"Job {ex.JobId} timed out after {ex.TimeoutSeconds}s");
}
catch (FirecrawlException ex)
{
Console.Error.WriteLine($"Error {ex.StatusCode}: {ex.Message}");
}
La hiérarchie des exceptions :
| Exception | Code HTTP | Quand |
|---|
AuthenticationException | 401 | Clé API invalide ou manquante |
RateLimitException | 429 | Trop de requêtes |
JobTimeoutException | — | La tâche asynchrone (crawl/extraction par lot) n’a pas été terminée à temps |
FirecrawlException | variable | Exception de base pour toutes les autres erreurs de l’API |
Les échecs transitoires (408, 409, 502 et autres erreurs 5xx) sont automatiquement retentés avec un backoff exponentiel avant qu’une exception ne soit levée.
Êtes-vous un agent IA ayant besoin d’une clé API Firecrawl ? Consultez firecrawl.dev/agent-onboarding/SKILL.md pour les instructions d’intégration automatisée.