2012-05-16 13 views
69

Estoy buscando una biblioteca de Python para Github APIv3 adecuada para mí. Antecedentes: soy un principiante de Python con un fondo principalmente enraizado en Matlab y C++, y recientemente aprendí a usar python-matplotlib.Biblioteca de Python más adecuada para Github API v3

Encontré una biblioteca (python-github3) mencionado en el GH API docs. Después de jugar con él en ipython durante una o dos horas, me pareció realmente poco intuitivo explorar/trabajar con él. Miré un poco más y descubrí que hay un buen número de personas intentando, al menos, escribir una biblioteca de este tipo. Los más prometedores (de un vistazo) son PyGithub y another python-github3, que aparentemente es diferente de la primera.

Antes de pasar los próximos días probando biblioteca tras biblioteca consecutivamente, ¿quería preguntarle a la comunidad SO si hay una opción aceptada, definitiva y obvia para esa biblioteca?

Lo que no me gustó de la primera biblioteca fue la (no) forma intuitiva de obtener datos: algunas cosas que obtienes como atributos, algunas las obtienes como valor de retorno de un método, ese valor devuelto es algo objeto complicada que tiene que ser paginado y reiterado a través, etc.

en ese sentido, PyGithub parece más atractivo a primera vista - perforar claramente a través de una jerarquía de objetos, y luego llegar al atributo que contiene lo que quiere:

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

Por lo tanto, cualquier perlas o f sabiduría para compartir? Sé que no tengo las habilidades suficientes para juzgar rápidamente la calidad de la biblioteca, por lo que me dirijo a la comunidad SO.

editar: fwiw, terminé usando PyGithub. Funciona bien, y el autor es realmente receptivo para comentarios e informes de errores. :-)

+0

Podría valer la pena hacer algunas de equipo GitHub. – Daenyth

+6

fwiw, terminé usando PyGithub. Funciona bien, y el autor es realmente receptivo para comentarios e informes de errores. :-) – Christoph

+0

Ordene todas las alternativas por estrellas en GitHub, comparé los resultados con esta respuesta y elegí PyGithub. Admite Python 3, parece que está bien documentado ... No tengo tiempo para probarlos todos y no hay otra manera de tomar una decisión. – astrojuanlu

Respuesta

18

Al final, terminé usando PyGithub. Funciona bien, y el autor es realmente receptivo para comentarios e informes de errores.:-)

(Adaptado de mi edición a la pregunta original, para una mejor visibilidad)

63

Como mencionó que es un principiante programador python, le sugiero que intente utilizar la API JSON sin ninguna biblioteca Github primero. Realmente no es tan difícil y te ayudará mucho más adelante en tu vida de programación, ya que el mismo enfoque se puede aplicar a cualquier API JSON. Especialmente si parece que probar bibliotecas llevará días.

No estoy diciendo que alguna biblioteca no sea más fácil de usar, solo digo que el pequeño esfuerzo adicional para usar la API directamente puede valer la pena a la larga. Al menos te ayudará a entender por qué algunas de esas bibliotecas parecen "poco intuitivas" (como dijiste).

ejemplo simple para ir a buscar la hora de creación del repositorio de 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'] 

Se trata de utilizar la popular requests library. En su código, naturalmente también necesitará manejar los casos de error.

Si necesita acceso con autenticación, será un poco más complejo.

+11

+1 por mencionar 'solicitudes', que no había encontrado anteriormente. Parece ingenioso. – larsks

+0

por cierto, esto debería ser 'r.content', no' r.text' (el objeto 'Response' no tiene atributo 'text') – Christoph

+0

@Christoph 'r.text' debería funcionar si la respuesta es JSON. 'r.content' devuelve los bytes directamente sin decodificarlos. La biblioteca de solicitudes parece usar internamente la frase '(r.text o r.content)', tal vez deberías hacer eso también. No estoy seguro de por qué no puedes ver la propiedad 'text'. – Lycha

9

documentación es horrible para PyGitHub, pero el producto es grande. Este es un ejemplo rápido para realmente recuperar un archivo, cambiar por una nueva comentario al principio del archivo y cometer de nuevo

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) 
+0

La pregunta tiene 4 años y ha sido respondida, pero gracias de todos modos por la muestra del código :-) – SaschaM78

+2

¿Lo es? No lo he usado en años, pero afaik todavía se mantiene. ¿Quizás abra un [problema] (https://github.com/PyGithub/PyGithub/issues) sobre esto? Por cierto, PyGithub es uno de los pocos ejemplos de una entrega de mantenimiento exitosa, donde el creador original ya no tenía tiempo, y [solicitó voluntarios] (https://github.com/PyGithub/PyGithub/issues/297) . – Christoph

+1

Gracias por este ejemplo, no entiendo cómo alguien puede pasar meses desarrollando su proyecto y no se molesta en escribir dos párrafos que describan cómo usarlo. – serg

Cuestiones relacionadas