From cff32d87a53f6d37643605c18a98d4278f3871c9 Mon Sep 17 00:00:00 2001 From: JOUNEAU Thomas <thomas.jouneau@univ-lorraine.fr> Date: Thu, 6 Jan 2022 17:23:26 +0000 Subject: [PATCH] Upload New File --- generate_citation.py | 116 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 generate_citation.py diff --git a/generate_citation.py b/generate_citation.py new file mode 100644 index 0000000..bf19676 --- /dev/null +++ b/generate_citation.py @@ -0,0 +1,116 @@ +# =================================================================================== +# 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") + + +# ----------------------- +# 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 : + print(f"{cit_author}; ",end='') + else: + print(f"{cit_author}, ",end='') + cit_authors_len_test = cit_authors_len_test - 1 + print (f"{cit_year}, ", end='') + print (f"\"{cit_title}\", ",end='') + print (f"{cit_data_repository}, ",end='') + print (f"V{cit_version_number}.{cit_version_minor_number}, ", end='') + print (f"http://dx.doi.org/{cit_doi}", end = '') + if cit_unf !="" : + print (f"UNF: {cit_unf}.") + else : + print (".\n") + + + +# 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 + +with open (filename) as f: + complete_list = json.load(f) + +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'] + + 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) + + + \ No newline at end of file -- GitLab