#!/bin/sh 

# checkexternal - parcourt toutes les URL internes  un site Web pour
#   construire une liste de rfrences externes, puis contrle chacune
#   d'entre elles pour dcouvrir les adresses mortes ou casses. 
#
# L'option -a force le script  donner la liste de toutes les
# occurrences reconnues, qu'elles soient ou non accessibles: par dfaut
# seuls les liens impossibles  atteindre sont reprsents.

lynx="/usr/local/bin/lynx"      # il faudra peut-tre adapter ceci
listall=0; errors=0             # raccourci: 2 variables sur une ligne!

if [ "$1" = "-a" ] ; then
  listall=1; shift
fi

outfile="$(echo "$1" | cut -d/ -f3).external-errors"

/bin/rm -f $outfile     # on nettoie pour la nouvelle sortie

trap "/bin/rm -f traverse*.errors reject*.dat traverse*.dat" 0 

if [ -z "$1" ] ; then
  echo "Syntaxe: $(basename $0) [-a] URL" >&2
  exit 1
fi

# cre les fichiers de donnes ncessaires
$lynx -traversal $1 > /dev/null;

if [ -s "reject.dat" ] ; then 
  echo -n "J'ai trouv" $(sort -u reject.dat | wc -l) "liens externes "
  echo dans $(grep '^http' traverse.dat | wc -l) pages

  for URL in $(grep '^http:' reject.dat | sort -u)
  do
    if ! $lynx -dump $URL > /dev/null 2>&1 ; then
      echo "chec   : $URL" >> $outfile
      errors="$(( $errors + 1 ))"
    elif [ $listall -eq 1 ] ; then
      echo "Russite: $URL" >> $outfile
    fi
  done

  if [ -s $outfile ] ; then
    cat $outfile
    echo "(Copie de cette sortie sauvegarde dans ${outfile})"
  elif [ $listall -eq 0 -a $errors -eq 0 ] ; then
    echo "Je n'ai trouv aucun problme.";
  fi
else 
  echo -n "Je n'ai trouv aucun lien externe ";
  echo sur $(grep '^http' traverse.dat | wc -l) pages.
fi

exit 0
