diff --git a/SOAP/WosQuery.sh b/SOAP/WosQuery.sh
index a3955f1..a09d0dd 100755
--- a/SOAP/WosQuery.sh
+++ b/SOAP/WosQuery.sh
@@ -4,14 +4,14 @@
# Initialisation des variables pour les options
programme=$(basename $0)
substitut=$(echo $programme | sed 's/./ /g')
-version='1.2.3'
-modif='11/03/2022'
+version='1.2.4'
+modif='22/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:[AD] ] "
-echo " $substitut [ -n notices ] [ -c cookies ] [ -i ]"
+echo " $substitut [ -b [WOS:]base ]* [ -f champs ]* [ -t CH:(A|D)[,CH:(A|D)]* ] "
+echo " $substitut [ -n notices ] [ -j cookie_jar ] [ -i ]"
echo " $programme -h "
}
@@ -42,16 +42,15 @@
-b limite la recherche à une ou plusieurs bases (e.g. “WOS:SCI”).
Cette option est répétitive et “WOS:” est facultatif (par défaut,
la recherche se fait sur l’ensemble du WoS)
- -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)
-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”
-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
- façon croissante (A) ou décroissante (D) ou par pertinene (RS)
+ façon croissante (A) ou décroissante (D) ou par pertinence (RS)
forcément décroissante
EOT
@@ -67,24 +66,25 @@
fi
}
-# Déclaration explicite du tableau “bases”
+# Déclaration explicite des tableaux “bases”, “champs” et “tri”
declare -a bases
declare -a champs
+declare -a tri
# Options
-while getopts b:c:f:hin:p:q:r:s:t: i
+while getopts b:f:hij:n:p:q:r:s:t: i
do
case $i in
b) bases+=($OPTARG);;
- c) cookie=$OPTARG;;
f) champs+=($OPTARG);;
h) aide;;
i) recid=1;;
+ j) cookiejar=$OPTARG;;
n) nrec=$OPTARG;;
p) span=$OPTARG;;
q) query=$OPTARG;;
s) sid=$OPTARG;;
- t) tri=$OPTARG;;
+ t) tri+=($OPTARG);;
\?) echo >&2
usage >&2
exit 1;;
@@ -101,9 +101,9 @@
exit 2
fi
-if [[ -z $cookie ]]
+if [[ -z $cookiejar ]]
then
- cookie='cookies.txt'
+ cookiejar='cookies.txt'
fi
if [[ ! $nrec ]]
@@ -283,10 +283,10 @@
EOT
-out='WosApiOut.txt'
+out='WosApiOut.xml'
err='WosApiErr.txt'
-curl -X POST -d @search$$.xml -b $cookie -c $cookie -v 'http://search.webofknowledge.com/esti/wokmws/ws/WokSearch?wsdl' \
+curl -X POST -d @search$$.xml -b $cookiejar -c $cookiejar -v 'http://search.webofknowledge.com/esti/wokmws/ws/WokSearch?wsdl' \
-H "Cookie: SID=$sid" 2> $err | xmllint -format - > $out
qid=$(perl -ne 'print "$1" if m|(.+?)|;' $out)
diff --git a/SOAP/WosSearchByDoi.sh b/SOAP/WosSearchByDoi.sh
index ba7da52..1e3d0ef 100755
--- a/SOAP/WosSearchByDoi.sh
+++ b/SOAP/WosSearchByDoi.sh
@@ -4,14 +4,13 @@
# Initialisation des variables pour les options
programme=$(basename $0)
substitut=$(echo $programme | sed 's/./ /g')
-version='1.3.3'
-modif='21/02/2022'
+version='1.6.1'
+modif='21/07/2022'
function usage
{
-echo "Usage : $programme -s sid -d (fichier|-) -r (résultats|-) "
-echo " $substitut [ -p (début:fin|[124]week) ] [ -b [WOS:]base ]* "
-echo " $substitut [ -f champs ]* [ -c cookies ] [ -i ] "
+echo "Usage : $programme -s sid -d (fichier|-) -r (résultats|-) [ -f champs ]* "
+echo " $substitut [ -T taille ] [ -j cookie_jar ] [ -i ] "
echo " $programme -h "
}
@@ -21,9 +20,8 @@
Usage
=====
- $programme -s sid -d (fichier|-) -r (résultats|-)
- $substitut [ -p (début:fin|[124]week) ] [ -b [WOS:]base ]*
- $substitut [ -f champs ]* [ -c cookies ] [ -i ]
+ $programme -s sid -d (fichier|-) -r (résultats|-)
+ $substitut [ -f champs ]* [ -T taille ] [ -c cookies ] [ -i ]
$programme -h
Options principales
@@ -32,26 +30,25 @@
a un tiret “-” en argument, la liste de DOIs est lue sur l’entrée
standard
-h affiche cette aide
- -p limite la recherche dans la base de données à la période indiquée
- sous forme aaaa-mm-jj:aaaa-mm-jj (e.g., “2000-01-01:2020-07-31”)
- ou sous forme “1week”, “2week” ou “4week”
-r indique le nom du fichier résultat (pour la sortie standard, utiliser
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
+ (100 par défaut)
Autres options
==============
- -b limite la recherche à une ou plusieurs bases (e.g. “WOS:SCI”).
- Cette option est répétitive et “WOS:” est facultatif (par défaut,
- la recherche se fait sur l’ensemble du WoS)
- -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)
-i ajoute dans la réponse de l’API la liste des identifiants WoS des
notices retournées à chaque itération
+ -j indique le nom du fichier qui recevra les cookies (“cookies.txt”
+ par défaut)
+N.B. : la variable d‘environnement WOS_DELAY permet de modifier le délai
+ entre deux itérations (1 seconde par défaut). Sa valeur doit être
+ un entier positif supérieur à 1, par ex. : “export WOS_DELAY=3”
EOT
@@ -64,25 +61,27 @@
then
rm -f search$$.xml
fi
+if [[ -f tmpWos$$.xml ]]
+then
+ rm -f tmpWos$$.xml
+fi
}
# Déclaration explicite du tableau “bases”
-declare -a bases
declare -a champs
# Options
-while getopts b:c:d:f:hip:r:s: i
+while getopts d:f:hij:r:s:T: i
do
case $i in
- b) bases+=($OPTARG);;
- c) cookie=$OPTARG;;
d) dois=$OPTARG;;
f) champs+=($OPTARG);;
h) aide;;
i) recid=1;;
- p) span=$OPTARG;;
+ j) cookiejar=$OPTARG;;
r) sortie=$OPTARG;;
s) sid=$OPTARG;;
+ T) taille=$OPTARG;;
\?) echo >&2
usage >&2
exit 1;;
@@ -109,9 +108,9 @@
sortie='/dev/fd/1'
fi
-if [[ -z $cookie ]]
+if [[ -z $cookiejar ]]
then
- cookie='cookies.txt'
+ cookiejar='cookies.txt'
fi
# Vérification de la présence des programmes
@@ -128,68 +127,7 @@
fi
done
-# Génération d’une liste de bases en XML
-# à partir de l’option “-b”
-# valeurs possibles : SCI, SSCI, AHCI, ISTP, ISSHP, IC, CCR, BSCI, BHCI et ESCI
-declare -a xml1
-
-if [[ ${#bases[@]} -gt 0 ]]
-then
- for i in ${bases[@]}
- do
- if [[ $i =~ ^[A-Z]+:[A-Z]+$ ]]
- then
- coll=${i%:*}
- edit=${i#*:}
- else
- coll='WOS'
- edit=$i
- fi
- xml1+=(" ")
- xml1+=(" $coll")
- xml1+=(" $edit")
- xml1+=(" ")
- done
-fi
-
-# Génération d’une période en XML avec l’option “-p”
-declare -a xml2
-
-if [[ -n $span ]]
-then
- regex="[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])"
- if [[ $span =~ ^$regex:$regex$ ]]
- then
- begin=${span%:*}
- end=${span#*:}
- # Vérification de la validité de chaque date
- for i in $begin $end
- do
- day=$(date -d $i 2> /dev/null)
- if [[ -z $day ]]
- then
- echo ""
- echo "Erreur : date “$i” invalide" >&2
- nettoie
- exit 4
- fi
- done
- xml2+=(" ")
- xml2+=(" $begin")
- xml2+=(" $end")
- xml2+=(" ")
- elif [[ $span =~ ^[124]week$ ]]
- then
- xml2=(" $span")
- else
- echo ""
- echo "Erreur : argument incorrect pour l’option “-p”" >&2
- nettoie
- exit 4
- fi
-fi
-
-# Génération d’une période en XML avec l’option “-f”
+# Génération d’une liste de champs en XML avec 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,
@@ -223,6 +161,45 @@
max=0
total=0
+# 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 trouvées"
+ nettoie
+ exit 6
+elif [[ $nr -lt $2 ]]
+then
+ echo ""
+ echo "Erreur : la réponse de l‘API est incomplète " >&2
+ echo " $nr / $2 notices trouvées"
+ nettoie
+ exit 6
+fi
+}
+
# Fonction de génération du fichier SOAP, d’interrogation
# de l’API et de test de la réponse
function requete
@@ -245,34 +222,16 @@
DO=($1)
EOT
-# 2) cas des bases WoS
-if [[ ${#xml1[@]} -gt 0 ]]
-then
- for i in "${xml1[@]}"
- do
- echo "$i" >> search$$.xml
- done
-fi
-
-# 3) cas de la période
-if [[ ${#xml2[@]} -gt 0 ]]
-then
- for i in "${xml2[@]}"
- do
- echo "$i" >> search$$.xml
- done
-fi
-
-# 4) Nb de notices
+# 2) Nb de notices
cat << EOT >> search$$.xml
en1
- $2
+ 100
EOT
-# 5) liste des champs affichés (option “-f”)
+# 3) liste des champs affichés (option “-f”)
if [[ ${#xml3[@]} -gt 0 ]]
then
@@ -286,7 +245,7 @@
echo " " >> search$$.xml
fi
-# 6) Affichage des identifiants de notices retournées
+# 4) Affichage des identifiants de notices retournées
if [[ $recid -gt 0 ]]
then
echo " " >> search$$.xml
fi
-# 7) fin des paramètres
+# 5) fin des paramètres
cat << EOT >> search$$.xml