Skip to content
Snippets Groups Projects
datacite.py 1.57 KiB
# récupérer les DOIs de l'UGA depuis Datacite
## 2023-12-01, Elias Chetouane

"""
## 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
"""

import requests, json

# 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

# 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))

# 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]