计算GitHub上的开放请求和问题

时间:2016-11-10 18:23:41

标签: github github-api

我喜欢借助GitHub API计算存储库中的所有打开请求和问题。我发现API端点<!doctype html> <html> <head> <meta charset="utf-8"> <style type="text/css"> .ModalWrapper { width: 100%; height: 100%; position: fixed; text-align: center; } .ModalPopup { background: #ffffff; border-radius: 5px; display: inline-block; border: solid thin #19b4b5; } .ModalTop { text-align: center !important; width: 100%; height: 30%; min-height: 30%; padding-top: 5%; padding-bottom: 5%; top: 0px; left: 0px; background-color: #19b4b5; } .ModalContent { display: inline-block; margin: 10px; } </style> </head> <body> <div id="fb-root"></div> <script language="javascript" type="text/javascript"> (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/de_DE/sdk.js#xfbml=1&version=v2.8"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); </script> <div class="ModalWrapper"> <div class="ModalPopup"> <div class="ModalTop">Your Post</div> <div class="ModalContent"> <div class="fb-post" data-href="https://www.facebook.com/20531316728/posts/10154009990506729/" data-show-text="true"> <blockquote cite="https://www.facebook.com/20531316728/posts/10154009990506729/" class="fb-xfbml-parse-ignore"></blockquote> </div> </div> </div> </div> </body> </html> 结果包含/repos/:owner/:repo属性。然而,这是问题数量和拉取请求的总和。

有没有办法获取或计算未结问题的数量并在存储库中提取请求?

4 个答案:

答案 0 :(得分:1)

osowskit是正确的,最简单的方法是迭代问题列表和存储库中的拉取请求列表(我假设你想为每个问题获得单独的计数,在你的问题)。

问题API将返回问题和拉取请求,因此您需要计算两者并从问题数量中减去拉取请求的数量,以获得不是拉取请求的问题计数。例如,使用精彩的github3.py Python库:

import github3

gh = github3.login(token='your_api_token')

issues_count = len(list(gh.repository('owner', 'repo').issues()))
pulls_count = len(list(gh.repository('owner', 'repo').pull_requests()))

print('{} issues, {} pull requests'.format(issues_count - pulls_count, pulls_count))

答案 1 :(得分:1)

(比接受的答案更有效的方法)是使用搜索API。 要获取您可以致电的未解决问题的数量(用您的组织和仓库来代替):

https://api.github.com/search/issues?q=repo:realm/realm-java%20is:issue%20is:open&per_page=1

并获取PR的数量:

https://api.github.com/search/issues?q=repo:realm/realm-java%20is:pr%20is:open&per_page=1

如果您同时希望获得未解决和已解决的问题/公关,当然可以删除is:open

两者都将返回结果“ total_count”。请注意,我添加了per_page=1,实际上并未检索到所有问题。

答案 2 :(得分:0)

您不需要遍历所有拉取请求。 GitHub API返回页面,在链接标题中,您可以访问第一页,上一页,下一页和最后一页。您可以使用它来实现更有效的算法:

1)获取第一页并指定页面大小为1 2)获取最后一页链接的值(即页数) 3)因此,您将拥有页数,因此PR,并且不必获取所有这些页面。

答案 3 :(得分:0)

使用 Github Graphql API,您现在可以在一个请求中完成此操作:

{
  repository(owner: "mui-org", name: "material-ui") {
    issues(states: OPEN) {
      totalCount
    }
    pullRequests(states: OPEN) {
      totalCount
    }
  }
}

输出:

{
  "data": {
    "repository": {
      "issues": {
        "totalCount": 471
      },
      "pullRequests": {
        "totalCount": 47
      }
    }
  }
}