#!/bin/bash # Initialisation des variables pour les options programme=$(basename $0) version='1.2.1' modif='25/07/2022' function usage { echo "Usage : $programme -u utilisateur [ -j cookie_jar ]" echo " $programme -h " } function aide { cat << EOT Usage ===== $programme -u utilisateur [ -j cookie_jar ] $programme -h Options ======= -h affiche cette aide -j indique le nom du fichier qui recevra les cookies (“cookies.txt” par défaut) -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 hj:u: i do case $i in h) aide;; j) cookiejar=$OPTARG;; 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 $cookiejar ]] then cookiejar='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 $cookiejar -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 "Ouverture de sesion 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