Package NPM: olostep
Commencer
import Olostep from 'olostep';
const client = new Olostep({apiKey: process.env.OLOSTEP_API_KEY});
// Exemple de scraping minimal
const result = await client.scrapes.create('https://example.com');
console.log(result.id, result.html_content);
Le SDK NodeJS accepte à la fois camelCase et snake_case pour tous les paramètres. Utilise snake_case si tu développes pour des agents IA, cela correspond aux noms de champs natifs de l’API.
Utilisation
Scraping
Scraper une seule URL avec diverses options :
import Olostep, {Format} from 'olostep';
const client = new Olostep({apiKey: 'your_api_key'});
// Scraping simple
const scrape = await client.scrapes.create('https://example.com');
// Avec plusieurs formats
const scrape = await client.scrapes.create({
url: 'https://example.com',
formats: [Format.HTML, Format.MARKDOWN, Format.TEXT],
waitBeforeScraping: 1000,
removeImages: true
});
// Accéder au contenu
console.log(scrape.html_content);
console.log(scrape.markdown_content);
// Obtenir le scraping par ID
const fetched = await client.scrapes.get(scrape.id);
Traitement par lot
Traiter plusieurs URLs dans un seul lot :
// Utilisation de chaînes d'URL (IDs personnalisés générés automatiquement)
const batch = await client.batches.create([
'https://example.com',
'https://example.org',
'https://example.net'
]);
// Ou avec des IDs personnalisés explicites
const batch = await client.batches.create([
{url: 'https://example.com', customId: 'site-1'},
{url: 'https://example.org', customId: 'site-2'}
]);
console.log(`Lot ${batch.id} créé avec ${batch.total_urls} URLs`);
// Attendre la fin
await batch.waitTillDone({
checkEveryNSecs: 5,
timeoutSeconds: 120
});
// Obtenir les informations du lot
const info = await batch.info();
console.log(info);
// Diffuser les résultats individuels
for await (const item of batch.items()) {
console.log(item.custom_id);
}
Exploration
Explorer un site web entier :
const crawl = await client.crawls.create({
url: 'https://example.com',
maxPages: 100,
maxDepth: 3,
includeUrls: ['*/blog/*'],
excludeUrls: ['*/admin/*']
});
console.log(`Exploration ${crawl.id} commencée`);
// Attendre la fin
await crawl.waitTillDone({
checkEveryNSecs: 10,
timeoutSeconds: 300
});
// Obtenir les informations de l'exploration
const info = await crawl.info();
console.log(`Exploré ${info.pages_crawled} pages`);
// Diffuser les pages explorées
for await (const page of crawl.pages()) {
console.log(page.url, page.status_code);
}
Cartographie du site
Générer une carte des URLs d’un site web :
const map = await client.maps.create({
url: 'https://example.com',
topN: 100,
includeSubdomain: true,
searchQuery: 'blog posts'
});
console.log(`Carte ${map.id} créée`);
// Diffuser les URLs
for await (const url of map.urls()) {
console.log(url);
}
// Obtenir les informations de la carte
const info = await map.info();
Réponses alimentées par l’IA
Obtenir des réponses à partir de pages web en utilisant l’IA :
import Olostep from 'olostep';
const client = new Olostep({apiKey: 'your_api_key'});
// Tâche simple : passer une chaîne directement
const answer = await client.answers.create(
'Quel est le sujet principal de https://example.com?'
);
console.log(answer.answer);
console.log(answer.sources);
// Avec sortie JSON structurée
const structured = await client.answers.create({
task: 'Extraire tous les noms de produits et prix de https://example.com',
jsonFormat: {
products: [{name: '', price: ''}]
}
});
console.log(structured.json_content);
// Récupérer une réponse précédemment créée par ID
const fetched = await client.answers.get(answer.id);
console.log(fetched.answer);
Récupération de contenu
Récupérer du contenu précédemment scrappé :
// Obtenir le contenu dans un format spécifique
const content = await client.retrieve(retrieveId, Format.MARKDOWN);
console.log(content.markdown_content);
// Plusieurs formats
const content = await client.retrieve(retrieveId, [
Format.HTML,
Format.MARKDOWN
]);
Options avancées
Actions personnalisées
Effectuer des actions de navigateur avant le scraping :
const scrape = await client.scrapes.create({
url: 'https://example.com',
actions: [
{type: 'wait', milliseconds: 2000},
{type: 'click', selector: '#load-more'},
{type: 'scroll', distance: 1000},
{type: 'fill_input', selector: '#search', value: 'query'}
]
});
Localisation géographique
Scraper depuis différents pays en utilisant des codes pays prédéfinis ou n’importe quel code pays valide :
import Olostep, {Country} from 'olostep';
const client = new Olostep({apiKey: 'your_api_key'});
// Utilisation de valeurs d'énumération prédéfinies (US, DE, FR, GB, SG)
const scrape = await client.scrapes.create({
url: 'https://example.com',
country: Country.DE // Allemagne
});
// Ou utiliser n'importe quel code pays valide en tant que chaîne
const scrape2 = await client.scrapes.create({
url: 'https://example.com',
country: 'jp' // Japon
});
Extraire des données structurées en utilisant les LLMs :
const scrape = await client.scrapes.create({
url: 'https://example.com',
llmExtract: {
schema: {
title: 'string',
price: 'number',
description: 'string'
},
prompt: 'Extraire les informations produit de cette page'
}
});
Configuration du client
import Olostep from 'olostep';
const client = new Olostep({
apiKey: 'your_api_key',
apiBaseUrl: 'https://api.olostep.com/v1', // optionnel
timeoutMs: 150000, // 150 secondes (optionnel)
retry: {
maxRetries: 3,
initialDelayMs: 1000
},
userAgent: 'MyApp/1.0' // optionnel
});
Points forts des fonctionnalités
- Client orienté asynchrone avec support complet de TypeScript.
- Entrées sécurisées par type utilisant des énumérations et interfaces TypeScript (Formats, Pays, Actions, etc.).
- Espaces de noms riches en ressources avec des appels abrégés (
client.scrapes.create()) et des méthodes explicites (client.scrapes.get()).
- Couche de transport partagée avec reprises, délais d’attente et décodage JSON.
- Hiérarchie d’erreurs complète