Am besten geeignete Python-Bibliothek für Github API v3 [geschlossen]


86

Ich suche eine Python-Bibliothek für die für mich geeignete Github-APIv3.

Ich habe eine Bibliothek (python-github3) gefunden, die in den GH-API-Dokumenten erwähnt ist . Nachdem ich ein oder zwei Stunden in Ipython damit herumgespielt hatte, fand ich es wirklich nicht intuitiv, damit zu arbeiten. Ich habe noch ein bisschen nachgesehen und festgestellt, dass es eine ganze Reihe von Leuten gibt, die zumindest versuchen, eine solche Bibliothek zu schreiben. Die vielversprechenderen (auf einen Blick) sind PyGithub und ein weiterer Python-Github3 , der sich anscheinend vom ersten unterscheidet.

Bevor ich die nächsten Tage damit verbringe, Bibliothek für Bibliothek nacheinander auszuprobieren, wollte ich die SO-Community fragen, ob es eine akzeptierte, endgültige und offensichtliche Wahl für diese Bibliothek gibt.

Was mir an der ersten Bibliothek nicht gefallen hat, war die (für mich) unintuitive Möglichkeit, an Daten zu gelangen - einige Dinge erhalten Sie als Attribute, andere als Rückgabewert einer Methode, dieser Rückgabewert ist ein kompliziertes Objekt, das benötigt wird ausgelagert und durchlaufen werden usw.

In dieser Hinsicht sieht PyGithub auf den ersten Blick attraktiver aus - gehen Sie eine Objekthierarchie klar durch und gelangen Sie dann zu dem Attribut, das Folgendes enthält:

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

Also, irgendwelche Perlen der Weisheit zu teilen? Ich weiß, dass ich nicht genug Fähigkeiten habe, um die Qualität der Bibliothek schnell beurteilen zu können. Deshalb wende ich mich an die SO-Community.

edit: fwiw, ich habe PyGithub benutzt . Es funktioniert gut und der Autor ist sehr empfänglich für Feedback und Fehlerberichte. :-)


Es könnte sich lohnen, einige Mitglieder des Github-Teams zu fragen.
Daenyth

6
fwiw, am Ende habe ich PyGithub benutzt. Es funktioniert gut und der Autor ist sehr empfänglich für Feedback und Fehlerberichte. :-)
Christoph

Ich habe alle Alternativen auf GitHub nach Sternen sortiert, die Ergebnisse mit dieser Antwort verglichen und PyGithub ausgewählt. Unterstützt Python 3, scheint gut dokumentiert zu sein ... Ich habe keine Zeit, sie alle auszuprobieren und keine andere Möglichkeit, meine Entscheidung zu treffen.
Astrojuanlu

Antworten:


77

Da Sie erwähnt haben, dass Sie ein Python-Programmierer für Anfänger sind, würde ich Ihnen empfehlen, zuerst zu versuchen, die JSON-API ohne Github-Bibliothek zu verwenden. Es ist wirklich nicht so schwierig und wird Ihnen viel später in Ihrem Programmierleben helfen, da der gleiche Ansatz auf jede JSON-API angewendet werden kann. Besonders wenn es so aussieht, als würde das Ausprobieren von Bibliotheken Tage dauern.

Ich sage nicht, dass einige Bibliotheken nicht einfacher zu verwenden sind, ich sage nur, dass sich der kleine zusätzliche Aufwand für die direkte Verwendung der API auf lange Sicht lohnen könnte. Zumindest hilft es Ihnen zu verstehen, warum einige dieser Bibliotheken "unintuitiv" erscheinen (wie Sie sagten).

Einfaches Beispiel zum Abrufen der Erstellungszeit des Django-Repositorys:

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']

Dies verwendet die beliebte Anforderungsbibliothek . In Ihrem Code müssen Sie natürlich auch die Fehlerfälle behandeln.

Wenn Sie Zugriff mit Authentifizierung benötigen, ist dies etwas komplexer.


11
+1 für die Erwähnung requests, die ich vorher nicht angetroffen hatte. Sieht gut aus.
Larsks

Übrigens sollte dies r.contentnicht sein r.text(' Antwort' -Objekt hat kein Attribut' Text ')
Christoph

@Christoph r.textsollte funktionieren, wenn die Antwort JSON ist. r.contentgibt die Bytes direkt zurück, ohne sie zu dekodieren. Die Anforderungsbibliothek scheint intern (r.text or r.content)Phrasen zu verwenden. Vielleicht sollten Sie das auch tun. Ich bin mir nicht sicher, warum Sie die textImmobilie nicht sehen können .
Lycha

Nun, ich weiß nicht, was los ist, aber ich habe Ihr ursprüngliches Beispiel so wie es ist in Ipython eingefügt (außer um korrigierte Einrückungen zu korrigieren) und bekamAttributeError: 'Response' object has no attribute 'text'
Christoph

Wenn ich json.loads(r.content or r.text)in der bearbeiteten sage , funktioniert es übrigens.
Christoph

31

Am Ende habe ich PyGithub verwendet . Es funktioniert gut und der Autor ist sehr empfänglich für Feedback und Fehlerberichte. :-)

(Von meiner Bearbeitung an die ursprüngliche Frage angepasst, um die Sichtbarkeit zu verbessern)


15

Die Dokumentation ist für PyGitHub schrecklich, aber das Produkt ist großartig. Hier ist ein kurzes Beispiel zum tatsächlichen Abrufen einer Datei, zum Ändern mit einem neuen Kommentar am Anfang der Datei und zum Zurückschreiben

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
Ist es? Ich habe es seit Ewigkeiten nicht mehr benutzt, aber afaik ist es immer noch gepflegt - vielleicht ein Problem dazu? Übrigens ist PyGithub eines der wenigen Beispiele für eine erfolgreiche Wartungsübergabe, bei der der ursprüngliche Ersteller keine Zeit mehr hatte und nach Freiwilligen fragte .
Christoph

2
Vielen Dank für dieses Beispiel. Ich verstehe nicht, wie jemand Monate damit verbringen kann, sein Projekt zu entwickeln, und mache mir nicht die Mühe, ein paar Absätze zu schreiben, in denen die Verwendung beschrieben wird.
Serg

Ich fand, dass die Dokumentation unter pygithub.readthedocs.io/en/latest für das, was ich tun musste, gut funktionierte. Die Dokumentation ist möglicherweise für die neuesten Funktionen nicht gut gepflegt und enthält möglicherweise nicht alle gewünschten Beispiele (Google hat sich um den Rest gekümmert), aber sie hat für mich in Ordnung funktioniert.
Schultz

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.