From 81509effa25b7da760f3f8001e36d7bd4b108a28 Mon Sep 17 00:00:00 2001
From: Chetouane <elias.chetouane@univ-grenoble-alpes.fr>
Date: Fri, 1 Dec 2023 16:00:31 +0100
Subject: [PATCH] =?UTF-8?q?Script=20pour=20r=C3=A9cup=C3=A9ration=20des=20?=
 =?UTF-8?q?DOIs=20de=20l'UGA=20depuis=20RDG?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 0-collect-data/rdg.py | 118 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 118 insertions(+)
 create mode 100644 0-collect-data/rdg.py

diff --git a/0-collect-data/rdg.py b/0-collect-data/rdg.py
new file mode 100644
index 0000000..fc95b66
--- /dev/null
+++ b/0-collect-data/rdg.py
@@ -0,0 +1,118 @@
+#!/usr/bin/env python
+# coding: utf-8
+
+# In[2]:
+
+
+# Récupérer les DOIs de l'UGA depuis Rechrche Data Gouv
+## 2023-12-01, Elias Chetouane
+
+
+# In[3]:
+
+
+"""
+## todo
+/
+
+## Documentation
+* Noms des champs à requêter : https://entrepot.recherche.data.gouv.fr/api/metadatablocks/citation
+* Doc API Dataverse : https://guides.dataverse.org/en/5.12.1/api/search.html
+
+## Remarques
+- Problème : certaines affiliations renseignent la ville, mais le labo n'est pas affilié à l'UGA. Cela les fait apparaitre alors qu'il ne faudrait pas les prendre en compte...
+- Obligation de cherche Greoble et UGA car champ libre, donc parfois l'affiliation à l'UGA est renseignée par UGA et parfois Univ Greoble Alpes
+- Adapter une fois mise en place du ROR
+"""
+
+
+# In[4]:
+
+
+import requests, json
+
+
+# In[5]:
+
+
+# requetes de base sur chaque champ qui nous intéresse : affiliation du contact, auteurs, producteur et contributeurs
+# dans chaque champ, recherche "UGA" ou "Grenoble"
+urls = [
+    'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=datasetContactAffiliation%3AUGA',
+    'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=authorAffiliation%3AUGA',
+    'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=producerAffiliation%3AUGA',
+    'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=contributorAffiliation%3AUGA',
+    'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=datasetContactAffiliation%3AGrenoble',
+    'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=authorAffiliation%3AGrenoble',
+    'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=producerAffiliation%3AGrenoble',
+    'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=contributorAffiliation%3AGrenoble'
+    # possiblilité d'ajouter d'autres requêtes
+       ]
+
+# on définit une fonction pour la lancer la requete avec chaque url pour les différentes affiliations
+def get_results(url):
+    req = requests.get(url)
+    results = [req.json()]
+    
+    # obtenir les résultats de chaque page dans la liste results
+    nb_res = results[0]["data"]["count_in_response"]
+    count = nb_res
+    page = 1
+    while(nb_res > 0):
+        newurl = url+"&start="+str(count)
+        req = requests.get(newurl)
+        results.append(req.json())
+        nb_res = results[page]["data"]["count_in_response"]
+        count += nb_res
+        page += 1
+    return results
+
+
+# In[6]:
+
+
+# on crée une fonction pour ajouter les DOIs dans une liste
+
+def get_dois(results):
+    dois = []
+    nb_dois = 0
+
+    # prendre en compte les résultats de chaque page
+    for res in results:
+        num_dois = res["data"]["items"]
+        nb_dois += len(num_dois)
+
+        for item in num_dois :
+            dois.append(item["global_id"])
+        
+    print("Nombre de résultats trouvés : " + str(nb_dois))
+    return dois
+
+
+# In[ ]:
+
+
+# on récupère les dois
+
+dois = []
+
+for url in urls:
+    dois += get_dois(get_results(url))
+
+# on supprime les doublons
+
+for i in dois:
+    while(dois.count(i) > 1):
+        dois.remove(i)
+
+print("Nombre de dois différents trouvés : " + str(len(dois)))
+
+
+# In[8]:
+
+
+# exporter la liste de DOI au format txt
+
+with open("rdg-dois.txt", 'w') as f :
+    [f.write(f"{line[4:]}\n") for line in dois] # [4:] pour retirer "doi:" au début de chaque ligne
+
-- 
GitLab