Libreria python più adatta per Github API v3 [chiusa]


85

Sto cercando una libreria python per Github APIv3 adatta a me.

Ho trovato una libreria (python-github3) menzionata nei documenti dell'API GH . Dopo averci provato in ipython per un'ora o due, ho trovato davvero poco intuitivo da esplorare / lavorare. Ho guardato un po 'di più e ho scoperto che c'è un bel numero di persone che cercano almeno di scrivere una libreria del genere. I più promettenti (a colpo d'occhio) sono PyGithub e un altro python-github3 , che apparentemente è diverso dal primo.

Prima di passare i giorni successivi a provare consecutivamente una libreria dopo l'altra, volevo chiedere alla comunità SO se esiste una scelta accettata, definitiva e ovvia per quella libreria?

Quello che non mi piaceva della prima libreria era il modo (per me) non intuitivo di ottenere i dati: alcune cose si ottengono come attributi, altre si ottengono come valore di ritorno di un metodo, quel valore di ritorno è un oggetto complicato che deve essere impaginato e iterato, ecc.

A questo proposito, PyGithub sembra a prima vista più attraente: esplora chiaramente una gerarchia di oggetti e poi arriva all'attributo contenente ciò che desideri:

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

Quindi, qualche perla di saggezza da condividere? So di non avere competenze sufficienti per giudicare rapidamente la qualità della libreria, motivo per cui mi rivolgo alla comunità SO.

modifica: fwiw, ho finito per usare PyGithub . Funziona bene e l'autore è molto disponibile a ricevere feedback e segnalazioni di bug. :-)


Potrebbe valere la pena chiedere a qualcuno del team di GitHub.
Daenyth

6
fwiw, ho finito per usare PyGithub. Funziona bene e l'autore è molto disponibile a ricevere feedback e segnalazioni di bug. :-)
Christoph

Ho ordinato tutte le alternative per stelle su GitHub, ho confrontato i risultati con questa risposta e ho scelto PyGithub. Supporta Python 3, sembra che sia ben documentato ... non ho tempo per provarli tutti e nessun altro modo per prendere la mia decisione.
astrojuanlu

Risposte:


76

Dato che hai menzionato che sei un programmatore Python principiante, ti suggerirei di provare prima a utilizzare l'API JSON senza alcuna libreria Github. Non è davvero così difficile e ti aiuterà molto più avanti nella tua vita di programmazione poiché lo stesso approccio può essere applicato a qualsiasi API JSON. Soprattutto se sembra che provare le librerie richiederà giorni.

Non sto dicendo che alcune librerie non siano più facili da usare, sto solo dicendo che il piccolo sforzo extra per usare direttamente l'API potrebbe valerne la pena a lungo termine. Almeno ti aiuterà a capire perché alcune di queste librerie sembrano "non intuitive" (come hai detto).

Semplice esempio per recuperare l'ora di creazione del repository 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']

Questo sta usando la libreria di richieste popolari . Nel tuo codice dovrai naturalmente gestire anche i casi di errore.

Se hai bisogno di accedere con l'autenticazione, sarà un po 'più complesso.


11
+1 per la menzione requests, che non avevo mai incontrato in precedenza. Sembra elegante.
Larsks

btw, questo dovrebbe essere r.content, non r.text(l'oggetto "Risposta" non ha attributo "testo")
Christoph

@Christoph r.textdovrebbe funzionare se la risposta è JSON. r.contentrestituisce i byte direttamente senza decodificarli. La libreria delle richieste sembra utilizzare internamente la (r.text or r.content)frase, forse dovresti farlo anche tu. Non sono sicuro del motivo per cui non puoi vedere la textproprietà.
Lycha

Beh, non so cosa stia succedendo, ma ho inserito il tuo esempio originale in ipython così com'è (eccetto per la correzione dell'indentazione alterata), e ho ottenutoAttributeError: 'Response' object has no attribute 'text'
Christoph

Se dico json.loads(r.content or r.text)in quello modificato, funziona btw.
Christoph

31

Alla fine, ho finito per usare PyGithub . Funziona bene e l'autore è molto disponibile a ricevere feedback e segnalazioni di bug. :-)

(Adattato dalla mia modifica alla domanda originale, per una migliore visibilità)


15

La documentazione è orribile per PyGitHub, ma il prodotto è fantastico. Ecco un rapido esempio per recuperare effettivamente un file, modificarlo con un nuovo commento all'inizio del file e confermarlo

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
È? Non lo uso da anni, ma a dire il vero è ancora mantenuto - forse aprire un problema su questo? A proposito, PyGithub è uno dei pochi esempi di una consegna di manutenzione riuscita, in cui il creatore originale non aveva più tempo e ha chiesto volontari .
Christoph

2
Grazie per questo esempio, non capisco come qualcuno possa passare mesi a sviluppare il proprio progetto e non si preoccupi di scrivere un paio di paragrafi che descrivono come usarlo.
serg

Ho trovato la documentazione su pygithub.readthedocs.io/en/latest funzionava bene per quello che dovevo fare. La documentazione potrebbe non essere ben mantenuta per le funzionalità più recenti e potrebbe non contenere tutti gli esempi che volevo (Google si è occupata del resto) ma ha funzionato bene per me.
aschultz

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.