2012-05-16 50 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