Estoy buscando una biblioteca de Python para Github APIv3 adecuada para mí.
Encontré una biblioteca (python-github3) mencionada en los documentos de la API de GH . 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 que al menos intentan escribir una biblioteca así. Los de aspecto más prometedor (de un vistazo) son PyGithub y otro python-github3 , que aparentemente es diferente al primero.
Antes de pasar los siguientes días probando consecutivamente biblioteca tras biblioteca, quería preguntarle a la comunidad SO si existe una opción obvia, definitiva y aceptada para esa biblioteca.
Lo que no me gustó de la primera biblioteca fue la forma poco intuitiva (para mí) de obtener datos: algunas cosas se obtienen como atributos, otras se obtienen como valor de retorno de un método, ese valor de retorno es un objeto complicado que debe ser paginado e iterado, etc.
En ese sentido, PyGithub parece más atractivo a primera vista: profundice claramente en una jerarquía de objetos y luego llegue al atributo que contiene lo que desea:
for repo in g.get_user().get_repos():
print repo.name
Entonces, ¿alguna perla de sabiduría para compartir? Sé que no tengo las habilidades suficientes para juzgar rápidamente la calidad de la biblioteca, por eso me dirijo a la comunidad SO.
editar: fwiw, terminé usando PyGithub . Funciona bien y el autor es muy receptivo a los comentarios y los informes de errores. :-)
Respuestas:
Como mencionó que es un programador principiante de Python, le sugiero que intente usar la API JSON sin ninguna biblioteca Github primero. Realmente no es tan difícil y lo ayudará mucho más adelante en su vida de programación, ya que el mismo enfoque se puede aplicar a cualquier API JSON. Especialmente si parece que probar las 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 podría valer la pena a largo plazo. Al menos te ayudará a entender por qué algunas de esas bibliotecas parecen "poco intuitivas" (como dijiste).
Ejemplo simple para obtener el tiempo 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']
Esto está utilizando la biblioteca de solicitudes popular . En su código, naturalmente, también deberá manejar los casos de error.
Si necesita acceso con autenticación, será un poco más complejo.
fuente
requests
, que no había encontrado anteriormente. Parece genial.r.content
, nor.text
(el objeto 'Respuesta' no tiene atributo 'texto')r.text
debería funcionar si la respuesta es JSON.r.content
devuelve los bytes directamente sin decodificarlos. La biblioteca de solicitudes parece usar una(r.text or r.content)
frase internamente , tal vez usted también debería hacerlo. No estoy seguro de por qué no puede ver latext
propiedad.AttributeError: 'Response' object has no attribute 'text'
json.loads(r.content or r.text)
en el editado, funciona por cierto.Al final, terminé usando PyGithub . Funciona bien y el autor es muy receptivo a los comentarios y los informes de errores. :-)
(Adaptado de mi edición a la pregunta original, para una mejor visibilidad)
fuente
La documentación es horrible para PyGitHub, pero el producto es excelente. Aquí hay una muestra rápida para recuperar un archivo, cambiarlo con un nuevo comentario al comienzo del archivo y volver a confirmarlo
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)
fuente
Libsaas es ideal para principiantes. Tiene una buena documentación y es fácil de usar, vea el ejemplo . Siéntete libre de contribuir.
fuente