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