# OpenAlex API 完整指南
## 基础信息
**基础 URL:** `https://api.openalex.org`
**身份验证:** 无需
**速率限制:**
- 默认: 1 次请求/秒,10 万次请求/天
- 礼貌池(带邮箱): 10 次请求/秒,10 万次请求/天
## 关键最佳实践
### ✅ 推荐:使用 `?sample` 参数进行随机抽样
https://api.openalex.org/works?sample=20&seed=123
对于大样本(10k+),请使用多个种子并去重。
### ❌ 避免:使用随机页码进行抽样
错误示例: `?page=5`, `?page=17` - 这会导致结果偏差!
### ✅ 推荐:使用两步查找进行实体过滤
1. 查找实体 ID: /authors?search=einstein
2. 使用 ID: /works?filter=authorships.author.id:A5023888391
### ❌ 避免:直接按实体名称过滤
错误示例: `/works?filter=author_name:Einstein` - 名称具有歧义!
### ✅ 推荐:使用最大页面大小进行批量提取
?per-page=200
这比默认值 (25) 快 8 倍。
### ❌ 避免:使用默认页面大小
默认每页仅 25 条结果。
### ✅ 推荐:使用 OR 过滤器 (管道符 |) 进行批量查找
/works?filter=doi:10.1/abc|10.2/def|10.3/ghi
每个过滤器最多支持 50 个值。
### ❌ 避免:对列表进行顺序 API 调用
当可以批量处理时,进行 100 次单独调用效率极低。
### ✅ 推荐:实现指数退避重试机制
python
for attempt in range(max_retries):
try:
response = requests.get(url)
if response.status_code == 200:
return response.json()
except:
wait_time = 2 ** attempt
time.sleep(wait_time)
### ✅ 推荐:添加邮箱以获得 10 倍速率限制提升
[email protected]
从 1 次请求/秒提升至 10 次请求/秒。
## 实体端点
- `/works` - 2.4 亿+ 学术文档
- `/authors` - 研究人员档案
- `/sources` - 期刊、存储库、会议
- `/institutions` - 大学、研究机构
- `/topics` - 主题分类(3 级层次结构)
- `/publishers` - 出版组织
- `/funders` - 资助机构
- `/text` - 使用主题/关键词标记您自己的文本 (POST)
## 核心查询参数
| 参数 | 描述 | 示例 |
|-----------|-------------|---------|
| `filter=` | 过滤结果 | `?filter=publication_year:2020` |
| `search=` | 全文搜索 | `?search=machine+learning` |
| `sort=` | 排序结果 | `?sort=cited_by_count:desc` |
| `per-page=` | 每页结果数 (最大 200) | `?per-page=200` |
| `page=` | 页码 | `?page=2` |
| `sample=` | 随机抽样 | `?sample=10` |