#!/bin/sh
#
# Script récupérant des infos sur le web à partir d'URLs renvoyées par
# google faisant une recherche sur les mots-clef passés en paramètre.
#
# TODO :
# option -n x : récupère les infos sur les x premières pages
# pipe sur navigateur/affichage URL (konqueror, netscape, xterms avec lynx+urls)

# Programmes et url de recherche
#
GREP="grep"
LYNX="lynx"
URLPART1="http://www.google.com/search?q="
URLPART2="&hl=fr&start="
URLPART3="&sa=N"
#URLPART2="&btnG=Recherche+Google&hl=fr&meta="

# Variables d'affichage
#
NBURLS=3
NBLINES=20

# Modes possibles
#
FAUX=0
VRAI=1
HELP=0
PAGES=1
RESUME=2
URLS=3
PAGEN1=4

DEBUG=$FAUX

# Initialisation et lecture des arguments
#
GREPSTRING=""
SEARCHSTR=""
MODE=$PAGES
while [ "$1" != "" ]; do
  case $1 in
    "-d") DEBUG=$VRAI;;
    "-h") MODE=$HELP;;
    "-r") MODE=$RESUME;;
    "-u") MODE=$URLS;;
    "-1") MODE=$PAGEN1;;
    "-l") NBLINES=$2
          shift;;
    "-n") NBURLS=$2
          shift;;
    *)
       if [ "$SEARCHSTR" = "" ]; then
         SEARCHSTR="$1"
         GREPSTRING="$1"
       else
         SEARCHSTR="$SEARCHSTR+$1"
         GREPSTRING="$GREPSTRING\|$1"
       fi;;
  esac
  shift
done

# Finition de l'initialisation et affichage infos
#
if [ $MODE != $HELP ]; then
  echo "Recherche de : $SEARCHSTR"
  STARTURL=0
  SEARCHURL="$URLPART1$SEARCHSTR$URLPART2$STARTURL$URLPART3"
  if [ $DEBUG = $VRAI ]; then
    echo "MODE       = $MODE"
    echo "NBURLS     = $NBURLS"
    echo "NBLINES    = $NBLINES"
    echo "GREPSTRING = $GREPSTRING"
  fi
fi

# Action !
#
if [ $MODE = $PAGES ]; then
  while [ $NBURLS -gt 0 ]; do
    if [ $NBURLS -gt 10 ]; then
      HEADURLS=10
    else
      HEADURLS=$NBURLS
    fi
    for url in `$LYNX -source $SEARCHURL \
     | $GREP '<p><a href=' \
     | $GREP -v Google \
     | sed -e 's,^<p><a href=\([^>]*\)>.*,\1,g' | head -n $HEADURLS`; do 
      echo
      echo "===> URL : $url"
      echo
      if [ $NBLINES -gt 0 ]; then
        $LYNX -dump $url | $GREP -C -w -i "$GREPSTRING" | head -n $NBLINES
      else
        $LYNX -dump $url | $GREP -C -w -i "$GREPSTRING"
      fi
      echo
    done
    NBURLS=`expr $NBURLS - 10`
    STARTURL=`expr $STARTURL + 10`
    SEARCHURL="$URLPART1$SEARCHSTR$URLPART2$STARTURL$URLPART3"
  done
elif [ $MODE = $RESUME ]; then
  while [ $NBURLS -gt 0 ]; do
    $LYNX -source $SEARCHURL \
     | $GREP '<p><a href=' \
     | $GREP -v Google \
     | sed -e 's,^<p><a href=\([^>]*\)>.*<br><font size=-1>\(.*\),\1 :\
\2\
,g' \
     -e 's,<[^>]*>,,g'
    NBURLS=`expr $NBURLS - 10`
    STARTURL=`expr $STARTURL + 10`
    SEARCHURL="$URLPART1$SEARCHSTR$URLPART2$STARTURL$URLPART3"
  done
elif [ $MODE = $URLS ]; then
  while [ $NBURLS -gt 0 ]; do
    if [ $NBURLS -gt 10 ]; then
      echo "URLs `expr $STARTURL + 1` à `expr $STARTURL + 10` :"
      HEADURLS=10
    else
      echo "URLs `expr $STARTURL + 1` à `expr $STARTURL + $NBURLS` :"
      HEADURLS=$NBURLS
    fi
    $LYNX -source $SEARCHURL \
     | $GREP '<p><a href=' \
     | $GREP -v Google \
     | sed -e 's,^<p><a href=\([^>]*\)>.*,\1,g' \
     | head -n $HEADURLS
    NBURLS=`expr $NBURLS - 10`
    STARTURL=`expr $STARTURL + 10`
    SEARCHURL="$URLPART1$SEARCHSTR$URLPART2$STARTURL$URLPART3"
  done
elif [ $MODE = $PAGEN1 ]; then
  url=`$LYNX -source $SEARCHURL \
   | $GREP '<p><a href=' \
   | $GREP -v Google \
   | sed -e 's,^<p><a href=\([^>]*\)>.*,\1,g' \
   | head -n 1`
  echo "Page trouvée : $url"
  echo
  if [ $NBLINES -gt 0 ]; then
    $LYNX -dump $url | head -n $NBLINES
  else
    $LYNX -dump $url
  fi
elif [ $MODE = $HELP ]; then
  echo "wlookfor -- search Internet for keywords"
  echo
  echo "Options :"
  echo " -h   : cette page d'aide"
  echo " -d   : information de débogage"
  echo " -r   : n'affiche que les urls avec leurs résumés"
  echo " -n x : récupère les infos sur les x premières pages"
  echo " -u   : n'affiche que les urls"
  echo " -1   : n'affiche que le contenu de la première page trouvée"
  echo " -l x : affiche les x premières lignes des pages trouvées"
  echo
  echo "Les options -r -u et -1 sont mutuellement exclusives : seule la dernière"
  echo "sera prise en compte."
  echo
  echo "Sans aucune option, les pages trouvées seront utilisées pour faire une"
  echo "recherche des mots-clefs afin de n'afficher que les quelques lignes de"
  echo "contexte les concernant."
  echo "Par défaut le nombre d'urls est de 3, et le nombre de lignes totales"
  echo "affichées est de 20."
fi
