#!/bin/sh

# searchinfo - Extrait et analyse le trafic issu des moteurs de
#   recherche tel qu'indiqu dans le champ de rfrant d'un journal
#   d'accs au format commun de journaux (Common Log Format)

host="intuitive.com"    #  remplacer par votre domaine
maxmatches=20
count=0
temp="/tmp/$(basename $0).$$"

trap "/bin/rm -f $temp" 0

if [ $# -eq 0 ] ; then
  echo "Syntaxe: $(basename $0) fichier_journal"  >&2 
  exit 1
fi
if [ ! -r "$1" ] ; then
  echo "Erreur: je ne peux ouvrir le fichier $1 pour analyse." >&2
  exit 1
fi

for URL in $(awk '{ if (length($11) > 4) { print $11 } }' "$1" | \
  grep -vE "(/www.$host|/$host)" | grep '?')
do
  searchengine="$(echo $URL | cut -d/ -f3 | rev | cut -d. -f1-2 | rev)"
  args="$(echo $URL | cut -d\? -f2 | tr '&' '\n' | \
     grep -E '(^q=|^sid=|^p=|query=|item=|ask=|name=|topic=)' | \
     sed -e 's/+/ /g' -e 's/%20/ /g' -e 's/"//g' | cut -d= -f2)"

  if [ ! -z "$args" ] ; then
    echo "${searchengine}:      $args" >> $temp
  else
    # Aucun motif reconnu, on montre donc toute la chane GET...
    echo "${searchengine}       $(echo $URL | cut -d\? -f2)" >> $temp
  fi
  count="$(( $count + 1 ))"
done

echo "Informations de rfrant de moteur de recherche extraites de ${1}:"

sort $temp | uniq -c | sort -rn | head -$maxmatches | sed 's/^/  /g'

echo ""
echo Analyse de $count entres de journal sur un total de $(wc -l < "$1").

exit 0
