Passer au contenu principal

Installation

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 :
bash dotnet add package firecrawl-sdk
Nécessite .NET 8.0 ou une version ultérieure.

Utilisation

  1. Obtenez une clé API sur firecrawl.dev
  2. 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}");

Scraping d’une URL

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"]);

Extraction de JSON

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"]);
    }
}

Démarrer un crawl

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}");

Vérifier l’état du crawl

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}");

Annuler un crawl

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);
    }
}

Recherche sur le Web

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}");
    }
}

Scraping par lots

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);
    }
}

Extraction par lot avec clé d’idempotence

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" }
        }
    });

Utilisation & métriques

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}");

Compatibilité async

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);

Configuration

Le constructeur FirecrawlClient accepte les options suivantes :
OptionTypePar défautDescription
apiKeystring?variable d’environnement FIRECRAWL_API_KEYVotre clé API Firecrawl
apiUrlstring?https://api.firecrawl.dev (ou FIRECRAWL_API_URL)URL de base de l’API
timeoutTimeSpan?5 minutesDélai d’expiration de la requête HTTP
maxRetriesint3Nouvelles tentatives automatiques en cas d’échecs temporaires
backoffFactordouble0.5Facteur de backoff exponentiel en secondes
httpClientHttpClient?Créé à partir de timeoutInstance 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);

Client HTTP personnalisé

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();

Gestion des erreurs

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 :
ExceptionCode HTTPQuand
AuthenticationException401Clé API invalide ou manquante
RateLimitException429Trop de requêtes
JobTimeoutExceptionLa tâche asynchrone (crawl/extraction par lot) n’a pas été terminée à temps
FirecrawlExceptionvariableException 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.