Pour le billet d’aujourd’hui, je vais m’intéresser à un problème classique de la vie d’un documentaliste : surveiller efficacement une page web. Alors, évidemment, je parle ici de surveiller un page web qui n’offre pas de fil RSS, ou encore de surveiller une partie précise d’une page web. Et je ne vais pas non plus vous présenter des bouts de code qui font le boulot, je vais plutôt vous présenter un outil que j’utilise pour cela. Il s’agit d’urlwatch.

Pour installer l’outil, et pour autant que Python soit déjà installé sur votre machine, il vous suffit de saisir la commande classique : pip install urlwatch. Il s’agit d’un programme qui va lire une liste de tâches, stockées dans un fichier nommé urls.yaml, et qui va générer un rapport : que ce soit un affichage dans le terminal, un mail ou une communication via un bot Slack, Matrix, Telegram, etc. Et pour que cet outil soit vraiment utile, il faut programmer une exécution régulière, que ce soit via cron sur Unix ou Windows Task Scheduler.

Un job simple : surveiller l’évolution des prix de serveurs

Pour éviter de laisser passer une éventuelle bonne affaire, je suis la page des serveurs Kimsufi avec la configuration suivante :

---
name: Prix des serveurs Kimsufi
navigate: https://www.kimsufi.com/fr/serveurs.xml
filter:
  - html2text:
      method: lynx
      width: 400

Cette configuration, utilisant l’option navigate va utiliser pyppeteer pour récupérer la page web avec la version headless de Google Chrome. De cette manière, la page est chargée avec un navigateur qui interprétera l’éventuel JavaScript. Cette page sera ensuite stockée et comparée d’une exécution d’urlwatch à l’autre avec une méthode équivalente à l’outil diff, bien connu des programmeurs. Voici un exemple de résultat :

===========================================================================
01. CHANGED: Prix des serveurs Kimsufi
===========================================================================

---------------------------------------------------------------------------
CHANGED: Prix des serveurs Kimsufi ( https://www.kimsufi.com/fr/serveurs.xml )
---------------------------------------------------------------------------
--- @   Fri, 11 Dec 2020 16:42:40 +0100
+++ @   Fri, 11 Dec 2020 21:40:59 +0100
@@ -42,7 +42,7 @@
    Victime de son succès !
    Disponible prochainement.
    KS-4 Intel  Atom N2800 2c/4t 1,86GHz 4Go DDR3 1066 MHz SoftRaid  2x2To  100 Mbps /128 13,99 € HT
-   (soit 16,79 € TTC)
+   (soit 16,79 € TTC) [icn-3600s-high.png]
    En cours de réapprovisionnement.
    Avez-vous pensé aux
    serveurs So You Start ?

---------------------------------------------------------------------------

Autre exemple : suivre la publication d’une nouvelle version d’un logiciel

---
name: Nouvelle version de dataverse
url: https://github.com/IQSS/dataverse/releases
filter:
  - xpath: '//div[contains(@class,"markdown-body")]/h1'
  - html2text: re
  - strip

Dans cette configuration, j’utilise une expression XPath pour sélectionner une partie précise de la page. Dans le cas présent, les titres de niveau 1.

Encore un autre exemple : surveiller un fichier PDF

Pour cette configuration, je n’ai pas d’exemple concret, car je ne l’ai pas encore utilisé pour mes propres besoins. Mais je sais que la fonctionnalité est utile, par exemple pour surveiller des textes normatifs. Voici l’exemple de la configuration du logiciel :

---
url: https://example.net/pdf-test.pdf
filter:
  - pdf2text
  - strip

Pour que cela fonctionne, il faut installer d’autres logiciels (pdftotext) et le module Python qui sert d’interface à ce dernier.

Et ainsi de suite…

L’outil est vraiment chouette et tout son potentiel réside dans le fait qu’il peut analyser n’importe quel texte produit par un logiciel, que ce texte soit une page web, une liste de fichiers présents dans un répertoire, etc. La documentation est bien construite et de nombreux exemples sont disponibles pour mettre en place ses propres surveillances.