diff --git a/0-collect-data/datacite.py b/0-collect-data/datacite.py new file mode 100644 index 0000000000000000000000000000000000000000..cb5f3ca1b4a0e208a0b1928350c180006ff7fc5f --- /dev/null +++ b/0-collect-data/datacite.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python +# coding: utf-8 + +# In[1]: + + +# récupérer les DOIs de l'UGA depuis Datacite +## 2023-12-01, Elias Chetouane + + +# In[12]: + + +""" +## todo +- recherche par affiliation contributeurs ? + +## Documentation +* Doc générale API Datacite : https://support.datacite.org/docs/api +* Recherche d'un DOI : https://support.datacite.org/docs/api-sampling +* Pagination : https://support.datacite.org/docs/pagination +""" + + +# In[13]: + + +import requests, json + + +# In[14]: + + +# requête url de base +url = 'https://api.datacite.org/dois?affiliation=true&query=creators.affiliation.affiliationIdentifier:"https://ror.org/02rx3b187"&page[size]=100' + +# obtenir les résultats de la première page +req = requests.get(url) +results = [req.json()] + +# obtenir les résultats de chaque page dans la liste results +nb_pages = results[0]["meta"]["totalPages"] +page = 1 +while(page < nb_pages): + url = (results[page-1]["links"]["next"]) + req = requests.get(url) + results.append(req.json()) + page += 1 + + +# In[15]: + + +# ajouter les DOIs dans une liste, sans ajouter les résultats qui ne sont pas des DOIs + +dois = [] +not_dois = [] +nb_dois = 0 + +# prendre en compte les résultats de chaque page +for res in results: + num_dois = res["data"] + nb_dois += len(num_dois) + + for item in num_dois : + doi = item["id"] + if item.get("type") != "dois": + print("Le résultat " + str(item) + " est de type " + item.get("type") + " : " + doi) + not_dois.append(doi) + else: + dois.append(doi) + +print("Nombre de résultats trouvés : " + str(nb_dois)) + + +# In[43]: + + +# exporter la liste de DOI au format txt + +with open("datacite-dois.txt", 'w') as f : + [f.write(f"{line}\n") for line in dois] +