Aller au contenu principal

Script pour surveiller les changements d'un site — ou abandonner le script

Si vous tapez 'script python pour surveiller un site' ou 'node monitor webpage' dans Google, vous connaissez déjà la forme : fetch d'une URL, hash, comparaison au dernier run, alerte sur changement. Cette page montre la version courte dans les deux langages — puis l'alternative webhook managée qui remplace le script en production.

Le script ci-dessous tient environ une semaine. Puis une classe CSS change, le laptop se met en veille, le cron meurt en silence, l'URL webhook Slack est révoquée et personne ne sait que le moniteur ne tourne plus. DiffHook, c'est la même chose — mais quelqu'un d'autre gère l'infrastructure, le webhook est signé HMAC et le journal de livraison survit à un redémarrage de laptop.

Python

Script Python pour surveiller un site

Une dizaine de lignes de Python suffisent à interroger une page, hasher la réponse et détecter un changement. La partie 'et après ?' est celle où les vrais scripts grossissent — retries, déduplication, livraison signée, 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)

Ça tient pour une page unique le temps d'une démo. En production, il faudra ajouter : timeouts, en-tête User-Agent, gestion d'erreurs, base de données (ou fichier) pour conserver le dernier hash, et une couche de livraison qui ne fait pas planter le script.

Node

Ou : POSTer un moniteur à DiffHook

L'équivalent Node — sauf qu'au lieu d'entretenir une boucle de polling, ce bout de code crée un moniteur géré qui tourne dans l'infrastructure DiffHook et déclenche un webhook en cas de changement.

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

Pas de cron, pas de VPS, pas de 'mon laptop s'est-il mis en veille ?'. Le webhook est signé HMAC-SHA256 et réessayé en cas d'échec. Les journaux de livraison sont interrogeables via l'API.

Pourquoi remplacer le script

Ce qu'un moniteur managé vous apporte réellement

Il y a une raison pour laquelle personne ne laisse son script Python en production. Ces six-là sont les modes de défaillance qui finissent en astreinte du week-end.

Pas d'échecs silencieux

Quand le moniteur DiffHook n'arrive pas à récupérer une page, vous recevez une notification — pas un cron qui tourne dans le vide depuis trois semaines.

Webhooks signés

Chaque livraison porte un en-tête de signature HMAC-SHA256 pour que votre destinataire vérifie que le POST vient bien de DiffHook et n'a pas été altéré.

Retries intégrés

Les livraisons échouées sont réessayées avec un backoff exponentiel. Un destinataire instable ne vous fait pas perdre d'événements.

Historique des diffs

Les changements passés sont stockés et rejouables. Votre script aurait besoin d'une base de données dédiée — DiffHook livre l'historique comme une fonctionnalité du produit.

Rendu JS

Pages client-rendered, SPA et dashboards fonctionnent d'emblée. Chromium headless est géré pour vous — pas d'installation Playwright à entretenir.

Accès équipe

Les collègues peuvent consulter les moniteurs, les mettre en pause, inspecter les journaux. Votre script shell sur un laptop ne fait pas ça.

FAQ

Scripts vs moniteurs managés

Devrais-je écrire mon propre script plutôt qu'utiliser DiffHook ?
Pour un one-shot jetable ou un moniteur hobby personnel, un script convient et DiffHook est surdimensionné. Le jour où il doit survivre à un redémarrage de laptop, vérifier l'authenticité côté receveur, gérer des retries ou être accessible à un collègue — c'est le jour où le script cesse de se rentabiliser.
Puis-je garder mon script et n'utiliser DiffHook que pour la livraison ?
Oui. Certaines équipes gardent un scraper maison (par exemple pour un login complexe) et POSTent le diff sur un endpoint webhook DiffHook qui signe et distribue ensuite la livraison. L'API de webhook entrant de DiffHook accepte des payloads arbitraires et vous conservez les garanties de livraison.
DiffHook fonctionne-t-il aussi pour la surveillance d'API JSON ?
Oui. DiffHook a un type de moniteur JSON API natif — pointez sur un endpoint, fournissez un JSONPath et obtenez un webhook quand la valeur change. Vous pouvez remplacer votre boucle de polling Python/Node de la même manière.
À quoi ressemble le payload webhook DiffHook ?
Chaque changement déclenche un POST JSON avec : type d'événement (page.changed, json.changed, rss.new_item), ID du moniteur, URL cible, timestamp, snapshots avant/après ou diff, et métadonnées de livraison. Tous les payloads sont signés HMAC-SHA256 — vous pouvez vérifier l'authenticité en six lignes de code.

Associés

Ressources connexes

Remisez votre script de polling

3 moniteurs gratuits, webhooks signés HMAC, journaux de livraison rejouables, API REST complète. Sans carte bancaire.

DiffHook - Surveillance de sites web