Skip to main content
POST https://api.acedata.cloud/webextrator/extract L’API d’extraction intelligente WebExtrator transforme une URL en résultats structurés typés — articles, produits, recettes, vidéos, discussions, offres d’emploi, etc., tout en fournissant du Markdown nettoyé et du texte brut. Lorsque vous souhaitez des “données structurées propres” plutôt que du HTML brut, c’est l’interface à utiliser. La base est un pipeline à trois niveaux :
  1. Mapper JSON-LD schema.org — Déterministe, coût LLM nul. Couvre Wikipedia / BestBuy / AllRecipes / YouTube / la plupart des nouvelles / la plupart des pages de produits.
  2. Extraction LLM typée — Déclenchée uniquement lorsque schema.org n’est pas atteint. Sélectionnez le schéma selon le type de page, validation stricte Zod.
  3. Readability + Markdown en dernier recours — Toujours en cours d’exécution, complétant les champs de niveau supérieur non remplis des deux premières couches.
Les demandes répétées d’URL seront capturées par le cache de résultats Redis, <1 ms de retour.

Processus de demande

Pour utiliser la page de service WebExtrator, commencez par obtenir votre jeton API sur le tableau de bord Ace Data Cloud pour le garder en réserve. Si vous n’êtes pas encore connecté ou inscrit, vous serez automatiquement redirigé vers la page de connexion vous invitant à vous inscrire et à vous connecter, après quoi vous serez automatiquement renvoyé à la page actuelle. Un jeton API suffit pour appeler tous les services de la plateforme, sans avoir à en demander un pour chaque service. La première demande vous donnera un quota gratuit, vous permettant de l’essayer gratuitement ; lorsque le quota est insuffisant, vous pouvez recharger le solde général dans le tableau de bord.
📘 Documentation complète : Page de service WebExtrator →

Authentification

Paramètres de demande

Extract accepte tous les paramètres de Render API (url, user_agent, timeout, wait_until, delay, wait_for_selector, block_resources, headers, cookies, callback_url, bypass_cache, cache_ttl_seconds, async), plus deux champs exclusifs à Extract :
Lorsque la page contient déjà schema.org JSON-LD, enable_llm est inactif — le mapper déterministe produit directement un résultat, ne gaspillant jamais un appel LLM. Vous obtenez gratuitement des résultats typés.

Réponse synchrone

Champs de niveau supérieur

Sous-champs de data.structured

Portée du mappage schema.org

Trié par priorité (la première correspondance est utilisée comme structured.schemaOrg.primary) : Traitement du mappage :
  • Conteneur @graph (déplié de manière récursive) ;
  • Tableau @type (comme ["Recipe", "NewsArticle"] — les deux sont reconnus, la priorité l’emporte) ;
  • Variantes avec préfixe http://schema.org/ ;
  • Offer et AggregateOffer imbriqués (ce dernier lit lowPrice) ;
  • URL d’image relatives (résolues en absolues selon finalUrl).

Schéma typé LLM

Lorsque enable_llm: true et qu’il n’y a pas de primary schema.org, l’extracteur utilise une heuristique basée sur l’URL (ou un indice expected_type) pour sélectionner l’un des modèles de validation Zod suivants : En cas de succès, LLM remplira également les champs de niveau supérieur en tant que “dernier recours” :
  • articledescription / byline / publishedAt / language
  • productdescription
  • discussiondescription (les 280 premiers caractères du corps) / byline ( = auteur) / publishedAt ( = postedAt)
  • recipedescription / byline ( = auteur)
  • videodescription / byline ( = chaîne) / publishedAt ( = uploadDate)
  • jobdescription / byline ( = entreprise) / publishedAt ( = datePosted)
Le remplissage ne se déclenche que lorsque la source de données déterministe n’a pas rempli les champs correspondants — LLM est toujours le dernier recours.

Cache

Les mêmes requêtes seront hachées vers la même clé Redis : webextrator:cache:extract:<sha256(canonical-json)>. La clé de cache ignore async, bypass_cache, cache_ttl_seconds (c’est un interrupteur d’opération, n’affecte pas la réponse). cookies / headers seront mis en cache par compartiments. Les réponses ayant atteint le cache porteront data.cached: true et data.cacheStoredAt: <unix-ms>.

Mode asynchrone et rappel

Définir async: true pour entrer en mode asynchrone (fournir callback_url entraînera également une entrée automatique). La plateforme renvoie immédiatement (HTTP 200) :
Lorsque la tâche est terminée, le POST complet de l’enveloppe est envoyé à votre callback_url (si configuré). Vous pouvez également interroger activement via /webextrator/tasks.

Exemple

1. Article Wikipedia (schema.org correspond, pas besoin de LLM)

Champs clés de data.structured.schemaOrg.primary :

2. Page produit BestBuy (schema.org hit)

schema.org extraction :

3. Page de recette AllRecipes (avec nutrition et étapes)

schema.org extraction :

4. Page de discussion HN (sans JSON-LD — nécessite l’activation de LLM)

data.structured.llm.data :
Les champs de niveau supérieur ont également été remplis : byline = "alice"publishedAt = "..."

5. Page produit Amazon (Amazon sans JSON-LD — nécessite l’activation de LLM)

data.structured.llm.data (type product) :

Python (requests)

Node.js (fetch)

Conseils et pièges

  • Si vous pouvez passer expected_type, faites-le. Astuce gratuite, évitez le jugement heuristique, surtout utile pour les pages dont le modèle d’URL n’est pas dans la liste intégrée.
  • enable_llm: true sur les pages avec un hit schema.org est gratuit. LLM n’est appelé que lorsque schema.org n’a pas de primaire, donc c’est généralement sûr de le laisser activé.
  • Pour le débogage, vérifiez d’abord rawSignals.hasJsonLd. Si c’est true mais que structured.schemaOrg.primary est null, cela signifie que la page utilise un @type que notre mappage n’a pas encore couvert — ouvrez un problème, nous ajouterons.
  • structured.llmError est informatif. La demande réussit toujours, les résultats heuristiques sont toujours renvoyés. Consultez llmError.error pour localiser la raison (délai d’attente, échec de l’analyse JSON, échec de la validation Zod).
  • Les links[] des pages non-articles ne seront pas triés par pertinence. Seulement selon “limite de 100 éléments + filtrage des protocoles invalides” pour essayer de nettoyer.
  • Les hits de cache sont également facturés. Le cache est là pour réduire la latence et protéger le pool de navigateurs, pas pour économiser de l’argent.