Extraer un artículo
Un artículo periodístico son unas 400 palabras envueltas en una página que trae 4.000 palabras de adorno — widgets de noticias relacionadas, secciones de comentarios, avisos de suscripción, tres redes publicitarias distintas. Esta API de extracción de artículos es el modo lectura convertido en endpoint: envía una URL, recibe título, autor, fecha y cuerpo, y nada más.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
La idea del modo lectura, y por qué sigue importando
Los modos de lectura del navegador existen porque los medios optimizan sus páginas para ingresos publicitarios y engagement, no para la persona que solo quiere terminar de leer. Esa tensión no ha desaparecido — si acaso, los avisos de cookies, el video autorreproducible y las cintas infinitas de contenido relacionado han vuelto más ruidosa la página cruda de un artículo con el tiempo. Este endpoint aplica el mismo instinto que usan los navegadores con un solo clic, pero como API que cualquier flujo puede invocar a escala.
Qué identifica realmente la extracción
La página se renderiza primero para no perder contenido cargado con JavaScript o de forma diferida, y luego la región de contenido principal se separa de la navegación, las barras laterales, los comentarios y los widgets de artículos relacionados usando señales estructurales y textuales — densidad de contenido, patrones de etiquetas, y marcado típico de artículo. La salida separa el título, el autor cuando está disponible, la fecha de publicación cuando está disponible, y el cuerpo del artículo como texto limpio o Markdown ligero.
De dónde viene la extracción de artículos
La técnica se remonta a las primeras implementaciones de modo lectura de los navegadores y a las librerías de 'legibilidad' de la era RSS, construidas para resolver un problema muy concreto: dada una página de noticias cualquiera, encontrar el artículo dentro de ella. Ese problema resultó ser reutilizable mucho más allá de los navegadores — en cualquier lugar donde un sistema necesite la sustancia de una página sin que una persona revise a ojo cuál div es el contenido real.
Por qué no es lo mismo que los conversores a Markdown o texto
Los endpoints de Markdown y texto plano convierten todo el contenido legible de la página, lo cual es correcto para documentación o páginas cualesquiera. La extracción de artículos es más estrecha y más deliberada — identifica específicamente el autor, la fecha y el cuerpo de un solo artículo, y descarta todo lo que estructuralmente se identifica como no-artículo, lo cual importa cuando una página es mayormente navegación y solo una pequeña parte es la nota en sí.
Cómo se integra en la lectura automatizada
Alimente los artículos extraídos a un resumidor, una llamada de traducción o un archivo personal de lectura pendiente, y cada entrada llega con la misma forma sin importar de cuál sitio de noticias provino. Como la entrega es asíncrona por webhook o por un enlace firmado de 24 horas, un flujo de monitoreo de noticias puede extraer decenas de artículos al día sin mantener una sola conexión abierta.
Qué puede hacer con ella
Flujos de monitoreo de noticias
Extraiga el cuerpo limpio de artículos de decenas de fuentes de noticias a diario para alimentar un sistema de resúmenes o alertas sin scrapers por sitio.
Herramientas de lectura pendiente y archivo
Guarde el artículo, no la página, para que una biblioteca personal siga siendo legible años después de que el sitio original cambie o desaparezca.
Agregación de contenido
Obtenga campos consistentes de título, autor y cuerpo de artículos de muchos medios con marcado y maquetas distintas.
Investigación y recopilación de citas
Extraiga el texto del cuerpo de artículos fuente para un resumen de investigación sin copiar texto a mano de páginas cargadas de anuncios.
Preguntas frecuentes
¿Qué devuelve la extracción de artículos?
Título, autor cuando está disponible, fecha de publicación cuando está disponible, y el cuerpo del artículo como texto limpio, sin navegación, anuncios ni comentarios.
¿Funciona en sitios de noticias cargados de JavaScript?
Sí, la página se renderiza primero para capturar el contenido cargado del lado del cliente antes de identificar y extraer el artículo.
¿Puede saltarse muros de pago?
No, extrae lo que está presente en la página renderizada; el contenido genuinamente bloqueado por un muro de pago al que su cuenta no accede no aparecerá.
¿Hay plan gratuito?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cómo se cobra?
$0.040 por solicitud más $0.001 por URL, la misma tarifa publicada ya sea que la fuente sea una entrada de blog o un gran medio.
¿Qué tan precisa es la extracción en maquetas poco comunes?
Se apoya en señales estructurales y de contenido comunes a las páginas de artículos; las maquetas muy fuera de lo estándar a veces incluyen fragmentos extra, por lo que el resultado está pensado para revisión, no para carga a ciegas.
¿Qué pasa si la extracción falla?
La tarea reintenta automáticamente hasta tres veces; una página que sigue fallando devuelve un error claro y no se cobra.
¿Cómo recibo el artículo extraído?
Por webhook firmado cuando la tarea termina, o por un enlace firmado válido 24 horas si prefiere obtenerlo usted mismo.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/web/article \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://ejemplo.com"}'const res = await fetch("https://api.kit.forhosting.com/web/article", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://ejemplo.com"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/article",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://ejemplo.com"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/article", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://ejemplo.com"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://ejemplo.com"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/article", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"url": "https://ejemplo.com"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.article",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
timeout_sec | 30 |
max_crawl_pages | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |