2012-05-16 6 views
69

私はGithub APIv3のPythonライブラリを探しています。 背景:私は、主にMatlabとC++に根ざした背景を持つPythonのnoobであり、最近python-matplotlibを使うことを学んだ。Github API v3用の最も適切なPythonライブラリ

GH API docsに記載されている1つのライブラリ(python-github3)が見つかりました。 ipythonで1〜2時間それを使って遊んだ後、私は本当に探検する/直面することが直感的ではないことが分かった。私はもう少し見て、少なくともそのような図書館を書くのを試みるかなりの人がいることが分かった。より見通しの良い(一見して)PyGithubanother python-github3であり、明らかに最初のものとは異なる。

私は次の日をライブラリの後で連続して試してみる前に、その図書館にはっきりとした選択肢があるかどうかSOコミュニティに尋ねたがっていますか?

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

その点において、PyGithubは、一見、より魅力的に見える - 明確にオブジェクト階層をドリルダウンし、その後、あなたが欲しいものを含む属性に到着:

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

したがって、すべての真珠fの知恵を共有するには?私はすぐに図書館の質を判断するのに十分なスキルを持っていないことを知っています。それが私がSOのコミュニティに目を向ける理由です。

編集:fwiw、私は使用を終了しましたPyGithub。それはうまく動作し、著者はフィードバックとバグレポートを本当に受け入れてくれます。 :-)

+0

それをコミットするための迅速なサンプルです。 – Daenyth

+6

fwiw、私はPyGithubを使い終わった。それはうまく動作し、著者はフィードバックとバグレポートを本当に受け入れてくれます。 :-) – Christoph

+0

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

答えて

18

最後に、PyGithubを使用しました。それはうまく動作し、著者はフィードバックとバグレポートを本当に受け入れてくれます。:-)

(見やすくするために、元の質問に私の編集から適応)

63

あなたは初心者の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を使用しています。あなたのコードでは、必然的にエラーの場合も処理する必要があります。

認証でアクセスする必要がある場合は、もう少し複雑になります。

+11

+1は、私が以前に遭遇していなかった '要求'に言及しています。気分がいいよ。 – larsks

+0

btw、これは 'r.text'ではなく' r.content'でなければなりません( 'Response'オブジェクトには 'text'属性がありません)。 – Christoph

+0

@Christoph 'r.text'はレスポンスがJSONの場合に動作します。 'r.content'はバイトを直接デコードせずに返します。リクエストライブラリは '(r.text or r.content)'フレーズを内部的に使用しているようですが、そうするべきでしょう。なぜ 'text'プロパティが見えないのか分かりません。 – Lycha

9

ドキュメントはPyGitHubのために恐ろしいですが、製品は素晴らしいです。ここでは実際に、ファイルを検索し、ファイルの先頭に新しいコメントでそれを変更し、それはgithubのチームのいくつかを尋ねる価値があるかもしれないバック

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

それは?私は年齢でそれを使用していませんが、アフリカではまだ維持されています - 多分これについて[問題](https://github.com/PyGithub/PyGithub/issues)を開きますか? Btw、PyGithubは、元の作成者がもう時間がなく、[ボランティアのために頼んだ](https://github.com/PyGithub/PyGithub/issues/297)の成功したメンテナンスの手渡しの数少ない例の1つです。 。 – Christoph

+1

この例をお寄せいただきありがとうございます。私は誰かが自分のプロジェクトを開発するために何ヶ月も費やすことができないし、それを使用する方法を記述したカップルの段落を書くのも気にしません。 – serg

関連する問題