Saltar al contenido principal
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);

// Obtener scraping 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`);

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

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

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

Crawling

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(`Crawl ${crawl.id} iniciado`);

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

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

// Transmitir 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`);

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

// Obtener 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(
  'What is the main topic of https://example.com?'
);
console.log(answer.answer);
console.log(answer.sources);

// Con salida JSON estructurada
const structured = await client.answers.create({
  task: 'Extract all product names and prices from https://example.com',
  jsonFormat: {
    products: [{name: '', price: ''}]
  }
});
console.log(structured.json_content);

// Recuperar 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:
// Obtener 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

Haz 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 con 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: 'Extract product information from this page'
  }
});

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 orientado a async con soporte completo para TypeScript.
  • Entradas seguras con TypeScript usando enums e interfaces (Formats, Countries, Actions, 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