import requests
BASE = "https://api.openalex.org"
MY_INST = "I63966007" # MIT
def api(endpoint, params):
return requests.get(f"{BASE}/{endpoint}", params=params).json()
# Get all co-authoring institutions in one call
collab_data = api("works", {
"filter": f"authorships.institutions.id:{MY_INST},publication_year:2020-2025",
"group_by": "authorships.institutions.id",
"per_page": 100,
})["group_by"]
collabs = {g["key"].split("/")[-1]: g["count"] for g in collab_data}
# Get top 5 topics
topics = api("works", {
"filter": f"authorships.institutions.id:{MY_INST}",
"group_by": "primary_topic.id",
"per_page": 5,
})["group_by"]
for topic in topics:
tid = topic["key"].split("/")[-1]
print(f"\n=== {topic['key_display_name']} ({topic['count']} works) ===")
# Top institutions in this topic
top_insts = api("works", {
"filter": f"primary_topic.id:{tid}",
"group_by": "authorships.institutions.id",
"per_page": 15,
})["group_by"]
# Recent vs. historical for rising star detection
recent = {g["key"].split("/")[-1] for g in api("works", {
"filter": f"primary_topic.id:{tid},publication_year:2023-2025",
"group_by": "authorships.institutions.id",
"per_page": 15,
})["group_by"]}
historical = {g["key"].split("/")[-1] for g in api("works", {
"filter": f"primary_topic.id:{tid},publication_year:2018-2020",
"group_by": "authorships.institutions.id",
"per_page": 15,
})["group_by"]}
rising = recent - historical
for inst in top_insts:
iid = inst["key"].split("/")[-1]
if iid == MY_INST:
continue
coauthored = collabs.get(iid, 0)
tag = " ** RISING **" if iid in rising else ""
print(f" {inst['key_display_name']}: "
f"{inst['count']} topic works, {coauthored} co-authored{tag}")