Newer
Older
istex-api-harvester / bash / harvest-perf.sh
@perrin perrin on 9 Mar 2016 3 KB Commit -- 09/03/2016 @ 10:17:23
#!/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 {}"