diff --git a/1-enrich-with-datacite/z_personal_functions.py b/1-enrich-with-datacite/z_personal_functions.py index bf19cd4aa0a4b8ec3b5e3e2b7b3ca01ffad75598..86352cf5208c697d38d708463032bd6b13002dde 100644 --- a/1-enrich-with-datacite/z_personal_functions.py +++ b/1-enrich-with-datacite/z_personal_functions.py @@ -1,18 +1,21 @@ import requests, json +# Fonction pour éviter la redondance des données associées à des DOIs différents mais pointant vers les mêmes fichiers : +# Dans Zenodo par exemple, il y a un DOI associé à chaque version d'un dépôt et il faut remonter au DOI "chapeau" +# Si le DOI "chapeau" obtenu ou un "is_identical_to" fait référence à un DOI déjà existant dans le csv, il doit être ignoré. def get_origin_version(doi, history=[], first=True): if first: history=[] # ligne ajoutée pour éviter certains soucis de cache où history n'est pas vide au premier appel de la fonction req = requests.get( f"https://api.datacite.org/dois/{doi}" ) res = req.json() final = [] - result = (doi, history, final) + result = (doi, history, final) # doi est le DOI qui sera ajouté au csv, history retrace les dois et les relations ayant permis les recherches et final enregistre les relations du doi final ajouté au csv try: - related = res["data"]["attributes"]["relatedIdentifiers"] + related = res["data"]["attributes"]["relatedIdentifiers"] # test si des relations existent pour le doi courant except: - pass + pass # si pas de relation, on renvoie le doi courant else: - ignore = False - duplicate = False + ignore = False # ignore correspond à un doi ayant une version "chapeau" qui doit être trouvée. Le doi courant doit donc être ignoré + duplicate = False # duplicate correspond à un doi étant identique à un autre for i in related: final.append(i.get("relationType")) if i.get("relationType") == "IsVersionOf" and i.get("relatedIdentifierType") == "DOI": @@ -21,11 +24,11 @@ def get_origin_version(doi, history=[], first=True): history.append([i.get("relationType"), i.get("relatedIdentifier")]) if i.get("relationType") == "IsIdenticalTo" and i.get("relatedIdentifierType") == "DOI": duplicate = True - elem_to_save_d = i.get("relatedIdentifier") + elem_to_save_d = i.get("relatedIdentifier") # pas de symétrie pour les is_identical_to, donc il suffit de prendre l'autre (pas le doi courant) pour éviter les doublons history.append([i.get("relationType"), i.get("relatedIdentifier")]) if duplicate and not(ignore): - result = (elem_to_save_d, history, final) - if ignore: result = get_origin_version(elem_to_save_i, history, False) + result = (elem_to_save_d, history, final) # si identique mais pas de version chapeau on peut s'arrêter + if ignore: result = get_origin_version(elem_to_save_i, history, False) # si version chapeau, on avance sans regarder les identiques return result def get_md_from_datacite( doi ) :