# récupérer les DOIs de l'UGA depuis Datacite ## 2023-12-01, Elias Chetouane """ ## todo - v2 : périmètre UGA : ajouter les ROR des unités, des établissements/laboratoires associés (eg Grenoble INP, sciencepo grenoble) ## 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 ## memo sur les requêtes client_id=inist.OSUG datasets de l'OSUG https://doi.osug.fr/ client_id=JBRU.AAU le laboratoire AAU (architecture) client_id=inist.persyval données issues du Labex Persyval-lab (PIA) """ import requests urls = [ 'https://api.datacite.org/dois?affiliation=true&query=creators.affiliation.affiliationIdentifier:"https://ror.org/02rx3b187"&page[size]=100', 'https://api.datacite.org/dois?affiliation=true&query=contributors.affiliation.affiliationIdentifier:"https://ror.org/02rx3b187"&page[size]=100', "https://api.datacite.org/dois?client_id=inist.OSUG&page[size]=100", "https://api.datacite.org/dois?client_id=JBRU.AAU&page[size]=100", "https://api.datacite.org/dois?client_id=inist.persyval&page[size]=100" # possibilité d'ajouter d'autres requêtes ] # on définit une fonction pour la lancer la requete avec chaque url pour les différentes affiliations et clients def get_results(url): 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 return results # on crée une fonction pour ajouter les DOIs dans une liste, sans ajouter les résultats qui ne sont pas des DOIs def get_dois(results): dois = [] not_dois = [] # prendre en compte les résultats de chaque page for res in results: num_dois = res["data"] 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) return dois, not_dois # récupérer les dois dois = [] not_dois = [] for url in urls: doi, not_doi = get_dois(get_results(url)) dois += doi not_dois += not_doi # supprimer les doublons unique_dois = list(set(dois)) print(f"Nombre de dois différents trouvés\t{len(unique_dois)}") # exporter la liste de DOI au format txt with open("datacite-dois.txt", 'w') as f : [f.write(f"{line}\n") for line in unique_dois]