Github APIv3に最適なPythonライブラリ[クローズ]


85

自分に適したGithubAPIv3用のPythonライブラリを探しています。

GH APIドキュメントに記載されているライブラリ(python-github3)が1つ見つかりました。ipythonで1〜2時間遊んだ後、探索したり操作したりするのは本当に直感的ではないことがわかりました。もう少し調べてみると、少なくともそのようなライブラリを書き込もうとしている人はかなりいることがわかりました。(一目で)より有望に見えるのは、PyGithub別のpython-github3です。、これは明らかに最初のものとは異なります。

翌日、図書館を次々と試してみる前に、SOコミュニティに、その図書館に受け入れられ、決定的で、明白な選択肢があるかどうかを尋ねたかったのです。

最初のライブラリについて私が気に入らなかったのは、データを取得するための(私にとって)直感的でない方法でした-属性として取得するもの、メソッドの戻り値として取得するもの、その戻り値は複雑なオブジェクトである必要がありますページングされ、繰り返されるなど。

その点で、PyGithubは一見魅力的に見えます。オブジェクト階層を明確にドリルダウンしてから、必要なものを含む属性に到達します。

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

それで、共有する知恵の真珠はありますか?私には図書館の質をすばやく判断するのに十分なスキルがないことを知っています。そのため、私はSOコミュニティに目を向けています。

編集:fwiw、私はPyGithubを使用することになりました。それはうまく機能し、作者はフィードバックやバグレポートを本当に受け入れます。:-)


githubチームに聞いてみる価値があるかもしれません。
Daenyth 2012年

6
fwiw、私はPyGithubを使用することになりました。それはうまく機能し、作者はフィードバックやバグレポートを本当に受け入れます。:-)
クリストフ

GitHubですべての選択肢を星で並べ替え、結果をこの回答と比較して、PyGithubを選択しました。Python 3をサポートしているようですが、十分に文書化されているようです...すべてを試す時間はなく、他に決断を下す方法もありません。
astrojuanlu 2013年

回答:


76

あなたは初心者のPythonプログラマーだと言っていたので、最初にGithubライブラリなしでJSONAPIを使用してみることをお勧めします。それは実際にはそれほど難しいことではなく、同じアプローチを任意の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
requests私が以前に遭遇したことのない、言及するための+1 。気の利いたように見えます。
larsks 2012年

ところで、これはそうr.contentではありませんr.text( 'Response'オブジェクトには属性 'text'がありません)
Christoph

r.text応答がJSONの場合、@ Christophは機能するはずです。r.contentバイトをデコードせずに直接返します。リクエストライブラリは内部的に(r.text or r.content)フレーズを使用しているようですが、おそらくあなたもそうすべきです。なぜtext物件が見えないのかわかりません。
Lycha 2012年

何が起こっているのかわかりませんが、元の例をそのまま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
それは...ですか?私はそれを何年も使用していませんが、それはまだ維持されています-多分これについての問題を開きますか?ところで、PyGithubは、元の作成者がもう時間がなく、ボランティア求めた、メンテナンスの引き渡しが成功した数少ない例の1つです。
クリストフ

2
この例のおかげで、誰かがプロジェクトの開発に何ヶ月も費やすことができる方法がわかりません。また、プロジェクトの使用方法を説明するいくつかの段落をわざわざ書く必要もありません。
serg 2017年

pygithub.readthedocs.io/en/latestのドキュメントは、私が行う必要のあることに対してうまく機能していることがわかりました。ドキュメントは最新の機能について適切に管理されていない可能性があり、必要なすべての例が含まれていない可能性があります(残りはGoogleが処理しました)が、問題なく機能しました。
aschultz

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.