code to collect all the descendants for a funder

This commit is contained in:
Miriam Baglioni 2023-02-24 11:33:00 +01:00
parent 08f53b5b12
commit 6d1b0f3bcd
1 changed files with 73 additions and 0 deletions

73
funder_descendants.py Normal file
View File

@ -0,0 +1,73 @@
import json
import requests
funder_roots = ['100000001',
'100010661',
'100011102',
'501100001665',
'501100002341', #AKA
'501100001602', #SFI
'501100000923', #ARC
'501100000038',
'501100000155',
'501100000024',
'501100002848', #CONICYT
'501100003448',
'501100010198',
'501100004564',
'501100003407',
'501100006588',
'501100004488', #HRZZ
'501100006769', #RSF
'501100001711',
'501100004410',
'100004440', # WT
'100014013',
'501100003246',
'100000002',
'501100000925',
'501100002428',
'501100001871',
'501100001942',
'100018693',
'100018231',
'501100016047', #SFRS
'501100018877', #RIF
'501100000046', #NRC
'501100001659', #DFG
'501100000806',#EEA
'501100006364'] # INCA
f = {}
for funder in funder_roots:
data = requests.get(f"https://api.crossref.org/funders/{funder}").json()
descendants = set(data['message']['descendants']).union(set(data['message']['replaces'])).union(set(data['message']['replaced-by']))
print(f"root = {funder} -> {data['message']['name']}")
root = f"10.13039/{data['message']['id']}"
f[root] = [data['message']['name'], data['message']['replaces'], data['message']['replaced-by'], []]
while len(descendants) > 0:
descendant = descendants.pop()
data = requests.get(f"https://api.crossref.org/funders/{descendant}").json()
key = f"10.13039/{data['message']['id']}"
if key in f:
continue
print(f"descendant = {descendant} -> {data['message']['name']}")
f[root][3].append([data['message']['name'], data['message']['id']])
f[key] = [data['message']['name'], data['message']['replaces'], data['message']['replaced-by'],
set(data['message']['descendants']).union(set(data['message']['replaces'])).union(set(data['message']['replaced-by']))]
descendants = descendants.union(set(data['message']['descendants']).union(set(data['message']['replaces'])).union(set(data['message']['replaced-by'])))
fout = open('funders_desc.tsv','w')
fout.write(f"NAME\tDOI\tDESCENDANT NAME\tDESCENDANT DOI\n")
for key in funder_roots:
funder = f[f"10.13039/{key}"]
fout = open(f"{funder[0]}.tsv",'w')
fout.write(f"NAME\tDOI\tDESCENDANT NAME\tDESCENDANT DOI\n")
fout.write(f"{funder[0]}\t10.13039/{key}\t\t\n")
for d in funder[3]:
fout.write(f"\t\t{d[0]}\t10.13039/{d[1]}\n")
fout.close()