Saltar al contenido principal

Script para monitorizar cambios en un sitio — o salta el script

Si estás buscando en Google «python script monitor website» o «node monitor webpage», ya conoces la receta: descargar una URL, hacer un hash, compararlo con la ejecución anterior y alertar si hay cambios. Esta página muestra la versión corta en ambos lenguajes — y después la alternativa gestionada con webhooks que sustituye al script en producción.

El script de abajo funciona cerca de una semana. Luego cambia una clase CSS, el portátil se suspende, el cron muere en silencio, se rota la URL del webhook de Slack y nadie se entera de que el monitor ha dejado de dispararse. DiffHook es la versión en la que otro asume la infraestructura, el webhook va firmado con HMAC y el registro de entrega sobrevive a un reinicio del portátil.

Python

Script Python para monitorizar un sitio

Una docena de líneas de Python bastan para sondear una página, hacer un hash de la respuesta y detectar un cambio. La parte del «¿y ahora qué?» es donde los scripts de verdad crecen — reintentos, deduplicación, entrega firmada, logs.

monitor.py
import hashlib, time, urllib.request

URL = "https://example.com/pricing"
last = None
while True:
    html = urllib.request.urlopen(URL).read()
    h = hashlib.sha256(html).hexdigest()
    if last and h != last:
        print("changed")  # then… what?
    last = h
    time.sleep(300)

Esto aguanta para una página en una demo. Para cualquier cosa en producción hacen falta: timeouts, cabecera User-Agent, manejo de errores, una base de datos (o al menos un archivo) para guardar el último hash y una capa de entrega que no tumbe el script.

Node

O: hacer POST de un monitor a DiffHook

El equivalente en Node — salvo que, en vez de mantener el bucle de polling, esto crea un monitor gestionado que se ejecuta en la infraestructura de DiffHook y dispara un webhook cuando hay cambio.

monitor.ts
await fetch("https://api.diffhook.com/v1/monitors", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${token}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    type: "page",
    url: "https://example.com/pricing",
    interval_seconds: 300,
    deliveries: [{ type: "webhook", url: hookUrl }],
  }),
})

Sin cron, sin VPS, sin «¿se me suspendió el portátil?». El webhook está firmado con HMAC-SHA256 y se reintenta en caso de fallo. Los logs de entrega se consultan vía API.

Por qué sustituir el script

Lo que un monitor gestionado realmente te aporta

Por algo nadie deja su script de polling en Python en producción. Estos son los seis modos de fallo que acaban en guardia de fin de semana.

Sin fallos silenciosos

Cuando el monitor de DiffHook no puede obtener una página, recibes una notificación — no un cron en silencio que lleva tres semanas funcionando mal.

Webhooks firmados

Cada entrega lleva una cabecera de firma HMAC-SHA256 para que tu receptor verifique que el POST proviene de DiffHook y no ha sido manipulado.

Reintentos integrados

Las entregas fallidas se reintentan con backoff exponencial. Un receptor inestable no te hace perder eventos.

Historial de diffs

Los cambios pasados se almacenan y se pueden reproducir. Tu script necesitaría una base de datos — DiffHook entrega el historial como parte del producto.

Renderizado JS

Páginas renderizadas en cliente, SPA y paneles funcionan de serie. Del Chromium headless nos encargamos nosotros — sin instalación de Playwright que mantener.

Acceso de equipo

Los compañeros pueden ver monitores, pausarlos e inspeccionar logs de entrega. Un script en un portátil no hace eso.

FAQ

Scripts vs monitores gestionados

¿Debería escribir mi propio script en vez de usar DiffHook?
Para algo desechable o un monitor casero, un script vale y DiffHook es excesivo. El día que necesites que sobreviva a un reinicio, verificar la autenticidad en el receptor, gestionar reintentos o dar acceso a un compañero — ese es el día en que el script deja de compensar.
¿Puedo mantener mi script y usar DiffHook solo para la entrega?
Sí. Algunos equipos mantienen un scraper a medida (por ejemplo para un login complicado) y envían por POST el diff a un endpoint webhook de DiffHook que luego firma y distribuye. La API de webhooks entrantes de DiffHook acepta payloads arbitrarios y conservas las garantías de entrega.
¿Sirve DiffHook también para monitorización de APIs JSON?
Sí. DiffHook tiene un tipo de monitor JSON API nativo — apuntas a un endpoint, das un JSONPath y recibes un webhook cuando el valor cambia. Puedes sustituir el bucle de polling en Python/Node del mismo modo.
¿Cómo es el payload de webhook de DiffHook?
Cada cambio dispara un POST JSON con: tipo de evento (page.changed, json.changed, rss.new_item), ID del monitor, URL objetivo, marca de tiempo, capturas antes/después o diff, y metadatos de entrega. Todos los payloads están firmados con HMAC-SHA256 — verificas la autenticidad en seis líneas de código.

Relacionado

Recursos relacionados

Jubila el script de polling

3 monitores gratuitos, webhooks firmados con HMAC, logs de entrega reproducibles, API REST completa. Sin tarjeta de crédito.

DiffHook - Monitorizacion de sitios web