ไลบรารี python ที่เหมาะสมที่สุดสำหรับ Github API v3 [ปิด]


86

ฉันกำลังมองหาไลบรารี python สำหรับ Github APIv3 ที่เหมาะกับฉัน

ผมพบว่าหนึ่งในห้องสมุด(หลาม github3)กล่าวถึงในเอกสาร GH API หลังจากเล่นกับมันใน ipython เป็นเวลาหนึ่งหรือสองชั่วโมงฉันพบว่าการสำรวจ / ทำงานกับมันไม่ง่าย ฉันมองหาข้อมูลเพิ่มเติมและพบว่ามีคนจำนวนไม่น้อยที่พยายามเขียนห้องสมุดดังกล่าว ยิ่งมีแนวโน้มมากขึ้น (อย่างรวดเร็ว) คือPyGithubและpython-github3อีกตัวซึ่งเห็นได้ชัดว่าแตกต่างจากอันแรก

ก่อนที่ฉันจะใช้เวลาในวันถัดไปในการทดลองใช้ห้องสมุดอย่างต่อเนื่องหลังจากห้องสมุดฉันต้องการถามชุมชน SO ว่ามีทางเลือกที่ชัดเจนและชัดเจนสำหรับห้องสมุดนั้นหรือไม่?

สิ่งที่ฉันไม่ชอบเกี่ยวกับไลบรารีแรกคือ (สำหรับฉัน) วิธีที่ไม่ได้ใช้งานง่ายในการรับข้อมูล - บางสิ่งที่คุณได้รับเป็นแอตทริบิวต์บางอย่างคุณได้รับเป็นค่าส่งคืนของวิธีการที่ค่าส่งคืนเป็นวัตถุที่ซับซ้อนซึ่งต้อง ถูกเพจและวนซ้ำ ฯลฯ

ในเรื่องนี้ PyGithub ดูน่าสนใจยิ่งขึ้นเมื่อมองแวบแรก - เจาะลึกลงไปในลำดับชั้นของวัตถุอย่างชัดเจนจากนั้นมาถึงแอตทริบิวต์ที่มีสิ่งที่คุณต้องการ:

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

ดังนั้นมุกแห่งปัญญาที่จะแบ่งปัน? ฉันรู้ว่าฉันไม่มีทักษะเพียงพอที่จะตัดสินคุณภาพห้องสมุดได้อย่างรวดเร็วนั่นคือเหตุผลที่ฉันหันไปใช้ชุมชน SO

แก้ไข: FWIW ผมสิ้นสุดการใช้PyGithub มันทำงานได้ดีและผู้เขียนเปิดกว้างสำหรับข้อเสนอแนะและรายงานข้อผิดพลาด :-)


อาจจะคุ้มค่าที่จะถามทีมงาน github
Daenyth

6
fwiw ฉันลงเอยด้วยการใช้ PyGithub มันทำงานได้ดีและผู้เขียนเปิดกว้างสำหรับข้อเสนอแนะและรายงานข้อผิดพลาด :-)
Christoph

ฉันเรียงลำดับทางเลือกทั้งหมดตามดาวบน GitHub เปรียบเทียบผลลัพธ์กับคำตอบนี้และเลือก PyGithub รองรับ Python 3 ดูเหมือนว่าจะมีการบันทึกไว้อย่างดี ... ฉันไม่มีเวลาลองใช้ทั้งหมดและไม่มีวิธีอื่นในการตัดสินใจ
astrojuanlu

คำตอบ:


77

เนื่องจากคุณบอกว่าคุณเป็นโปรแกรมเมอร์ Python ระดับเริ่มต้นฉันขอแนะนำให้คุณลองใช้ JSON API โดยไม่มีไลบรารี Github ก่อน มันไม่ใช่เรื่องยากเลยและจะช่วยคุณได้มากในชีวิตการเขียนโปรแกรมของคุณในภายหลังเนื่องจากสามารถใช้แนวทางเดียวกันกับ 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
+1 สำหรับการกล่าวถึงrequestsซึ่งฉันไม่เคยพบมาก่อน ดูดี
larsks

btw สิ่งนี้ควรจะr.contentไม่ใช่r.text(วัตถุ 'การตอบสนอง' ไม่มีแอตทริบิวต์ 'ข้อความ')
Christoph

@Christoph r.textควรใช้งานได้หากการตอบสนองเป็น JSON r.contentส่งคืนไบต์โดยตรงโดยไม่ต้องถอดรหัส ไลบรารีคำขอดูเหมือนจะใช้(r.text or r.content)วลีภายในบางทีคุณก็ควรทำเช่นนั้นเช่นกัน ฉันไม่แน่ใจว่าทำไมคุณถึงมองไม่เห็นtextทรัพย์สิน
Lycha

ฉันไม่รู้ว่าเกิดอะไรขึ้น แต่ฉันใส่ตัวอย่างดั้งเดิมของคุณลงใน ipython ตามที่เป็นอยู่ (ยกเว้นการแก้ไขการเยื้องที่บิดเบี้ยว) และได้รับAttributeError: 'Response' object has no attribute 'text'
Christoph

ถ้าฉันพูดjson.loads(r.content or r.text)ในการแก้ไขมันใช้งานได้ btw
คริสตอฟ

32

ในท้ายที่สุดผมสิ้นสุดการใช้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
ใช่ไหม? ฉันไม่ได้ใช้มันมานานแล้ว แต่ก็ยังคงรักษา afaik ไว้ - อาจเปิดปัญหาเกี่ยวกับเรื่องนี้? Btw, PyGithub เป็นหนึ่งในตัวอย่างของการบำรุงรักษาที่ประสบความสำเร็จด้วยมือมากกว่าที่ผู้สร้างเดิมไม่ได้มีเวลาอีกต่อไปและขอให้อาสาสมัคร
Christoph

2
ขอบคุณสำหรับตัวอย่างนี้ฉันไม่เข้าใจว่าใครบางคนสามารถใช้เวลาหลายเดือนในการพัฒนาโครงการของพวกเขาและไม่ต้องกังวลกับการเขียนย่อหน้าสองสามย่อหน้าเพื่ออธิบายวิธีการใช้งาน
serg

ฉันพบเอกสารที่pygithub.readthedocs.io/en/latestทำงานได้ดีสำหรับสิ่งที่ฉันต้องทำ เอกสารประกอบอาจไม่ได้รับการดูแลอย่างดีสำหรับฟีเจอร์ล่าสุดและอาจไม่มีตัวอย่างทั้งหมดที่ฉันต้องการ (Google ดูแลส่วนที่เหลือให้) แต่ก็ใช้ได้สำหรับฉัน
aschultz

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.