Thư viện python phù hợp nhất cho Github API v3 [đã đóng]


85

Tôi đang tìm một thư viện python cho Github APIv3 phù hợp với tôi.

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

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

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

Về mặt đó, PyGithub thoạt nhìn trông hấp dẫn hơn - đi sâu vào phân cấp đối tượng một cách rõ ràng, sau đó đi đến thuộc tính chứa những gì bạn muốn:

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

Vì vậy, bất kỳ viên ngọc trai của sự khôn ngoan để chia sẻ? Tôi biết mình 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 đã kết thúc bằng cách sử dụng PyGithub . Nó hoạt động tốt và tác giả thực sự dễ tiếp thu phản hồi và báo cáo lỗi. :-)


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

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

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 ghi chép đầy đủ ... 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 mình.
astrojuanlu

Câu trả lời:


76

Vì bạn đã đề cập rằng bạn là một lập trình viên 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. Nó thực sự không quá khó 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ì phương pháp tương tự có thể được áp dụng cho bất kỳ API JSON 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 rằng nỗ lực bổ sung nhỏ để sử dụng trực tiếp API có thể đáng giá về lâu dài. Ít nhất nó sẽ giúp bạn hiểu tại sao một số thư viện trong số đó có vẻ "không trực quan" (như bạn đã nói).

Ví dụ đơn giản để tìm nạp thời gian tạo của kho lưu trữ 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']

Điều này đang sử dụng thư viện yêu cầu phổ biến . Trong mã của bạn, bạn cũng cần phải xử lý các trường hợp lỗi.

Nếu bạn cần quyền truy cập với xác thực, nó sẽ phức tạp hơn một chút.


11
+1 để đề cập requests, điều mà tôi đã không gặp phải trước đây. Trông tiện lợi.
larsks

btw, điều này nên có 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

@Christoph r.textsẽ hoạt động nếu phản hồi là JSON. r.contenttrả 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 (r.text or r.content)cụm từ nội bộ , 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ể nhìn thấy texttài sản.
Lycha

Chà, tôi không biết chuyện gì đang xảy ra, nhưng tôi đã đưa ví dụ ban đầu của bạn vào ipython như hiện tại (ngoại trừ việc sửa lỗi thụt lề bị lệch) và đã nhậnAttributeError: 'Response' object has no attribute 'text'
Christoph

Nếu tôi nói json.loads(r.content or r.text)trong bản đã chỉnh sửa, nó hoạt động btw.
Christoph

31

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

(Điều chỉnh từ chỉnh sửa của tôi cho câu hỏi ban đầu, để hiển thị tốt hơn)


15

Tài liệu thật kinh khủng đối với PyGitHub, nhưng sản phẩm thì tuyệt vời. Đây là một mẫu nhanh để thực sự truy xuất tệp, thay đổi tệp đó 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)

2
Là nó? Tôi đã không sử dụng nó trong nhiều năm, nhưng afaik nó vẫn được duy trì - có thể mở ra một vấn đề về điều này? Btw, PyGithub là một trong số ít ví dụ về việc bàn giao bảo trì thành công, nơi người tạo ban đầu không còn thời gian nữa và yêu cầu tình nguyện viên .
Christoph

2
Cảm ơn vì ví dụ này, tôi không hiểu làm thế nào ai đó có thể dành hàng tháng để phát triển dự án của họ và không bận tâm đến việc viết vài đoạn mô tả cách sử dụng nó.
serg

Tôi thấy tài liệu tại pygithub.readthedocs.io/en/latest hoạt động tốt cho những gì tôi cần làm. Tài liệu có thể không được duy trì tốt cho các tính năng mới nhất và nó có thể không chứa tất cả các ví dụ tôi muốn (Google đã lo phần còn lại,) nhưng nó hoạt động ổn đối với tôi.
aschultz

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.