.ONESHELL:
SHELL = /usr/bin/bash
PYTHON_ENV = .istex-enrich-monitoring-env
REQ_FILE = ./script/lodex-export/requirements.txt
# Définir une variable pour le chemin du fichier de mapping
MAPPING_FILE = /tmp/loaded-corpus-mapping.json
# Définir une variable l'emplacement des fichiers JSONL
RECORD_FILES = ./data/records/*.jsonl
include lodex.mk
#
# INSTALLATION
#
# Créer un environnement Python et installer les dépendances
setup:
python3 -m venv $(PYTHON_ENV)
source $(PYTHON_ENV)/bin/activate && pip install -r $(REQ_FILE)
#
# IMPORT
#
# Récupérer les données statistiques depuis l'API Istex
fetch-api-istex:
echo "Récupération des données depuis l'API Istex"
# Récupérer les données de l'instance loaded corpus pour créer un mapping identifiant corpus => ARK
fetch-loaded-corpus:
curl "https://loaded-corpus.data.istex.fr/api/export/jsonallvalue?sortDir=ASC" | make -s mapping-corpus-ark > $(MAPPING_FILE)
#
# TRAITEMENT DES DONNÉES
#
# Nettoyer les clés JSON pour qu'elles soient compatibles avec Lodex (remplacement des '.' par des '-')
lodex-clean-json-keys:
jq 'walk(if type == "object" then with_entries(.key = (.key | gsub("[.]"; "-"))) else . end)' -c
# Créer un dictionnaire {"identifiant corpus": "ARK"} à partir des données loaded-corpus
mapping-corpus-ark:
jq '[.[] | .uri as $$ark | .fields[] | select(.name == "JP7t") | { (.value): $$ark}] | reduce .[] as $$elem ({}; . * $$elem)'
# Fusionner les données loaded corpus avec les données existantes
merge-loaded-corpus-data:
jq -Scs '.[0] as $$mapping | .[1:] | map(.["corpus_ark"] = $$mapping[.corpus]) | .[]'
#
# EXPORT
#
# Exporter toutes les données (Excel et Lodex)
export-all: export-excel export-lodex
# Exporter les données pour Excel (fusionner les fichiers JSONL en un seul tableau JSON)
export-excel:
cat $(RECORD_FILES) | jq -sc '.' > ./excel/data.json
# Exporter les données pour Lodex (compiler les données par corpus ; aligner chaque ressource avec loaded corpus)
export-lodex: fetch-loaded-corpus
source $(PYTHON_ENV)/bin/activate
{ cat $(MAPPING_FILE) ; cat $(RECORD_FILES) | ./script/lodex-export/lodex-export.py; } \
| make -s merge-loaded-corpus-data \
| make -s lodex-clean-json-keys > ./lodex/data.jsonl
#
# Publish
#
# Publier les données sur l'instance Lodex
publish-lodex: lodex-delete-instance-data lodex-import-data lodex-import-template
curl -b /tmp/lodex-cookies.txt "$$LODEX_INSTANCE/api/publish" \
-X POST \
-H "Authorization: Bearer $$(make -s lodex-auth)" \
-H 'Accept: application/json' \
.PHONY: setup fetch-api-istex fetch-loaded-corpus lodex-clean-json-keys \
mapping-corpus-ark merge-loaded-corpus-data export-all \
export-excel export-lodex lodex-auth \
lodex-backup-template lodex-backup-data backup \
lodex-delete-instance-data lodex-import-template lodex-import-data \
publish-lodex