73 lines
2.8 KiB
Python
73 lines
2.8 KiB
Python
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() |