Weboldal változás értesítő szkript

Újra és újra felmerülő probléma, hogy szeretnénk minél hamarabb értesülni egy weboldal módosulásáról anélkül, hogy azt folyamatosan nézegetnünk kellene. Egyetemi keretek között erre jellemző példa, mikor valamely ZH eredményének internetre kikerülését várjuk.

Némi guglizás után ugyan lehet találni erre alkalmasnak tűnő oldalakat, ugyanakkor, ha kicsit is paranoiásak vagyunk és szeretnénk elkerülni az esetleges spam áradatot, akkor nem szívesen adjuk meg mindenhol az e-mail címünket. Ráadásul a legtöbb ilyen ingyenes szolgáltatás rendelkezik limitációkkal is, mint például a megfigyelhető URL-ek száma, vagy az ellenőrzések gyakorisága.

Erre a problémára készült az alábbi kis bash script, melyet crontab-ban elhelyezve akár percenkénti ellenőrzést is végezhetünk tetszőleges számú oldal és értesítendő e-mail cím felhasználásával.

A konfigurációt jelen esetben két lista módosítása jelenti: sites és emails. Mindkét listába szóközzel elválasztva tehetünk további értékeket.

#!/bin/bash

declare -a sites=('http://cs.bme.hu/nyau'
declare -a emails=('[email protected]')

function check()
{
      local URL=$1
      local EMAIL=$2

      local fileName="$(echo ${URL} | md5sum | head -c -4)"
      local workingDirectory=$(dirname $0)

      cd $workingDirectory
       

      if [ $(curl -k -L -s --head --write-out "%{http_code}" -o /dev/null ${URL}) == "200" ]; then
            curl ${URL} -k -L -s | md5sum -c --quiet ${fileName} 2>/dev/null 1>/dev/null
            if [ $? != 0 ]; then
                  curl ${URL} -k -L -s | md5sum > ${fileName}
                  echo "A ${URL} tartalma megvaltozott!" | mailx -s 'Tartalom valtozas!' ${EMAIL}
            fi
      fi
}

total=${#sites[*]}
for (( i=0; i<=$(( $total -1 )); i++ ))
do
      check "${sites[$i]}" "${emails[$i]}">
done