Ir para o conteúdo principal

Script para monitorar mudanças em sites — ou pule o script

Se você está procurando por 'python script monitor website' ou 'node monitor webpage', já conhece a receita: buscar uma URL, calcular hash, comparar com a última execução, disparar alerta na mudança. Esta página mostra a versão curta nas duas linguagens — e, em seguida, a alternativa com webhook gerenciado que substitui o script em produção.

O script abaixo aguenta uns sete dias. Depois uma classe CSS muda, o laptop entra em suspensão, o cron morre em silêncio, a URL do webhook do Slack é rotacionada e ninguém percebe que o monitor parou de disparar. O DiffHook é a versão em que outra pessoa cuida da infraestrutura, o webhook é assinado em HMAC e o log de entrega sobrevive a um reboot do laptop.

Python

Script em Python para monitorar um site

Uma dúzia de linhas de Python bastam para consultar uma página, calcular o hash da resposta e detectar mudança. O 'e agora?' é onde os scripts reais crescem — retries, deduplicação, entrega assinada, 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)

Isso funciona para uma página só durante uma demo. Para qualquer coisa em produção, você vai precisar de: timeouts, header User-Agent, tratamento de erros, um banco (ou ao menos um arquivo) para guardar o último hash e uma camada de entrega que não derrube o script.

Node

Ou: envie um POST criando um monitor no DiffHook

O equivalente em Node — só que, em vez de manter o loop de polling, este código cria um monitor gerenciado que roda na infraestrutura do DiffHook e dispara um webhook na mudança.

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 }],
  }),
})

Sem cron, sem VPS, sem 'será que meu laptop dormiu?'. O webhook é assinado em HMAC-SHA256 e reenviado em caso de falha. Os logs de entrega podem ser consultados via API.

Por que trocar o script

O que um monitor gerenciado realmente entrega

Existe um motivo para ninguém deixar um script de polling em Python rodando em produção. Estes seis são os modos de falha que viram chamado de fim de semana.

Sem falhas silenciosas

Quando o monitor do DiffHook não consegue buscar uma página, você é avisado — em vez de um cron silencioso que vem disparando errado há três semanas.

Webhooks assinados

Toda entrega carrega um header de assinatura HMAC-SHA256 para que seu receptor verifique que o POST veio do DiffHook e não foi adulterado.

Reenvio automático

Entregas que falham são reenviadas com backoff exponencial. Um receptor instável não faz você perder eventos.

Histórico de diffs

Mudanças anteriores ficam armazenadas e podem ser reproduzidas. Seu script precisaria de um banco — o DiffHook entrega o histórico como parte do produto.

Renderização de JS

Páginas renderizadas no cliente, SPAs e dashboards funcionam de cara. O Chromium headless é gerenciado — sem Playwright para instalar e manter.

Acesso de time

Colegas conseguem ver monitores, pausá-los e inspecionar os logs de entrega. Um script de shell rodando num laptop não oferece isso.

FAQ

Scripts vs monitores gerenciados

Devo escrever meu próprio script em vez de usar o DiffHook?
Para algo descartável ou um monitor pessoal de hobby, um script basta e o DiffHook é exagero. No dia em que ele precisar sobreviver a um reboot, verificar a autenticidade no receptor, lidar com reenvios em caso de falha ou liberar acesso a um colega — esse é o dia em que o script deixa de valer o esforço.
Consigo manter meu script e usar o DiffHook só para entrega?
Sim. Alguns times mantêm um scraper próprio (por exemplo, para um login complicado) e enviam o diff via POST para um endpoint de webhook do DiffHook, que assina e redistribui. A API de webhooks recebidos do DiffHook aceita payloads arbitrários e você mantém as garantias de entrega.
O DiffHook serve também para monitoramento de APIs JSON?
Sim. O DiffHook tem um tipo de monitor JSON API nativo — aponte para um endpoint, informe um JSONPath e receba um webhook quando o valor mudar. Você substitui o loop de polling em Python/Node da mesma forma.
Como é o payload de webhook do DiffHook?
Toda mudança dispara um POST JSON com: tipo do evento (page.changed, json.changed, rss.new_item), ID do monitor, URL alvo, timestamp, snapshots de antes/depois ou diff, e metadados da entrega. Todos os payloads são assinados em HMAC-SHA256 — dá para verificar a autenticidade em seis linhas de código.

Relacionado

Recursos relacionados

Aposente o script de polling

3 monitores grátis, webhooks assinados em HMAC, logs de entrega que você pode reprocessar e API REST completa. Sem cartão de crédito.

DiffHook - Monitoramento de sites