Newer
Older
li-harvest-hal / README.md
li-harvest-hal
===============

## Présentation ##

Objectif du module :
- Récupérer l'ensemble des notices HAL (France) pour une période de temps donnée.
Ce module a quelques spécificités :
- Un seul docObject factice en entrée, le rôle est d'initialiser les traitements.
- Un seul docObject en sortie également. Ce docObject de sortie a une structure permettant d'enchaîner les traitements avec le module li-carto.


### Fonctionnement ###

Le module effectue les opérations suivantes :

- Récupération en entrée d'un `docObject`, ainsi que d'une callback `cb`.
- Vérifier si un moissonnage avec les mêmes paramètres été déjà effectué.
- Construire le query de recherche dans l’API Hal a partir du fichier query.json.
- Appels à l'API pour l'interrogation/parcours des résultats.
- Vérification des résultats et écriture sur disque des fichiers TEI-HAL.
- Scroller les résultats de l’API Hal si le nombre des résultats est supérieur à 10K.
- Gestion du backpressure durant l’écriture sur disque.
- Gestion des erreurs. (quand l’API ne répond pas par exemple).

### Installation ###

Commande d'Installation :
```bash
npm install
```

### Vérification du fonctionnement ###

Commande d'exécution des tests unitaires :
```bash
npm test
```

## Exemple d'un docObject accepté en entrée ###

```
{
corpusName: "hal",
cartoType: "conditor:pubmed",
corpusResources: "/applis/corhal/loadistex/corpus-resources",
corpusOutput: "/applis/corhal/corpusOutput"
}
```

## Exemple d'un docObject accepté en sortie ###

```
{
corpusName: "hal",
cartoType: "conditor:pubmed",
corpusResources: "/applis/corhal/loadistex/corpus-resources",
corpusOutput: "/applis/corhal/corpusOutput",
corpusRoot: "/data/hal-20211121-to-20211121"
}
```

### Arborescence ###

```
.
├── node_modules
│   └── ...
├── config/
│   ├── conf.json           // Fichier de configuration, du proxy et url de l'api
│   │
│   └── query.json          // Les paramètres de recherche de query
├── lib/
│   └── utils.js            // Des fonctions 'utils' utilisées dans index.js
├── test
│   ├── dataset             // Ensemble des docObjects utilisés pour les tests
│   │   └── ...
│   └── run.js              // Ensemble des tests à effectuer
├── .eslintrc.json          // Configuration pour eslint
├── .gitignore
├── README.md               // Le fichier que vous lisez actuellement
├── index.js                // Script principal contenant la méthode doTheJob
└── package.json            // Fichier contenant les dépendances NPM
```

## Le fichier query.json ###

Le fichier conf/query.json contient l'ensemble des paramètres de recherche à utiliser pour l'interrogation de l'api HAL

```
{
    "fq": [""],         // Liste des filtres a utiliser pour limiter les résultats retournés.
    "fl": "",           // La liste des champs a retourner dans la recherche, séparés par ,
    "q": "",            // La requête.
    "rows": "",         // Le nombre de réponses à retourner.
    "sort": "",         // Pour trier les résultats.
    "cursorMark": "*"   // Curseur utilisé pour parcourir plusieurs milliers de résultats.  
}
```

## Le fichier conf.json ###

Le fichier de configuration 

```
{
    "halApi":"",        // L'adresse url de l'api Hal
    "max_retry":2       // Nombre des retries en cas d'échec lors de l'interrogation de l'api HAL
}
```

### Codes d'erreur ###

| Code              | Signification                                         | Note(s) |
| ----------------- | ------------------------------------------------------| ------- |
| FolderExistError  | Harvest folder already exist.                         |
| FetchError        | API-HAL request error.                                |
| NoResultFound     | No result found to harvest.                           |