2012-05-16 33 views
69

Tôi đang tìm thư viện python cho Github APIv3 phù hợp với mình. Bối cảnh: Tôi là một noob python với một nền tảng chủ yếu bắt nguồn từ Matlab và C++, và gần đây đã học cách sử dụng python-matplotlib.Thư viện trăn phù hợp nhất cho Github API v3

Tôi đã tìm thấy một thư viện (python-github3) được đề cập trong GH API docs. Sau khi chơi xung quanh với nó trong ipython trong một hoặc hai giờ, tôi thấy nó thực sự không trực quan để khám phá/làm việc với. Tôi nhìn một số chi tiết, và thấy có khá nhiều người ít nhất cố gắng viết một thư viện như vậy. Cái nhìn đầy hứa hẹn hơn (trong nháy mắt) là PyGithubanother python-github3, có vẻ khác so với cái đầu tiên.

Trước khi tôi dành những ngày tiếp theo thử thư viện sau thư viện, tôi muốn hỏi cộng đồng SO nếu có sự lựa chọn rõ ràng, được chấp nhận, rõ ràng cho thư viện đó?

Điều tôi không thích về thư viện đầu tiên là cách để truy cập dữ liệu - một số thứ bạn nhận được dưới dạng thuộc tính, một số bạn nhận được dưới dạng giá trị trả về của một phương thức. đối tượng phức tạp phải được phân trang và lặp lại thông qua, v.v.

Về vấn đề đó, PyGithub trông hấp dẫn hơn trong nháy mắt đầu tiên - xem chi tiết phân cấp đối tượng và sau đó đến thuộc tính chứa nội dung bạn muốn:

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

Vì vậy, bất kỳ ngọc trai nào o f trí tuệ để chia sẻ? Tôi biết tôi không có đủ kỹ năng để nhanh chóng đánh giá chất lượng thư viện, đó là lý do tại sao tôi chuyển sang cộng đồng SO.

chỉnh sửa: fwiw, tôi đã sử dụng PyGithub. Nó hoạt động tốt và tác giả thực sự tiếp nhận phản hồi và báo cáo lỗi. :-)

+0

Có thể đáng để hỏi một số nhóm github. – Daenyth

+6

fwiw, tôi đã sử dụng PyGithub. Nó hoạt động tốt và tác giả thực sự tiếp nhận phản hồi và báo cáo lỗi. :-) – Christoph

+0

Tôi đã sắp xếp tất cả các lựa chọn thay thế theo sao trên GitHub, so sánh kết quả với câu trả lời này và chọn PyGithub. Hỗ trợ Python 3, có vẻ như nó được tài liệu ... Tôi không có thời gian để thử tất cả và không có cách nào khác để đưa ra quyết định của tôi. – astrojuanlu

Trả lời

18

Cuối cùng, tôi đã sử dụng PyGithub. Nó hoạt động tốt và tác giả thực sự tiếp nhận phản hồi và báo cáo lỗi.:-)

(Phỏng theo chỉnh sửa của tôi cho câu hỏi ban đầu, cho tầm nhìn tốt hơn)

63

Vì bạn đã đề cập bạn là người lập trình python mới bắt đầu, tôi khuyên bạn nên thử sử dụng API JSON mà không có bất kỳ thư viện Github nào trước tiên. Nó thực sự không phải là khó khăn và nó sẽ giúp bạn rất nhiều sau này trong cuộc sống lập trình của bạn vì cách tiếp cận tương tự có thể được áp dụng cho bất kỳ JSON API nào. Đặc biệt nếu có vẻ như việc thử các thư viện sẽ mất nhiều ngày.

Tôi không nói rằng một số thư viện không dễ sử dụng hơn, tôi chỉ nói nỗ lực nhỏ để sử dụng API trực tiếp có thể đáng giá trong thời gian dài. Ít nhất nó sẽ giúp bạn hiểu tại sao một số trong những thư viện đó có vẻ "không trực quan" (như bạn đã nói).

ví dụ đơn giản để lấy thời gian tạo ra các kho 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'] 

này được sử dụng phổ biến requests library. Trong mã của bạn, bạn sẽ tự nhiên cần phải xử lý các trường hợp lỗi quá.

Nếu bạn cần truy cập bằng xác thực, việc này sẽ phức tạp hơn một chút.

+11

+1 để đề cập đến 'yêu cầu', mà trước đó tôi chưa gặp phải. Có vẻ tiện lợi. – larsks

+0

btw, điều này phải là 'r.content', không phải' r.text' (đối tượng 'Phản hồi' không có thuộc tính 'văn bản') – Christoph

+0

@Christoph 'r.text' sẽ hoạt động nếu phản hồi là JSON. 'r.content' trả về các byte trực tiếp mà không cần giải mã chúng. Thư viện yêu cầu dường như sử dụng nội bộ cụm từ '(r.text hoặc r.content)', có lẽ bạn cũng nên làm điều đó. Tôi không chắc tại sao bạn không thể thấy thuộc tính 'text'. – Lycha

9

Tài liệu là khủng khiếp cho PyGitHub, nhưng sản phẩm là rất tốt. Dưới đây là mẫu nhanh để thực sự truy xuất tệp, thay đổi nó bằng một nhận xét mới ở đầu tệp và cam kết trở lại

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

Câu hỏi là 4 tuổi và đã được trả lời nhưng cảm ơn anyway cho mẫu mã của bạn :-) – SaschaM78

+2

Có phải không? Tôi đã không sử dụng nó trong lứa tuổi, nhưng afaik nó vẫn được duy trì - có thể mở một [vấn đề] (https://github.com/PyGithub/PyGithub/issues) về điều này? Btw, PyGithub là một trong số ít ví dụ về việc bảo trì thành công, nơi người sáng tạo ban đầu không có thời gian nữa và [yêu cầu các tình nguyện viên] (https://github.com/PyGithub/PyGithub/issues/297) . – Christoph

+1

Cảm ơn ví dụ này, tôi không hiểu cách một người nào đó có thể dành hàng tháng để phát triển dự án của họ và không cần phải viết vài đoạn mô tả cách sử dụng nó. – serg

Các vấn đề liên quan