最适合Github API v3的python库[关闭]


85

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

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

在接下来的几天里继续尝试逐个库之前,我想问一下SO社区是否对该库有一个公认的,明确的,显而易见的选择?

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

在这方面,PyGithub乍一看看起来更具吸引力-清楚地向下钻取对象层次结构,然后到达包含所需内容的属性:

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

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

编辑:首先,我最终使用了PyGithub。它运作良好,作者真的很喜欢反馈和错误报告。:-)


可能值得问一些github团队。
丹妮丝2012年

6
首先,我最终使用了PyGithub。它运作良好,作者真的很喜欢反馈和错误报告。:-)
Christoph

我在GitHub上按星标对所有替代方案进行了排序,将结果与该答案进行比较,然后选择了PyGithub。支持Python 3,似乎有据可查...我没有时间尝试所有这些,也没有其他方法来做我的决定。
astrojuanlu 2013年

Answers:


76

既然您提到您是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']

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

如果您需要通过身份验证进行访问,则会更加复杂。


11
+1提及requests,这是我以前从未遇到过的。看起来很漂亮。
larsk's

顺便说一句,这应该是r.content,而不是r.text(“响应”对象没有属性“文本”)
Christoph

r.text如果响应为JSON,则@Christoph应该可以工作。r.content直接返回字节而不解码它们。请求库似乎在内部使用了(r.text or r.content)短语,也许您也应该这样做。我不确定为什么您看不到该text物业。
Lycha

好吧,我不知道发生了什么,但是我将您的原始示例按原样放入了ipython中(除了纠正错位的压痕外),并得到了AttributeError: 'Response' object has no attribute 'text'
克里斯托夫(Christoph

如果我json.loads(r.content or r.text)在编辑过的内容中说,顺便说一句。
克里斯多夫

31

最后,我最终使用了PyGithub。它运作良好,作者真的很喜欢反馈和错误报告。:-)

(根据我的修改适应了原始问题,以提高可见度)


15

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)

2
是吗?我已经很久没有使用它了,但是afaik仍然保持着它-也许为此打开一个问题?顺便说一句,PyGithub是成功进行维护移交的几个例子之一,最初的创建者已经没有时间了,他们要求志愿者
克里斯多夫(Christoph)

2
感谢这个例子,我不知道有人会花几个月的时间来开发他们的项目,也不会花时间写一些描述如何使用它的段落。
serg

我发现pygithub.readthedocs.io/en/latest上的文档非常适合我需要做的事情。该文档可能无法很好地维护最新功能,并且可能没有包含我想要的所有示例(Google负责其余的工作),但是对我来说还可以。
aschultz '19

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.