【问题标题】:Most suitable python library for Github API v3 [closed]最适合 Github API v3 的 python 库 [关闭]
【发布时间】:2012-05-24 09:47:57
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

  • 这可能值得询问一些 github 团队。
  • fwiw,我最终使用了 PyGithub。它运行良好,作者非常乐于接受反馈和错误报告。 :-)
  • 我在 GitHub 上按星号对所有备选方案进行了排序,将结果与此答案进行了比较,并选择了 PyGithub。支持 Python 3,似乎有据可查...我没有时间尝试所有这些,也没有其他方法可以做出决定。

标签: python api github


【解决方案1】:

既然你提到你是一个初学者的 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 library。在您的代码中,您自然也需要处理错误情况。

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

【讨论】:

  • +1 用于提及requests,这是我以前从未遇到过的。看起来很漂亮。
  • 顺便说一句,这应该是r.content,而不是r.text('响应'对象没有属性'文本')
  • 如果响应是 JSON,@Christoph r.text 应该可以工作。 r.content 直接返回字节而不解码它们。 requests 库似乎在内部使用(r.text or r.content) 短语,也许你也应该这样做。我不确定您为什么看不到 text 属性。
  • 好吧,我不知道发生了什么,但我将您的原始示例按原样放入 ipython 中(纠正错位缩进除外),并得到了 AttributeError: 'Response' object has no attribute 'text'
  • 如果我在编辑后说json.loads(r.content or r.text),顺便说一句。
【解决方案2】:

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

(改编自我对原始问题的编辑,以提高可见性)

【讨论】:

    【解决方案3】:

    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)
    

    【讨论】:

    • 是吗?我已经很久没有使用它了,但是它仍然得到维护——也许打开一个issue 关于这个?顺便说一句,PyGithub 是成功维护移交的少数例子之一,原始创建者没有时间了,asked for volunteers。
    • 感谢这个例子,我不明白有人怎么能花几个月的时间来开发他们的项目,也懒得写几段描述如何使用它。
    • 我发现pygithub.readthedocs.io/en/latest 的文档非常适合我需要做的事情。对于最新功能,文档可能没有得到很好的维护,并且可能没有包含我想要的所有示例(Google 负责其余部分),但对我来说还可以。
    • PyGithub 也不支持设置自定义标头,例如内容呈现的“接受”,因此您不能告诉 GH 将 Markdown 呈现为 HTML 并显示它。艰难地学会了。
    猜你喜欢
    • 1970-01-01
    • 2012-09-03
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2014-08-11
    相关资源
    最近更新 更多