Saltar al contenido principal

Documentation Index

Fetch the complete documentation index at: https://docs.olostep.com/llms.txt

Use this file to discover all available pages before exploring further.

Paquete NPM: olostep

Comenzando

npm install olostep
import Olostep from 'olostep';

const client = new Olostep({apiKey: process.env.OLOSTEP_API_KEY});

// Ejemplo mínimo de scraping
const result = await client.scrapes.create('https://example.com');
console.log(result.id, result.html_content);
El SDK de NodeJS acepta tanto camelCase como snake_case para todos los parámetros. Usa snake_case si estás desarrollando para agentes de IA, ya que coincide con los nombres de campo nativos de la API.

Uso

Scraping

Realiza scraping de una sola URL con varias opciones:
import Olostep, {Format} from 'olostep';

const client = new Olostep({apiKey: 'your_api_key'});

// Scraping simple
const scrape = await client.scrapes.create('https://example.com');

// Con múltiples formatos
const scrape = await client.scrapes.create({
  url: 'https://example.com',
  formats: [Format.HTML, Format.MARKDOWN, Format.TEXT],
  waitBeforeScraping: 1000,
  removeImages: true
});

// Accede al contenido
console.log(scrape.html_content);
console.log(scrape.markdown_content);

// Obtén el scrape por ID
const fetched = await client.scrapes.get(scrape.id);

Procesamiento por lotes

Procesa múltiples URLs en un solo lote:
// Usando cadenas de URL (IDs personalizados generados automáticamente)
const batch = await client.batches.create([
  'https://example.com',
  'https://example.org',
  'https://example.net'
]);

// O con IDs personalizados explícitos
const batch = await client.batches.create([
  {url: 'https://example.com', customId: 'site-1'},
  {url: 'https://example.org', customId: 'site-2'}
]);

console.log(`Lote ${batch.id} creado con ${batch.total_urls} URLs`);

// Espera a que se complete
await batch.waitTillDone({
  checkEveryNSecs: 5,
  timeoutSeconds: 120
});

// Obtén información del lote
const info = await batch.info();
console.log(info);

// Transmite resultados individuales
for await (const item of batch.items()) {
  console.log(item.custom_id);
}

Rastreo

Rastrea un sitio web completo:
const crawl = await client.crawls.create({
  url: 'https://example.com',
  maxPages: 100,
  maxDepth: 3,
  includeUrls: ['*/blog/*'],
  excludeUrls: ['*/admin/*']
});

console.log(`Rastreo ${crawl.id} iniciado`);

// Espera a que se complete
await crawl.waitTillDone({
  checkEveryNSecs: 10,
  timeoutSeconds: 300
});

// Obtén información del rastreo
const info = await crawl.info();
console.log(`Se rastrearon ${info.pages_crawled} páginas`);

// Transmite páginas rastreadas
for await (const page of crawl.pages()) {
  console.log(page.url, page.status_code);
}

Mapeo del sitio

Genera un mapa del sitio de URLs de un sitio web:
const map = await client.maps.create({
  url: 'https://example.com',
  topN: 100,
  includeSubdomain: true,
  searchQuery: 'blog posts'
});

console.log(`Mapa ${map.id} creado`);

// Transmite URLs
for await (const url of map.urls()) {
  console.log(url);
}

// Obtén información del mapa
const info = await map.info();

Respuestas impulsadas por IA

Obtén respuestas de páginas web usando IA:
import Olostep from 'olostep';

const client = new Olostep({apiKey: 'your_api_key'});

// Tarea simple: pasa una cadena directamente
const answer = await client.answers.create(
  '¿Cuál es el tema principal de https://example.com?'
);
console.log(answer.answer);
console.log(answer.sources);

// Con salida JSON estructurada
const structured = await client.answers.create({
  task: 'Extrae todos los nombres de productos y precios de https://example.com',
  jsonFormat: {
    products: [{name: '', price: ''}]
  }
});
console.log(structured.json_content);

// Recupera una respuesta previamente creada por ID
const fetched = await client.answers.get(answer.id);
console.log(fetched.answer);

Recuperación de contenido

Recupera contenido previamente extraído:
// Obtén contenido en formato(s) específico(s)
const content = await client.retrieve(retrieveId, Format.MARKDOWN);
console.log(content.markdown_content);

// Múltiples formatos
const content = await client.retrieve(retrieveId, [
  Format.HTML,
  Format.MARKDOWN
]);

Opciones avanzadas

Acciones personalizadas

Realiza acciones del navegador antes de hacer 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'}
  ]
});

Ubicación geográfica

Realiza scraping desde diferentes países usando códigos de país predefinidos o cualquier cadena de código de país válida:
import Olostep, {Country} from 'olostep';

const client = new Olostep({apiKey: 'your_api_key'});

// Usando valores de enumeración predefinidos (US, DE, FR, GB, SG)
const scrape = await client.scrapes.create({
  url: 'https://example.com',
  country: Country.DE  // Alemania
});

// O usa cualquier código de país válido como cadena
const scrape2 = await client.scrapes.create({
  url: 'https://example.com',
  country: 'jp'  // Japón
});

Extracción LLM

Extrae datos estructurados usando LLMs:
const scrape = await client.scrapes.create({
  url: 'https://example.com',
  llmExtract: {
    schema: {
      title: 'string',
      price: 'number',
      description: 'string'
    },
    prompt: 'Extrae información del producto de esta página'
  }
});

Configuración del cliente

import Olostep from 'olostep';

const client = new Olostep({
  apiKey: 'your_api_key',
  apiBaseUrl: 'https://api.olostep.com/v1',  // opcional
  timeoutMs: 150000,  // 150 segundos (opcional)
  retry: {
    maxRetries: 3,
    initialDelayMs: 1000
  },
  userAgent: 'MyApp/1.0'  // opcional
});

Características destacadas

  • Cliente asíncrono con soporte completo para TypeScript.
  • Entradas seguras en tipos usando enumeraciones e interfaces de TypeScript (Formatos, Países, Acciones, etc.).
  • Espacios de nombres de recursos ricos con llamadas abreviadas (client.scrapes.create()) y métodos explícitos (client.scrapes.get()).
  • Capa de transporte compartida con reintentos, tiempos de espera y decodificación JSON.
  • Jerarquía de errores completa