GitHub REST API获取仓库全部历史星标者及星标时间数据不全如何解决
解答
你没有遗漏查询参数,该问题是GitHub REST API的固有约束导致的:
GitHub 对所有REST列表类接口的分页返回设置了硬上限,
/repos/{owner}/{repo}/stargazers接口最多仅支持返回前40000条星标记录,无论调整per_page还是其他基础参数都无法突破这个限制。
解决方法
方法1:使用since参数分段拉取(适配现有REST API逻辑)
该接口支持传入since查询参数,参数值为ISO 8601格式的时间戳,调用后会返回该时间点之后产生的星标记录。你可以按照以下步骤操作:
- 按现有逻辑先拉取前40000条记录,记录最后一条返回结果的
starred_at字段值 - 将该时间值作为
since参数拼到请求URL中,发起下一轮拉取 - 重复上述步骤,直到某次请求返回的结果为空,即完成全量拉取
示例请求URL格式:https://api.github.com/repos/tensorflow/tensorflow/stargazers?per_page=100&since=2020-01-01T00:00:00Z
你当前配置的请求头Accept: application/vnd.github.v3.star+json不需要修改,这个头是获取starred_at字段的必要条件,配置正确。
方法2:切换到GitHub GraphQL API
GraphQL API没有40000条的返回上限,你可以直接构造查询批量拉取星标记录,只需要注意控制单页数量不超过100条,同时遵守平台速率限制即可。
注意事项
- 未认证的GitHub API请求每小时仅允许发起60次,拉取全量159k星标需要1590次请求,建议你在请求中携带个人访问令牌(PAT),认证后每小时请求上限会提升到5000次,完全满足拉取需求
- 拉取过程中如果遇到403响应码,检查返回头的
X-RateLimit-Remaining字段确认是否触碰到速率限制,触发后等待X-RateLimit-Reset对应的时间戳之后再继续请求即可
内容的提问来源于stack exchange,提问作者Nyx
相关产品推荐
相关产品推荐

