#!/bin/bash
# Initialisation des variables pour les options
programme=$(basename $0)
substitut=$(echo $programme | sed 's/./ /g')
version='1.2.2'
modif='14/03/2022'
function usage
{
echo "Usage : $programme -s sid [ -c cookies ] "
echo " $programme -h "
}
function aide
{
cat << EOT
Usage
=====
$programme -s sid [ -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
-s indique le jeton d’authentification “SID” obtenu avec le programme
d’authentification à l'API WoS
EOT
exit 0
}
function nettoie
{
if [[ -f close$$.xml ]]
then
rm -f close$$.xml
fi
}
# Déclaration explicite du tableau “liste”
declare -a liste
# Options
while getopts c:hn:o:q:r:s: i
do
case $i in
c) cookie=$OPTARG;;
h) aide;;
s) sid=$OPTARG;;
\?) echo >&2
usage >&2
exit 1;;
esac
done
# Vérification des options
if [[ -z $sid ]]
then
echo "Erreur : option manquante" >&2
echo "" >&2
usage >&2
echo "" >&2
exit 2
fi
if [[ -z $cookie ]]
then
cookie='cookies.txt'
fi
# Vérification de la présence des programmes
# “curl” et “xmllint”
for i in 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
# Définition des fichiers de sortie
out='WosApiOut.txt'
err='WosApiErr.txt'
cat << EOT > close$$.xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:auth="http://auth.cxf.wokmws.thomsonreuters.com">
<soapenv:Header/>
<soapenv:Body>
<auth:closeSession/>
</soapenv:Body>
</soapenv:Envelope>
EOT
curl -X POST -d @close$$.xml -b $cookie -c $cookie -v 'http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl' \
-H "Cookie: SID=$sid" 2> $err | xmllint -format - > $out
msg=$(perl -ne 'print "$1" if m|<faultstring>(.+?)</faultstring>|;' $out)
if [[ -n $msg ]]
then
echo " " >&2
echo "Erreur : $msg ">&2
echo " " >&2
nettoie
exit 3
else
echo " " >&2
echo "Fermeture de session réussie " >&2
echo " " >&2
fi
nettoie
exit 0