如何编程获取GitHub用户完整仓库列表?API返回不全求助
如何用GitHub API拉取用户全部自建仓库
为啥用/users/{username}/repos拿不全仓库?
- 这个接口默认仅返回30条结果,且存在分页限制,不遍历所有页面肯定拿不全
- 如果目标仓库是私有仓库,不带认证token的话根本无法获取
- 默认结果可能包含fork来的仓库,若只想看用户自建的,得加参数过滤
正确操作步骤:
- 处理分页:GitHub API采用分页返回机制,每页最多可设置返回100条(通过
per_page=100参数),需循环请求直到返回空数组。可以通过递增页码,或检查响应头的Link字段判断是否还有下一页。 - 获取私有仓库:
- 拉取自己的仓库:使用
/user/repos接口,同时在请求头中添加带有repo权限的GitHub token(格式为Authorization: token 你的token),就能拿到所有私有+公开的自建仓库 - 拉取他人的仓库:只能获取对方公开的自建仓库,私有仓库除非对方授权,否则无法获取
- 拉取自己的仓库:使用
- 过滤自建仓库:添加
type=owner参数,确保仅返回用户自己创建的仓库,排除fork而来的仓库
Python示例代码:
import requests def fetch_all_owned_repos(username, token=None): all_repos = [] page = 1 per_page = 100 headers = {"Authorization": f"token {token}"} if token else {} while True: # 拉取指定用户的自建仓库,带分页和类型过滤 api_url = f"https://api.github.com/users/{username}/repos?per_page={per_page}&page={page}&type=owner" resp = requests.get(api_url, headers=headers) resp.raise_for_status() # 处理请求错误 current_page_repos = resp.json() if not current_page_repos: break # 没有更多仓库了,退出循环 all_repos.extend(current_page_repos) page += 1 return all_repos # 使用示例 target_user = "your-target-username" github_token = "your-personal-access-token" # 私有仓库需要这个 repos = fetch_all_owned_repos(target_user, github_token) print(f"总共拿到 {len(repos)} 个自建仓库")
注意事项:
- GitHub API有请求限额:未认证请求每小时最多60次,认证后每小时最多5000次,批量拉取时不要过于频繁,必要时可添加小延迟
- 拉取自己的仓库时,使用
/user/repos接口更省心,无需填写自己的用户名,还能确保拿到所有属于自己的仓库
内容的提问来源于stack exchange,提问作者Peter Teoh
相关产品推荐
相关产品推荐

