#!/usr/bin/env bash # # Shell d'extraction de documents (métadonnées + plein texte) avec mesure # de performance (temps d'execution, mesure du trafic / vitesse réseau) # # # # Prérequis : # apt-get install jq # apt-get install curl # apt-get install wcalc # # ---------------------------------------------------------------------- # Configuration locale # ---------------------------------------------------------------------- URL="$1" if [ -z "$URL" ]; then URL="https://api.istex.fr" fi URLS_FILE="/run/shm/harvest-urls" if [ -f "$URLS_FILE" ]; then rm "$URLS_FILE" fi PAGE_SIZE=10 ISTEX_QUERY="degrowth%20AND%20ecology" ISTEX_URI="$URL/document/?q=$ISTEX_QUERY&size=$PAGE_SIZE" # ---------------------------------------------------------------------- # Outils # ---------------------------------------------------------------------- # Outil JQ permettant de manipuler le JSON en ligne de commande # http://stedolan.github.io/jq/ 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') export TOTAL_OBJDOC="$TOTAL_DOC" 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="$ISTEX_URI&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)" 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].extension") FILENAME="$DOC_ISTEXID.$FILETYPE" echo "curl -s $URI > $FILENAME" >> $URLS_FILE # 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].extension") FILENAME="$DOC_ISTEXID.$FILETYPE" # curl -s $URI > $FILENAME echo "curl -s $URI > $FILENAME" >> $URLS_FILE # echo "--> Plein texte téléchargé : $FILENAME" done done done cat "$URLS_FILE" | parallel --gnu "eval {}"