Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Paradigmes informatiques

Surveiller les changements d'une page internet depuis un script Linux

02/11/2023

Si vous souhaitez surveiller une modification de page Internet, vous pouvez vous tourner vers des sites spécialisés, qui proposent de récupérer à intervalles réguliers une page et de vous notifier en cas de changement de celle-ci. Cela peut impliquer un paiement ou le recueil de vos informations personnelles...

Aussi, j'ai réalisé un script en Bash qui offre ces mêmes fonctionnalités. Il propose :

  • de renseigner une ou plusieurs URL à surveiller
  • pour chacune, de saisir une expression régulière, afin d'extraire seulement une partie de la page
  • de télécharger la page et, en cas de modification, d'envoyer un email avec un titre personnalisé
  • de visualiser les dernières valeurs récupérées (en les stockant dans un fichier historique)
#!/bin/bash

# Tableau d'URL à surveiller
urls=(
    "https://site.com/ps5-pro.html"
    "https://site.fr/ps5-pro.html"
    )

# Tableau d'expressions régulières correspondantes
regex=(
 ".*<span id=\"product-availability\">[^<]*<span class=\"control-label\">[^<]*</span>([^<]*)</span>.*"
 ".*<span id=\"product-availability\">[^<]*<span class=\"control-label\">[^<]*</span>([^<]*)</span>.*"
)

# Tableau de sujets d'e-mail correspondants
emailSujet=(
    "Changement sur PS5, site 1"
    "Changement sur PS5, site 2"
    )

repSauve="analyses"                 # Répertoire de stockage des appels précédents
emailDesti=monemail@domaine.fr  # Email destinataire (mettre vide si aucun email à envoyer)

# Créer le répertoire s'il n'existe pas
if [ ! -d "$repSauve"; then
 mkdir "$repSauve"
fi

# Fonction pour surveiller une URL donnée
function surveille_url() {
    local url="$1"
    local reg="$2"
    local email="$3"
    local sujet="$4"

    # Extrait le nom du domaine de l'URL pour le nom du fichier de sauvegarde
    nomDomaine=$(echo "$url" | grep -oP '(?<=://)[^/]+')

    # Extrait le nom de fichier de l'URL et remplace les caractères invalides par des underscores
    nomFichier=$(basename "$url" | tr '/.' '_')

    fichierSauvegarde="$repSauve/${nomDomaine}_${nomFichier}.txt"

    # Télécharge la page
    echo "Vérifie ${url}"
    curl -s "$url" > "page.html"

    # Extraction (en supprimant les retours chariots)
    valActu=$(tr -d '\n' < "page.html" | sed -n -E "s#$reg#\1#p" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')

    rm "page.html"

    if [ ! -e "$fichierSauvegarde"; then
        # Si 1er appel
        valPreced=$valActu
    else
        # Sinon, lit la valeur précédente
        valPreced=$(tail -n 1 "$fichierSauvegarde" | sed 's/^[^:]*:[[:space:]]*//')
    fi

    # Enregistre la valeur extraite
    echo $(date +'%Y-%m-%d_%H-%M-%S') " : $valActu" >> "$fichierSauvegarde"

    # Limite le nombre de lignes à conserver
    fichierTmp=$(mktemp) # Crée un fichier temporaire
    tail -n 100 "$fichierSauvegarde" > "$fichierTmp" # Conserve les 100 dernières lignes
    mv "$fichierTmp" "$fichierSauvegarde" # Remplace le fichier d'origine par le fichier temporaire

    # Compare les valeurs précédente/actuelle
    if [ "$valActu" != "$valPreced"; then
        echo "- Ancienne valeur : '$valPreced'"
        echo "- Nouvelle valeur : '$valActu'"

        if [ -n "$email"; then
            message="La page $url qui est en surveillance a changé : la valeur est passée à '$valActu'"
            echo "$message" | mail -s "$sujet" "$email"
        fi
    else
        echo "- La valeur est inchangée : '$valActu'"
    fi
    echo
}

# Parcourir les URL, expressions régulières et sujets d'e-mail correspondants
for ((i = 0; i < ${#urls[@]}; i++)); do
 surveille_url "${urls[i]}" "${regex[i]}" "${emailDesti}" "${emailSujet[i]}"
done

Une fois créé, il faut planifier une exécution régulière du script :

  • Affichez le gestionnaire CRON :
    crontab -e
  • Ajoutez la ligne suivante, enregistrez et quittez
    */180 * * * * bash /opt/scripts/monitorer_page.sh

Le script sera ainsi lancé toutes les 3 h.

Dernière modification le 02/11/2023 - Quillevere.net

Commentaires

Aucune inscription n'est requise si vous souhaitez

Rechercher sur le site

fr en rss RSS info Informations