API JSON

Vous pouvez créer ou mettre à jour un dataset avec un fichier JSON (appelé file.json) avec le script Python 3 suivant :

# Il est nécessaire d'importer keycloak-client: sudo pip3 install keycloak-client
import sys
import ast
import json
import requests
from keycloak import KeycloakOpenID

# Permet de recuperer un token d'identification pour pouvoir pouvoir utiliser les services REST du Catalogue
# Il faut renseigner USER_EMAIL et USER_PASSWORD du compte sur le keycloak AERIS
# (le mot de passe doit être créé si vous avez toujours utilisé la connexion via renater ou orcid)
# adresse de gestion du compte keycloak : https://sso.aeris-data.fr/auth/realms/aeris/account

USER_EMAIL='john.smith@example.com'
USER_PASSWORD='qwerty'

if not sys.argv[1:] or not (sys.argv[1] == "create" or sys.argv[1] == "update"):
    exit("Bad parameter. USAGE: python3 script.py [create/update]")

MODE = sys.argv[1]

#L'URL du service de métadonnées est indiquée sur le site du SEDOO
URL_SERVICE = 'https://api.sedoo.fr/aeris-safire-rest/dataset/json/'+MODE+'/'

def getToken():
    keycloak_openid = KeycloakOpenID(server_url="https://sso.aeris-data.fr/auth/",
                    client_id="aeris-public",
                    realm_name="aeris",
                    verify=True)
    token = keycloak_openid.token(USER_EMAIL, USER_PASSWORD)
    return token

# Permet de creer ou mettre a jour une fiche de métadonnées
# Fait appel a un service REST du catalogue

def getHeader():
    return {'Authorization': 'Bearer ' + getToken()['access_token'], 'Accept': 'application/json'}

def loadData(jsonPath):
    with open(jsonPath, 'r') as myfile:
        data=myfile.read()
    return json.loads(data)
  
def patchMetadata(jsonPath):
    metadata = loadData(jsonPath)
    if MODE == "update":
        response = requests.post(URL_SERVICE + metadata['id'], json=metadata, headers=getHeader())
    else:
        response = requests.post(URL_SERVICE + metadata['campaignId'] + "/" + metadata['id'], json=metadata, headers=getHeader())
    if response.status_code == 200:
        print("OK")
    else:
        print(response.content.decode("utf-8"))
        
if __name__ == '__main__':
    patchMetadata("./file.json")

file.json doit être un JSON valide de dataset, vous pouvez voir un exemple en cliquant sur le bouton « Show JSON » sous chaque dataset :

Rechercher