3

我正在收集我们项目随时间推移的 GitHub 问题统计信息:问题总数、具有特定标签的问题数、给定状态(打开/关闭)的问题数。现在,我有一个 Python 脚本来解析项目网页,其中包含我想要的信息所需的标签/状态,例如,

http://github.com/ <项目名称>/issues?label=<label_of_interest>&state=<state_of_interest>
但是,解析 HTML 很脆弱,因为如果 GitHub API 发生更改,我的代码通常会失败。

是否有人描述了如何使用 GitHub API(或者除非知道其他方式,最好是在 Python 中)来收集这些统计信息而不依赖于底层 HTML?

4

3 回答 3

2

我可以建议您为此使用我的 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')]

调用 torefresh可能是必要的,因为老实说,我不记得 GitHub 在迭代时是否发送了所有问题信息(例如,替换i.refresh() for i in <generator>为上面列表理解的主体)。

有了这些,您可以遍历两个列表,您将能够使用labels每个问题上的属性来确定问题上的标签。如果您决定合并这两个列表,您可以随时使用该is_closed方法检查问题的状态。

我怀疑你可以自己做的实际统计。:)

github3.py 的文档可以在ReadTheDocs上找到,你会对IssueRepository对象特别感兴趣。

您还可以通过在 StackOverflow 问题中添加标签来询问有关 github3.py 的更多问题。

干杯!

于 2013-07-05T13:47:59.657 回答
0

我会看看 Octokit。它目前不支持 Python,但确实为 GitHub API for Ruby 提供了受支持的接口。

https://github.com/blog/1517-introducing-octokit

于 2013-07-11T17:41:16.933 回答
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 解析库);无需对公共回购进行身份验证。

于 2013-09-09T17:29:44.637 回答