88

我正在寻找适合我的 Github APIv3 的 python 库。

我找到了GH API docs中提到的一个库(python-github3)。在 ipython 中玩了一两个小时后,我发现探索/使用它真的很不直观。我又看了一些,发现至少有很多人在尝试编写这样的库。更有前途的(一目了然)是PyGithub另一个 python-github3,这显然与第一个不同。

在接下来的几天里连续尝试一个又一个库之前,我想问一下 SO 社区,该库是否有一个公认的、明确的、明显的选择?

我不喜欢第一个库的是(对我而言)获取数据的不直观方式——有些东西是作为属性得到的,有些是作为方法的返回值得到的,返回值是一些复杂的对象,必须被分页和迭代,等等。

在这方面,PyGithub 第一眼看起来更有吸引力——清楚地向下钻取对象层次结构,然后到达包含您想要的属性的属性:

for repo in g.get_user().get_repos(): print repo.name

那么,有什么智慧的明珠可以分享吗?我知道我没有足够的技能来快速判断图书馆的质量,这就是我转向 SO 社区的原因。

编辑:fwiw,我最终使用了PyGithub。它运行良好,作者非常乐于接受反馈和错误报告。:-)

4

3 回答 3

80

既然你提到你是一个初学者 python 程序员,我建议你先尝试在没有任何 Github 库的情况下使用 JSON API。这真的没有那么难,它会在你以后的编程生活中帮助你很多,因为同样的方法可以应用于任何 JSON API。特别是如果尝试图书馆似乎需要几天时间。

我并不是说某些库不容易使用,我只是说从长远来看,直接使用 API 所付出的额外努力可能是值得的。至少它会帮助您理解为什么其中一些库看起来“不直观”(如您所说)。

获取 django 存储库创建时间的简单示例:

import requests
import json
r = requests.get('https://api.github.com/repos/django/django')
if(r.ok):
    repoItem = json.loads(r.text or r.content)
    print "Django repository created: " + repoItem['created_at']

这是使用流行的requests 库。在您的代码中,您自然也需要处理错误情况。

如果您需要通过身份验证进行访问,那将有点复杂。

于 2012-05-16T20:37:14.550 回答
33

最后,我最终使用了PyGithub。它运行良好,作者非常乐于接受反馈和错误报告。:-)

(改编自我对原始问题的编辑,以获得更好的可见性)

于 2014-01-13T10:15:38.623 回答
16

PyGitHub 的文档很糟糕,但产品很棒。这是一个实际检索文件的快速示例,在文件开头使用新注释更改它并将其提交回来

from github import Github
gh = Github(login_or_token='.....', base_url='...../api/v3')
user = gh.get_user()
repo = user.get_repo("RepoName")
file = repo.get_file_contents("/App/forms.py")
decoded_content = "# Test " + "\r\n" + file.decoded_content
repo.update_file("/"RepoName"/forms.py", "Commit Comments", decoded_content, file.sha)
于 2016-08-29T13:07:32.893 回答