diff --git a/SOAP/WosClose.sh b/SOAP/WosClose.sh index 35e7afc..ba860a3 100755 --- a/SOAP/WosClose.sh +++ b/SOAP/WosClose.sh @@ -4,12 +4,12 @@ # Initialisation des variables pour les options programme=$(basename $0) substitut=$(echo $programme | sed 's/./ /g') -version='1.2.2' -modif='14/03/2022' +version='1.3.1' +modif='25/07/2022' function usage { -echo "Usage : $programme -s sid [ -c cookies ] " +echo "Usage : $programme -s sid [ -j cookie_jar ] " echo " $programme -h " } @@ -19,14 +19,14 @@ Usage ===== - $programme -s sid [ -c cookies.txt ] + $programme -s sid [ -j cookie_jar ] $programme -h Options ======= - -c indique le nom du fichier qui recevra les cookies (“cookies.txt” - par défaut) -h affiche cette aide + -j indique le nom du fichier qui recevra les cookies (“cookies.txt” + par défaut) -s indique le jeton d’authentification “SID” obtenu avec le programme d’authentification à l'API WoS @@ -47,11 +47,11 @@ declare -a liste # Options -while getopts c:hn:o:q:r:s: i +while getopts hj:s: i do case $i in - c) cookie=$OPTARG;; h) aide;; + j) cookiejar=$OPTARG;; s) sid=$OPTARG;; \?) echo >&2 usage >&2 @@ -69,9 +69,9 @@ exit 2 fi -if [[ -z $cookie ]] +if [[ -z $cookiejar ]] then - cookie='cookies.txt' + cookiejar='cookies.txt' fi # Vérification de la présence des programmes @@ -105,7 +105,7 @@ EOT -curl -X POST -d @close$$.xml -b $cookie -c $cookie -v 'http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl' \ +curl -X POST -d @close$$.xml -b $cookiejar -c $cookiejar -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|(.+?)|;' $out) diff --git a/SOAP/WosConnect.sh b/SOAP/WosConnect.sh index 9c55415..fac1de6 100755 --- a/SOAP/WosConnect.sh +++ b/SOAP/WosConnect.sh @@ -3,12 +3,12 @@ # Initialisation des variables pour les options programme=$(basename $0) -version='1.1.3' -modif='14/03/2022' +version='1.2.1' +modif='25/07/2022' function usage { -echo "Usage : $programme -u utilisateur [ -c fichier_cookies ]" +echo "Usage : $programme -u utilisateur [ -j cookie_jar ]" echo " $programme -h " } @@ -18,14 +18,14 @@ Usage ===== - $programme -u utilisateur [ -c cookies.txt ] + $programme -u utilisateur [ -j cookie_jar ] $programme -h Options ======= - -c indique le nom du fichier qui recevra les cookies (“cookies.txt” - par défaut) -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 @@ -43,11 +43,11 @@ } # Options -while getopts c:hu: i +while getopts hj:u: i do case $i in - c) cookie=$OPTARG;; h) aide;; + j) cookiejar=$OPTARG;; u) user=$OPTARG;; \?) echo >&2 usage >&2 @@ -65,9 +65,9 @@ exit 1 fi -if [[ -z $cookie ]] +if [[ -z $cookiejar ]] then - cookie='cookies.txt' + cookiejar='cookies.txt' fi # Vérification de la présence des programmes @@ -112,7 +112,7 @@ EOT -curl -X POST -d @connect$$.xml -c $cookie -v http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate \ +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|(\w+)|;' $out) diff --git a/SOAP/WosQuery.sh b/SOAP/WosQuery.sh index a09d0dd..9e5326e 100755 --- a/SOAP/WosQuery.sh +++ b/SOAP/WosQuery.sh @@ -4,13 +4,13 @@ # Initialisation des variables pour les options programme=$(basename $0) substitut=$(echo $programme | sed 's/./ /g') -version='1.2.4' -modif='22/07/2022' +version='1.2.5' +modif='25/07/2022' function usage { echo "Usage : $programme -s sid -q requête [ -p (début:fin|[124]week) ] " -echo " $substitut [ -b [WOS:]base ]* [ -f champs ]* [ -t CH:(A|D)[,CH:(A|D)]* ] " +echo " $substitut [ -b [WOS:]base ]* [ -f champs ]* [ -t CH:(A|D) ] " echo " $substitut [ -n notices ] [ -j cookie_jar ] [ -i ]" echo " $programme -h " } @@ -23,7 +23,7 @@ ===== $programme -s sid -q requête [ -p (début:fin|[124]week) ] $substitut [ -b [WOS:]base ]* [ -f champs ]* [ -t CH:[AD] ] - $substitut [ -n notices ] [ -c cookies.txt ] [ -i ] + $substitut [ -n notices ] [ -j cookie_jar ] [ -i ] $programme -h Options principales @@ -47,6 +47,7 @@ -i ajoute dans la réponse de l’API la liste des identifiants WoS des notices retournées (5 par défaut ou valeur de l’option “-n”) -j indique le nom du fichier qui recevra les cookies (“cookies.txt” + paar défaut) -n indique le nombre de notices, entre 1 et 100, à retourner (5 par défaut) -t trie les résultats sur un champ (nom abrégé à 2 majuscules) de @@ -69,7 +70,7 @@ # Déclaration explicite des tableaux “bases”, “champs” et “tri” declare -a bases declare -a champs -declare -a tri +#declare -a tri # Pour l’instant, on met un seul argument # Options while getopts b:f:hij:n:p:q:r:s:t: i @@ -84,7 +85,8 @@ p) span=$OPTARG;; q) query=$OPTARG;; s) sid=$OPTARG;; - t) tri+=($OPTARG);; +# t) tri+=($OPTARG);; + t) tri=$OPTARG;; \?) echo >&2 usage >&2 exit 1;; diff --git a/SOAP/WosRetrieve.sh b/SOAP/WosRetrieve.sh index 97ce337..bb25168 100755 --- a/SOAP/WosRetrieve.sh +++ b/SOAP/WosRetrieve.sh @@ -4,13 +4,14 @@ # Initialisation des variables pour les options programme=$(basename $0) substitut=$(echo $programme | sed 's/./ /g') -version='1.3.6' -modif='14/03/2022' +version='1.5.1' +modif='25/07/2022' function usage { echo "Usage : $programme -s sid -q queryId -n nb_notices -r résultat " -echo " $substitut [ -o offset ] [ -t taille ] [ -c cookies ] " +echo " $substitut [ -f champs ]* [ -t CH:(A|D) ] [ -i ] " +echo " $substitut [ -o offset ] [ -T taille ] [ -j cookie_jar ] " echo " $programme -h " } @@ -21,14 +22,19 @@ Usage ===== $programme -s sid -q queryId -n nb_notices -r résultat - $substitut [ -o offset ] [ -t taille ] [ -c cookies.txt ] + $substitut [ -f champs ]* [ -t CH:(A|D) ] [ -i ] + $substitut [ -o offset ] [ -t taille ] [ -j cookie_jar ] $programme -h Options ======= - -c indique le nom du fichier qui recevra les cookies (“cookies.txt” - par défaut) + -f limite les champs présents dans les notices téléchargées. Cette + option est répétitive (par défaut, tous les champs sont présents) -h affiche cette aide + -i ajoute dans la réponse de l’API la liste des identifiants WoS des + notices retournées (5 par défaut ou valeur de l’option “-n”) + -j indique le nom du fichier qui recevra les cookies (“cookies.txt” + par défaut) -n indique le nombre total de notices WoS à télécharger (la valeur maximale est donnée par le programme envoyant la requête à l’API WoS) @@ -41,7 +47,9 @@ le tiret “-” comme argument de l’option) -s indique le jeton d’authentification “SID” obtenu avec le programme d’authentification à l'API WoS - -t indique le nombre de notices à télécharger à chaque itération + -t trie les résultats sur un champ (nom abrégé à 2 majuscules) de + façon croissante (A) ou décroissante (D) ou par pertinence (RS) + -T indique le nombre de notices à télécharger à chaque itération (100 par défaut) N.B. : la variable d‘environnement WOS_DELAY permet de modifier le délai @@ -59,20 +67,32 @@ then rm -f retrieve$$.xml fi +if [[ -f tmpWos$$.xml ]] +then + rm -f tmpWos$$.xml +fi } +# Déclaration explicite des tableaux “champs” et “tri” +declare -a champs +# declare -a tri + # Options -while getopts c:hn:o:q:r:s:t: i +while getopts f:hij:n:o:q:r:s:t:T: i do case $i in - c) cookie=$OPTARG;; + f) champs+=($OPTARG);; h) aide;; + i) recid=1;; + j) cookiejar=$OPTARG;; n) nb=$OPTARG;; o) offset=$OPTARG;; q) qid=$OPTARG;; r) sortie=$OPTARG;; s) sid=$OPTARG;; - t) taille=$OPTARG;; + t) tri=$OPTARG;; +# t) tri+=($OPTARG);; + T) taille=$OPTARG;; \?) echo >&2 usage >&2 exit 1;; @@ -94,9 +114,9 @@ sortie='/dev/fd/1' fi -if [[ -z $cookie ]] +if [[ -z $cookiejar ]] then - cookie='cookies.txt' + cookiejar='cookies.txt' fi if [[ ! $nb =~ ^[1-9][0-9]*$ ]] @@ -113,8 +133,7 @@ then if [[ $offset -gt $nb ]] then - echo "Erreur : offset supérieur au nombre de notices" >&2 - exit 2 + echo "Attention : offset supérieur au nombre de notices" >&2 fi else echo "Erreur : l’offset (option “-o”) doit être un entier positif non nul" >&2 @@ -147,7 +166,7 @@ trap nettoie HUP INT QUIT TERM # Définition des fichiers de sortie -out='WosApiOut.txt' +out='WosApiOut.xml' err='WosApiErr.txt' # fonction “cherche” @@ -164,18 +183,121 @@ $1 $2 +EOT + +# Cas de l'option “-t” +# Valeurs possibles : AU, CF, CG, CW, CV, LC, LD, PG, PY, RS, SO, TC et VL +if [[ -n $tri ]] +then + if [[ ! $tri =~ ^(AU|CF|CG|CW|CV|LC|LD|PG|PY|SO|VL):[AD]$ && ! $tri =~ ^(RS|TC):D$ ]] + then + echo "Erreur : argument incorrect pour pour l’option “-t”" >&2 + exit 4 + fi + nom=${tri%%:*} + sens=${tri#*:} + echo " " >> retrieve$$.xml + echo " $nom" >> retrieve$$.xml + echo " $sens" >> retrieve$$.xml + echo " " >> retrieve$$.xml +fi + +# Cas de l’option “-f” +# Valeurs possibles : UID, pub_info, names, full_name, titles, contributor, +# language, doctypes, conf_title, conf_date, conf_host, conf_locations, sponsors, +# keywords, keywords_plus, abstract, addresses, organizations, reprint_contact, +# email_addr, grant, fund_text, refs, address_spec, headings, subjects, identifiers, +# page, book_chapters et ids +if [[ ${#champs[@]} -gt 0 ]] +then + ns='Fields' + echo " " >> retrieve$$.xml + echo " WOS" >> retrieve$$.xml + for item in ${champs[@]} + do + while [[ -n $item ]] + do + deb=${item%%,*} + fin=${item#*,} + echo " $deb" >> retrieve$$.xml + if [[ $deb = $fin ]] + then + item="" + else + item=$fin + fi + done + done + echo " " >> retrieve$$.xml +else + ns='FullRecord' +fi + +# Cas de l’option “-i” +if [[ $recid -gt 0 ]] +then + echo " " >> search$$.xml +fi + +cat << EOT >> retrieve$$.xml + EOT -curl -X POST -d @retrieve$$.xml -b $cookie -c $cookie -v 'http://search.webofknowledge.com/esti/wokmws/ws/WokSearch?wsdl' \ +curl -X POST -d @retrieve$$.xml -b $cookiejar -c $cookiejar -v 'http://search.webofknowledge.com/esti/wokmws/ws/WokSearch?wsdl' \ -H "Cookie: SID=$sid" 2> $err | xmllint -format - > $out 2>> $err return $? } +# fonction verifie +function verifie +{ +perl -ne 'if (/]*>(.+)/) { + $r = $1; + $r =~ s|.*||; + $r =~ s/<//go; + $r =~ s/&(\w+;)/&$1/go; + $r =~ s||\n|go; + $r =~ s| tmpWos$$.xml + +nr=$(cat tmpWos$$.xml | wc -l) + +(echo "" ; cat tmpWos$$.xml; echo "") | + xmllint -format - > /dev/null 2>> $err +rc=$? + +rm -f tmpWos$$.xml + +if [[ $rc -gt 0 ]] +then + echo "" + echo "Erreur : la réponse de l‘API est incorrecte [code xmllint = $rc]" >&2 + echo " $nr / $2 notices déchargées" + nettoie + exit 4 +elif [[ $nr -lt $2 ]] +then + echo "" + echo "Erreur : la réponse de l‘API est incomplète " >&2 + echo " $nr / $2 notices déchargées" + nettoie + exit 4 +fi +} + # Itération max=${taille:-100} delai=${WOS_DELAY:-1} @@ -208,16 +330,22 @@ SECONDS=0 rc=$(cherche "$offset" "$max") + rs=$(perl -e 'print [(stat($ARGV[0]))]->[7]' $out) + + printf " \r" >&2 if [[ $rc -gt 0 ]] then echo "" echo "Erreur : la réponse de l‘API est incorrecte [code xmllint = $rc]" >&2 echo "" + nettoie exit 4 fi - - printf " \r" >&2 + if [[ $rs -gt 12000000 ]] + then + verifie "$out" "$max" + fi rc=$(grep -c '' $out 2> /dev/null) if [[ $rc -gt 0 ]] diff --git a/SOAP/WosSearchByDoi.sh b/SOAP/WosSearchByDoi.sh index 1e3d0ef..cb9dee3 100755 --- a/SOAP/WosSearchByDoi.sh +++ b/SOAP/WosSearchByDoi.sh @@ -4,8 +4,8 @@ # Initialisation des variables pour les options programme=$(basename $0) substitut=$(echo $programme | sed 's/./ /g') -version='1.6.1' -modif='21/07/2022' +version='1.6.2' +modif='25/07/2022' function usage { @@ -20,8 +20,8 @@ Usage ===== - $programme -s sid -d (fichier|-) -r (résultats|-) - $substitut [ -f champs ]* [ -T taille ] [ -c cookies ] [ -i ] + $programme -s sid -d (fichier|-) -r (résultats|-) [ -f champs ]* + $substitut [ -T taille ] [ -j cookie_jar ] [ -i ] $programme -h Options principales @@ -240,7 +240,7 @@ echo " WOS" >> search$$.xml for i in "${xml3[@]}" do - echo "$i" >> search$$.xml + echo " $i" >> search$$.xml done echo " " >> search$$.xml fi