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