我想通过github API获取repo上所有pull请求的列表。我已按照http://developer.github.com/v3/pulls/的说明进行操作,但当我查询'/ repos /:owner /:repo / pulls'时,它始终返回的拉取请求数量少于网站上显示的数量。
例如,当我查询torvalds / linux repo时,我得到9个开放拉取请求(网站上有14个)。如果我添加'?state = closed',我会得到一组不同的11个关闭拉请求(网站显示大约20个)。
有没有人知道这种差异出现的地方,以及是否有办法通过API获取回购请求的完整列表?
答案 0 :(得分:9)
您可以通过变量state
获取所有拉取请求(关闭,打开,合并)。
只需在GET查询中设置state=all
,例如this->
https://api.github.com/repos/:owner/:repo/pulls?state=all
有关详细信息:请查看https://developer.github.com/v3/pulls/#list-pull-requests
上的参数表编辑:根据TomášVotruba的评论:
“per_page = 30”的默认值。最大值为per_page = 100。要获得超过100个结果,您需要将其称为多个主题:“& page = 1”,“& page = 2”......
答案 1 :(得分:5)
PyGithub(https://github.com/PyGithub/PyGithub)是一个访问GitHub API v3的Python库,可以让你获得分页资源。
例如,
g = Github(login_or_token=$YOUR_TOKEN, per_page=100)
r = g.get_repo($REPO_NUMBER)
for pull in r.get_pulls('all'):
# You can access pulls
答案 2 :(得分:3)
如果要检索所有拉取请求(提交,注释,问题等),则必须使用分页。 https://developer.github.com/v3/#pagination
GET请求"拉动"只会返回打开拉取请求。
如果您想获取所有拉取请求,您可以将参数状态设置为all,或者使用问题。
额外信息
如果您需要来自Github的其他数据,例如问题,那么您可以识别问题的拉取请求,然后您可以检索每个拉取请求,无论它是关闭还是打开。它还将为您提供更多属性(可合并,合并,merge-commit-sha,提交nr等) 如果问题是拉取请求,那么它将包含该属性。否则,这只是一个问题。
来自API: https://developer.github.com/v3/pulls/#labels-assignees-and-milestones
"每个拉取请求都是一个问题,但不是每个问题都是拉取请求。出于这个原因,在问题API中提供了这两个功能的“共享”操作,如操纵受理人,标签和里程碑。"
编辑我刚发现问题与拉请求的行为类似,因此需要通过将state参数设置为all来检索所有问题
答案 3 :(得分:2)
有一种方法可以获得完整的清单而且你正在这样做。你用什么来与API沟通?我怀疑你可能没有正确地做某事。例如(当前只有13个开放拉取请求)使用我的API包装器(github3.py)我得到了所有的开放拉取请求。如果没有python中的包装器,如何做到这一点的一个例子是:
import requests
r = requests.get('https://api.github.com/repos/torvalds/linux/pulls')
len(r.json()) == 13
我也可以通过自己计算结果({1}}来获得cURL中的结果(含糊地)。
但是,如果您遇到超过25(或30)次拉取请求的存储库,这是一个完全不同的问题,但肯定不是您现在遇到的问题。
答案 4 :(得分:1)
搜索API应该提供帮助:https://help.github.com/enterprise/2.2/user/articles/searching-issues/
q = repo:org / name is:pr ...
答案 5 :(得分:1)
您还可以使用GraphQL API v4来请求所有回购请求。如果您未指定states
字段,则默认情况下它将请求所有拉取请求:
{
repository(name: "material-ui", owner: "mui-org") {
pullRequests(first: 100, orderBy: {field: CREATED_AT, direction: DESC}) {
totalCount
nodes {
title
state
author {
login
}
createdAt
}
}
}
}
答案 6 :(得分:0)
GitHub提供了一个“链接”标头,该标头指定了上一个,下一个和最后一个URL来获取值。例如,“链接标头”响应,
<https://api.github.com/repos/:owner/:repo/pulls?state=all&page=2>; rel="next", <https://api.github.com/repos/:owner/:repo/pulls?state=all&page=15>; rel="last"
rel =“ next” 建议下一组值。
答案 7 :(得分:0)
使用Github的新官方CLI(命令行界面):
gh pr list --repo OWNER/REPO
会产生类似的内容
Showing 2 of 2 pull requests in OWNER/REPO
#62 Doing something that-weird-branch-name
#58 My PR title wasnt-inspired-branch