2012-05-16 51 views
69

我正在寻找适合我的Github APIv3的python库。 背景:我是一个基于Matlab和C++的背景的python noob,最近学会了使用python-matplotlib。最适合Github API v3的python库

我在GH API docs中发现了一个库(python-github3)。在ipython中玩了一两个小时后,我发现它真的很不直观。我看了更多,发现有相当多的人至少试图写这样一个图书馆。看起来更有前途的(一目了然)是PyGithubanother python-github3,显然与第一个不同。

在我花了几天的时间连续尝试图书馆之后的图书馆之前,我想问一下SO社区是否有对该图书馆接受的,明确的,明显的选择?

我不喜欢关于第一个库的是(对我)不直观的方式来获取数据 - 一些东西你得到的属性,一些你得到的方法的返回值,返回值是一些,复杂的对象,它具有被寻呼并通过迭代等

在这方面,PyGithub乍看上去更具吸引力 - 通过明确的对象分层结构向下钻取,然后在属性包含到达你想要的东西:

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

所以,任何珍珠o f智慧分享?我知道我没有足够的技能来快速判断图书馆的质量,这就是我转向SO社区的原因。

编辑:fwiw,我结束了使用PyGithub。它运行良好,作者非常愿意接受反馈和错误报告。 :-)

+0

这可能是值得提出一些GitHub的团队的快速样品。 – Daenyth

+6

fwiw,我结束了使用PyGithub。它运行良好,作者非常愿意接受反馈和错误报告。 :-) – Christoph

+0

我在GitHub上按星号排序了所有的选项,并将结果与​​此答案进行了比较,并选择了PyGithub。支持Python 3,似乎有很好的文档记录......我没有时间全部尝试它们,也没有其他方式来做出我的决定。 – astrojuanlu

回答

18

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

(从我的编辑改编原来的问题,为更好的可视性)

63

既然你提到你是初学者的python程序员,我建议你先尝试使用没有任何Github库的JSON API。这真的不是那么困难,它会在编程生涯中帮助你很多,因为同样的方法可以应用于任何JSON API。特别是如果看起来试用图书馆需要花费数天时间。

我并不是说某些库不便于使用,我只是说从长远来看,直接使用API​​的小额外工作可能是值得的。至少它会帮助你理解为什么有些图书馆看起来“不直观”(正如你所说的)。

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 library

简单的例子来获取的Django库的创建时间。在你的代码中,你自然也需要处理错误情况。

如果您需要使用身份验证进行访问,它会稍微复杂一些。

+11

提及'请求',我以前没有遇到+1。看起来很漂亮。 – larsks

+0

btw,这应该是'r.content',而不是'r.text'('Response'对象没有属性'文本') – Christoph

+0

@Christoph'r.text'应该在响应是JSON的情况下工作。 'r.content'直接返回字节而不解码它们。请求库似乎在内部使用'(r.text或r.content)'短语,也许你也应该这样做。我不确定你为什么看不到'text'属性。 – Lycha

9

文档是可怕的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) 
+0

问题是4岁,已被回答,但无论如何感谢您的代码示例:-) – SaschaM78

+2

是吗?我还没有使用过它的年龄,但afaik它仍然保持 - 也许打开一个[问题](https://github.com/PyGithub/PyGithub/issues)这个?顺便说一句,PyGithub是成功维护交付的几个例子之一,原来的创建者没有时间了,并[向志愿者请求](https://github.com/PyGithub/PyGithub/issues/297) 。 – Christoph

+1

感谢这个例子,我不明白某人可以花几个月的时间来开发他们的项目,也不会花费几个段落来描述如何使用它。 – serg