diff --git a/bash/istex-api-harvester.sh b/bash/istex-api-harvester.sh new file mode 100755 index 0000000..44b1436 --- /dev/null +++ b/bash/istex-api-harvester.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# +# Exemple de script shell d'extraction de documents (métadonnées + plein texte) +# +# Prérequis : +# apt-get install jq +# apt-get install curl +# apt-get install wcalc +# + +PAGE_SIZE=12 +ISTEX_QUERY="hypertext" +ISTEX_URI="http://api.istex.fr/document/?q=$ISTEX_QUERY&size=$PAGE_SIZE" + +# Librairie JQ pour manipuler le JSON +JQ="jq -c -M -r" + +# Récupération de la première page pour connaître le nombre de documents +# et en déduire le nombre de page de résultats à télécharger +FIRST_PAGE=$(curl -s $ISTEX_URI) +TOTAL_DOC=$(echo $FIRST_PAGE | $JQ '.total') +TOTAL_PAGE=$(wcalc -q "ceil($TOTAL_DOC/$PAGE_SIZE) - 1") + +echo "--> Téléchargement de $TOTAL_DOC documents" + +# On récupère les pages de resultats une par une +for PAGE_N in $(seq 0 $TOTAL_PAGE) +do + + echo "--> Téléchargement de la page $PAGE_N/$TOTAL_PAGE" + FROM=$(wcalc -q "$PAGE_N.0 * $PAGE_SIZE") + URL="http://api.istex.fr/document/?q=hypertext&size=$PAGE_SIZE&from=$FROM&output=fulltext,metadata" + PAGE=$(curl -s $URL) + NB_HITS=$(echo $PAGE | $JQ ".hits | length") + + # On récupère les différents documents (hits) de la page + for DOC_IDX in $(seq 1 $NB_HITS) + do + DOC_IDX=$(wcalc -q "$DOC_IDX - 1") + DOC=$(echo $PAGE | $JQ ".hits[$DOC_IDX]") + DOC_ISTEXID=$(echo $DOC | $JQ ".id") + DOC_FULLTEXT=$(echo $DOC | $JQ ".fulltext") + DOC_METADATA=$(echo $DOC | $JQ ".metadata") + DOC_NB_METADATA=$(echo $DOC_METADATA | $JQ ". | length") + DOC_NB_FULLTEXT=$(echo $DOC_FULLTEXT | $JQ ". | length") + + # On récupère le document dont l'istexid a été extrait + echo "--> Téléchargement du document $DOC_ISTEXID (nb meta = $DOC_NB_METADATA ; nb ft = $DOC_NB_FULLTEXT)" + + # On télécharge les métadonnées du document + for DOC_META_IDX in $(seq 1 $DOC_NB_METADATA) + do + DOC_META_IDX=$(wcalc -q "$DOC_META_IDX - 1") + URI=$(echo $DOC_METADATA | $JQ ".[$DOC_META_IDX].uri") + FILETYPE=$(echo $DOC_METADATA | $JQ ".[$DOC_META_IDX].type") + FILENAME="$DOC_ISTEXID.$FILETYPE" + curl -s $URI > $FILENAME + echo "--> Métadonnées téléchargé : $FILENAME" + done + + # On télécharge les plein textes du document + for DOC_FT_IDX in $(seq 1 $DOC_NB_FULLTEXT) + do + DOC_FT_IDX=$(wcalc -q "$DOC_FT_IDX - 1") + URI=$(echo $DOC_FULLTEXT | $JQ ".[$DOC_FT_IDX].uri") + FILETYPE=$(echo $DOC_FULLTEXT | $JQ ".[$DOC_FT_IDX].type") + FILENAME="$DOC_ISTEXID.$FILETYPE" + curl -s $URI > $FILENAME + echo "--> Plein texte téléchargé : $FILENAME" + done + + done +done \ No newline at end of file