以编程方式收集GitHub项目问题统计信息?

4
我正在收集我们项目的GitHub问题统计数据:问题总数、特定标签的问题数量、处于特定状态(打开/关闭)的问题数量。目前,我有一个Python脚本来解析包含所需标签/状态的项目网页以获取我想要的信息,例如:
http://github.com/<projectname>/issues?label=<label_of_interest>&state=<state_of_interest>
然而,解析HTML是很脆弱的,因为如果GitHub API发生更改,我的代码往往会失败。
有人可以描述如何使用GitHub API(或者知道其他方法,最好用Python)来收集这些统计数据,而不依赖底层HTML吗?

这个网站可能会有用,它做了类似的事情 http://website.clearpoint.co.nz/gitstats/index.html - user1255162
3个回答

3

我可以建议您在这方面使用我的GitHub API包装器进行翻译吗?使用github3.py,您可以执行以下操作:

import github3

github = github3.login("braymp", "braymp's super secret password")
repo = github.repository("owner", "reponame")
open_issues = [i for i in repo.iter_issues()]
closed_issues = [i for i in repo.iter_issues(state='closed')]

调用refresh可能是必要的,因为我不确定GitHub是否像那样在迭代时发送所有问题信息(例如,将i.refresh() for i in <generator>替换为上面列表理解的主体)。
有了这些,您可以遍历这两个列表,并且您将能够使用每个问题上的labels属性来确定哪些标签在问题上。如果您决定合并这两个列表,则始终可以使用is_closed方法检查问题的状态。
我怀疑实际统计数据您可以自己完成。 :)
github3.py的文档可以在ReadTheDocs上找到,您将特别关注IssueRepository对象。
您还可以通过在StackOverflow问题中添加标签来进一步了解github3.py的相关问题。
干杯!

感谢@sigmavirus24(对于接受您的回复的延迟我很抱歉)。这似乎对我有用。 - braymp

0

0

虽然这不完全符合您的规格(“最好是Python”部分),Octokit 是与 GitHub API 交互的绝佳方式,而且它是官方的(由 GitHub 开发)。您写道您想获取问题数据。只需安装、要求库并获取数据即可(如果项目是公共的,则无需进行身份验证)。

安装:

gem install octokit

将以下代码添加到您的 Ruby 文件中以引用 Octokit 库:
require 'octokit'

尽管你可以从Octokit::Client::Issues获取很多信息,但你也许想要获得一个存储库中所有问题的分页列表:

Octokit.list_issues('octokit/octokit.rb')
  # => [Array<Sawyer::Resource>] A list of issues for a repository.

如果你真的很想使用Python,你可能想看一下GitHub API文档中的Issues。实际上,只需要获取像这样的URL:https://api.github.com/repos/octokit/octokit.rb/issues并获取JSON数据(虽然我不熟悉Python,但我确定有一些JSON解析库);对于公共存储库,无需进行身份验证。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接