Github API v3 के लिए सबसे उपयुक्त अजगर पुस्तकालय [बंद]


85

मैं अपने लिए उपयुक्त Github APIv3 के लिए एक अजगर पुस्तकालय की तलाश कर रहा हूं।

मुझे GH API डॉक्स में उल्लिखित एक पुस्तकालय (अजगर-जीथब 3) मिला । एक या दो घंटे के लिए ipython में इसके साथ खेलने के बाद, मुझे इसका पता लगाना / साथ काम करना वाकई अचूक लगा। मैंने कुछ और देखा, और पाया कि ऐसे पुस्तकालय को लिखने का प्रयास करने वाले लोगों की संख्या कम से कम है। अधिक आशाजनक दिखने वाली (एक नज़र में) पायगथुब और एक अन्य अजगर-जीथब 3 हैं , जो स्पष्ट रूप से पहले वाले से अलग है।

इससे पहले कि मैं लाइब्रेरी के बाद अगले दिन लगातार लाइब्रेरी की कोशिश करूँ, मैं एसओ समुदाय से पूछना चाहता था कि क्या उस लाइब्रेरी के लिए एक स्वीकृत, निश्चित, स्पष्ट विकल्प है?

पहली लाइब्रेरी के बारे में मुझे जो पसंद नहीं आया, वह था (डेटा के लिए) जाने-अनजाने का तरीका - कुछ चीजें जो आपको एट्रिब्यूट्स के रूप में मिलती हैं, कुछ आपको एक तरीके के रिटर्न वैल्यू के रूप में मिलती हैं, वह है रिटर्न वैल्यू कुछ जटिल ऑब्जेक्ट, जो कि आदि के माध्यम से पृष्ठांकित और प्रसारित होना।

उस संबंध में, PyGithub पहली नज़र में अधिक आकर्षक लग रहा है - स्पष्ट रूप से एक वस्तु पदानुक्रम के माध्यम से नीचे ड्रिल करें, और फिर उस विशेषता पर पहुंचें जिसमें आप चाहते हैं:

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

तो, शेयर करने के लिए ज्ञान का कोई मोती? मुझे पता है कि मेरे पास लाइब्रेरी क्वालिटी को जल्दी जज करने के लिए पर्याप्त कौशल नहीं है, यही वजह है कि मैं एसओ समुदाय की ओर रुख कर रहा हूं।

संपादित करें: fwiw, मैंने PyGithub का उपयोग करके समाप्त किया । यह अच्छी तरह से काम करता है, और प्रतिक्रिया और बग रिपोर्ट के लिए लेखक वास्तव में ग्रहणशील है। :-)


यह जीथब टीम से कुछ पूछने के लायक हो सकता है।
डेनिथ

6
fwiw, मैंने PyGithub का उपयोग करके समाप्त किया। यह अच्छी तरह से काम करता है, और प्रतिक्रिया और बग रिपोर्ट के लिए लेखक वास्तव में ग्रहणशील है। :-)
क्रिस्टोफ़

मैंने गीथहब पर सितारों द्वारा सभी विकल्पों को छांटा, इस जवाब के साथ परिणामों की तुलना की और पाइगथुब को चुना। अजगर 3 का समर्थन करता है, ऐसा लगता है कि यह अच्छी तरह से प्रलेखित है ... मेरे पास उन सभी को आज़माने का कोई समय नहीं है और अपना निर्णय लेने का कोई अन्य तरीका नहीं है।
एस्ट्रोजूनलू

जवाबों:


76

चूँकि आपने उल्लेख किया है कि आप एक शुरुआती पायथन प्रोग्रामर हैं, इसलिए मैं आपको सुझाव दूंगा कि आप बिना किसी गिथब लाइब्रेरी के पहले JSON API का उपयोग करने का प्रयास करें। यह वास्तव में उतना मुश्किल नहीं है और यह आपके प्रोग्रामिंग जीवन में बहुत बाद में आपकी मदद करेगा क्योंकि उसी दृष्टिकोण को किसी JSON 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, जिसका मैंने पहले सामना नहीं किया था। निफ्टी लगता है।
लार्क्स

btw, यह होना चाहिए r.content, नहीं r.text('रिस्पांस' ऑब्जेक्ट में कोई विशेषता 'पाठ' नहीं है)
क्रिस्टोफ़

r.textयदि प्रतिक्रिया JSON है तो @ क्रिसटोफ़ को काम करना चाहिए। r.contentउन्हें डिकोड किए बिना सीधे बाइट देता है। अनुरोध पुस्तकालय आंतरिक रूप से (r.text or r.content)वाक्यांश का उपयोग करने लगता है , शायद आपको भी ऐसा करना चाहिए। मुझे यकीन नहीं है कि आप textसंपत्ति क्यों नहीं देख सकते हैं।
लीचा

वैसे मुझे नहीं पता कि क्या चल रहा है, लेकिन मैंने आपके मूल उदाहरण को ipython में डाल दिया है, जैसा है (मांगे गए इंडेंटेशन को सही करने के अलावा), और मिलाAttributeError: 'Response' object has no attribute 'text'
Christoph

अगर मैं json.loads(r.content or r.text)संपादित एक में कहता हूं , यह btw काम करता है।
क्रिस्टोफ

31

अंत में, मैंने 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
क्या यह? मैंने इसे उम्र में इस्तेमाल नहीं किया है, लेकिन यह अभी भी बरकरार है - शायद इस बारे में एक मुद्दा खोलें ? Btw, PyGithub एक सफल रखरखाव हैंड-ओवर के कुछ उदाहरणों में से एक है, जहां मूल निर्माता के पास अब समय नहीं था, और स्वयंसेवकों के लिए कहा गया
क्रिस्टोफ

2
इस उदाहरण के लिए धन्यवाद, मुझे नहीं पता कि कोई व्यक्ति अपनी परियोजना को विकसित करने में महीनों का समय कैसे लगा सकता है और इसका उपयोग करने का वर्णन करने वाले युगल पैराग्राफ लिखने की जहमत नहीं उठाता।
सर्ग

मैंने pygithub.readthedocs.io/en/latest पर प्रलेखन पाया कि मुझे क्या करने की आवश्यकता है। दस्तावेज़ को नवीनतम सुविधाओं के लिए अच्छी तरह से बनाए नहीं रखा जा सकता है, और इसमें वे सभी उदाहरण शामिल नहीं हो सकते हैं जो मैं चाहता था (Google ने बाकी का ध्यान रखा), लेकिन इसने मेरे लिए ठीक काम किया।
aschultz

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.