Newer
Older
api-wos / WosConnect.sh
@besagni besagni on 21 Feb 2022 2 KB Mise à jour des scripts
#!/bin/bash


# Initialisation des variables pour les options
programme=$(basename $0)
version='1.1.2'
modif='21/02/2022'

function usage
{
echo "Usage : $programme -u utilisateur [ -c fichier_cookies ]"
echo "        $programme -h "
}

function aide
{
cat << EOT

Usage
=====
    $programme -u utilisateur [ -c cookies.txt ] 
    $programme -h

Options
=======
    -c  indique le nom du fichier qui recevra les cookies (“cookies.txt” 
        par défaut)
    -h  affiche cette aide
    -u  indique le nom de l’utilisateur (login). Le mot de passe ne devant 
        pas être en ligne de commande, il sera demandé par le programme

EOT

exit 0
}

function nettoie
{
if [[ -f connect$$.xml ]]
then
    rm -f connect$$.xml
fi
}

# Options
while getopts c:hu: i
    do
    case $i in
        c) cookie=$OPTARG;;
        h) aide;;
        u) user=$OPTARG;;
        \?) echo  >&2
            usage >&2
            exit 1;;
    esac
    done

# Vérifications des options 
if [[ -z $user ]]
then
    echo "" >&2
    echo "Erreur : indiquer le nom de l’utilisateur " >&2
    echo "" >&2
    usage >&2
    exit 1
fi

if [[ -z $cookie ]]
then
    cookie='cookies.txt'
fi

# Vérification de la présence des programmes 
# “base64”, “curl” et “xmllint”
for i in base64 curl xmllint
do
    prog=$(which $i 2> /dev/null)
    if [[ -z $prog ]]
    then
        echo "" >&2
        echo "Erreur : programme “$i” introuvable. Vérifier \$PATH." >&2
        echo "" >&2
        exit 2
    fi
done

# Nettoyage en cas d’arrêt prématuré
trap nettoie HUP INT QUIT TERM

# Initialisation du mot de passe
read -t 60 -s -p "mot de passe : " password
echo
if [ $? -gt 128 ]
then
    echo
    echo "Erreur : temps de réponse (60 s) dépassé " >&2
    exit 3
fi

auth=$(echo -n "$user:$password" | base64 -)
out='WosApiOut.txt'
err='WosApiErr.txt'

# Génération du fichier XML pour la connexion
cat << EOT > connect$$.xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
 xmlns:auth="http://auth.cxf.wokmws.thomsonreuters.com">
  <soapenv:Header/>
  <soapenv:Body>
    <auth:authenticate/>
  </soapenv:Body>
</soapenv:Envelope>
EOT

curl -X POST -d @connect$$.xml -c $cookie -v http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate \
     -H "Authorization: Basic $auth" 2> $err | xmllint -format - > $out

sid=$(perl -ne 'print "$1" if m|<return>(\w+)</return>|;' $out)
if [[ -n $sid ]]
then
    echo " " 
    echo "Connexion réussie : SID = $sid "
    echo " "
else
    msg=$(perl -ne 'print "$1" if m|<faultstring>(.+?)</faultstring>|;' $out)
    if [[ -n $msg ]]
    then
        echo " " 
        echo "Erreur : $msg "
        echo " " 
    else
        echo " " 
        echo "Erreur indéterminée. " 
        echo "Voir fichier “$err”. "
        echo " " 
    fi
fi

nettoie


exit 0