Newer
Older
istex-enrich-monitoring / Makefile
.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