From 7386473119522b6a9f6159982857d624138d7eb0 Mon Sep 17 00:00:00 2001 From: JOUNEAU Thomas <thomas.jouneau@univ-lorraine.fr> Date: Thu, 13 Jan 2022 14:31:16 +0000 Subject: [PATCH] Upload New File --- dorel_export_v_0.1/generate_citation.py | 155 ++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 dorel_export_v_0.1/generate_citation.py diff --git a/dorel_export_v_0.1/generate_citation.py b/dorel_export_v_0.1/generate_citation.py new file mode 100644 index 0000000..0dc1bcd --- /dev/null +++ b/dorel_export_v_0.1/generate_citation.py @@ -0,0 +1,155 @@ +# =================================================================================== +# Génération de citations formatées sur la base d'un export JSON Dataverse +# =================================================================================== + + +print ("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n") +print ("# ===========================================================================#") +print ("# Génération de citations formatées sur la base #") +print ("# d'un export JSON Dataverse #") +print ("# ===========================================================================#") +print ("\n") + +# Génération de citations selon le modèle décrit sur le site de Dataverse : +# https://dataverse.org/best-practices/data-citation + +# !!!!!!!!!! +# TODO +# - proposer différents styles de citations +# - accepter le nom de fichier comme argument en ligne de commande + +# ----------------------- +# Imports et déclarations +# ----------------------- + +import json +import os +from pyDataverse.api import NativeApi, DataAccessApi +from pyDataverse.models import Dataverse + +# ------------------------------------- +# Fonction de génération de la citation +# ------------------------------------- + +def citation_generation(cit_authors,cit_title,cit_year,cit_data_repository,cit_version_number,cit_version_minor_number,cit_doi,cit_unf): + cit_authors_len = len(cit_authors) + cit_authors_len_test = cit_authors_len + for cit_author in cit_authors: + if cit_authors_len_test == cit_authors_len : # le nom du premier auteur est suivi d'un point-virgule, les autres d'une simple virgule + citation = f"{cit_author}; " + else: + citation = f"{cit_author}, " + cit_authors_len_test = cit_authors_len_test - 1 + citation += f"{cit_year}, " + citation += f"\"{cit_title}\", " + citation += f"{cit_data_repository}, " + citation += f"V{cit_version_number}.{cit_version_minor_number}, " + citation += f"http://dx.doi.org/{cit_doi}" + if cit_unf !="" : + citation += f"UNF: {cit_unf}." + else : + citation += ".\n" + return (citation) + + +# ---------------- +# Fichier d'entrée +# ---------------- + +# filename_input = input ("Entrez le nom du fichier à traiter [export_json.json] : ") +# if filename_input =="": +# filename = "export_json.json" +# else: +# filename = filename_input + +filename = "export_json.json" + +with open (filename) as f: + complete_list = json.load(f) + +bibliography_list = [] + +for doi,metadata in complete_list.items(): # + # print (f"\n{doi} : \n") + authors_list=[] + subjects_list=[] + + metadata = metadata[0] # le dictionnaire étant enserré entre des crochets, on prend le premier et unique élément de cette "liste" + # on récupère tout ce qu'on peut au niveau 1 de l'entrée et dans "latestVersion" + dataset_id = metadata["id"] + dataset_identifier = metadata["identifier"] + dataset_persistentUrl = metadata["persistentUrl"] + dataset_publicationDate = metadata["publicationDate"] + dataset_licence = metadata["latestVersion"]["license"] + dataset_publisher = metadata["publisher"] + dataset_publicationDate : metadata["publicationDate"] + dataset_yearofPublication = dataset_publicationDate[0:4] + dataset_versionNumber = metadata["latestVersion"]["versionNumber"] + dataset_versionMinorNumber = metadata ["latestVersion"]["versionMinorNumber"] + if "unf" in metadata["latestVersion"]: + dataset_unf = metadata["latestVersion"]["UNF"] + else: + dataset_unf = "" + + fields = metadata["latestVersion"]["metadataBlocks"]["citation"]["fields"] + for field in fields: # chaque champ est pris l'un après l'autre. field est un dictionnaire + # print (field) + # print (f"{field['typeName']} : {field['value']}") + typeName = field['typeName'] + # title = "" # on définit par avance l'ensemble des champs en leur attribuant une valeur vide + # authors = "" + # datasetContacts = "" + # dsDescriptions = "" + # subjects = "" + # keywords = "" + # languages = "" + # depositors = "" + # dateOfDeposit = "" + if typeName == 'title': + title = field['value'] # champ unique + if typeName == 'author': + authors = field['value'] # liste de dictionnaires donc chaque élément est un auteur + for author in authors: + authorName = author["authorName"]["value"] + authors_list.append(authorName) + if typeName == 'datasetContact': + datasetContacts = field['value'] # champ multiple + if typeName == 'dsDescription': + dsDescriptions = field['value'] # champ multiple + if typeName == 'subject': + subjects = field['value'] # champ multiple + if typeName == 'language': + languages = field['value'] # liste + if typeName == 'depositor': + depositors = field['value'] + if typeName == 'keyword': + keywords = field['value'] + if typeName == 'dateofDeposit': + dateofDeposit = field['value'] + + # Appel de la fonction + + citation_current = citation_generation(cit_authors = authors_list,cit_title=title,cit_year=dataset_yearofPublication,cit_data_repository=dataset_publisher,cit_version_number=dataset_versionNumber,cit_version_minor_number=dataset_versionMinorNumber, cit_doi=doi,cit_unf=dataset_unf) + print (citation_current) + bibliography_list.append(citation_current) + +# Génération de la bibliographie +bibliography = "" +for reference in bibliography_list: + bibliography += (f"{reference}\n") +export_filename_input = input ("Entrez un nom de fichier pour la sortie en format texte (défaut datasets_list.txt) : ") +if export_filename_input == "": + export_filename = "datasets_list.txt" +else: + export_filename = export_filename_input + +with open(export_filename, 'w') as f: + f.write(bibliography) + + + + + + + + \ No newline at end of file -- GitLab