Estou procurando uma biblioteca python para o Github APIv3 adequada para mim.
Eu encontrei uma biblioteca (python-github3) mencionada na documentação da API GH . Depois de brincar com ele no ipython por uma ou duas horas, achei muito pouco intuitivo explorar / trabalhar com ele. Eu olhei mais um pouco e descobri que há várias pessoas tentando escrever uma biblioteca assim. Os mais promissores (à primeira vista) são o PyGithub e outro python-github3 , que aparentemente é diferente do primeiro.
Antes de passar os próximos dias experimentando consecutivamente uma biblioteca após outra, gostaria de perguntar à comunidade SO se há uma escolha aceita, definitiva e óbvia para essa biblioteca.
O que eu não gostei na primeira biblioteca foi a maneira (para mim) não intuitiva de obter dados - algumas coisas você obtém como atributos, outras como valor de retorno de um método, esse valor de retorno é algum objeto complicado que tem que ser paginado e iterado, etc.
Nesse sentido, o PyGithub parece mais atraente à primeira vista - detalha claramente uma hierarquia de objetos e, em seguida, chega ao atributo que contém o que você deseja:
for repo in g.get_user().get_repos():
print repo.name
Então, alguma pérola de sabedoria para compartilhar? Eu sei que não tenho habilidades suficientes para julgar rapidamente a qualidade da biblioteca, e é por isso que estou recorrendo à comunidade SO.
edit: fwiw, acabei usando PyGithub . Funciona bem e o autor é realmente receptivo a comentários e relatórios de erros. :-)
Respostas:
Como você mencionou que é um programador iniciante em Python, sugiro que tente usar a API JSON sem nenhuma biblioteca Github primeiro. Realmente não é tão difícil e o ajudará muito mais tarde em sua vida de programação, uma vez que a mesma abordagem pode ser aplicada a qualquer API JSON. Especialmente se parecer que experimentar bibliotecas vai demorar dias.
Não estou dizendo que alguma biblioteca não seja mais fácil de usar, estou apenas dizendo que o pequeno esforço extra para usar a API diretamente pode valer a pena no longo prazo. Pelo menos vai ajudá-lo a entender por que algumas dessas bibliotecas parecem "não intuitivas" (como você disse).
Exemplo simples para buscar o tempo de criação do repositório 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']
Isso está usando a popular biblioteca de solicitações . Em seu código, você naturalmente também precisará lidar com os casos de erro.
Se você precisar de acesso com autenticação, será um pouco mais complexo.
fonte
requests
, que eu não tinha encontrado anteriormente. Parece bacana.r.content
, nãor.text
(o objeto 'Resposta' não tem o atributo 'texto')r.text
deve funcionar se a resposta for JSON.r.content
retorna os bytes diretamente sem decodificá-los. A biblioteca de solicitações parece usar(r.text or r.content)
frase internamente , talvez você deva fazer isso também. Não sei por que você não pode ver atext
propriedade.AttributeError: 'Response' object has no attribute 'text'
json.loads(r.content or r.text)
no editado, funciona btw.No final, acabei usando o PyGithub . Funciona bem e o autor é realmente receptivo a comentários e relatórios de erros. :-)
(Adaptado da minha edição para a pergunta original, para melhor visibilidade)
fonte
A documentação é horrível para o PyGitHub, mas o produto é ótimo. Aqui está um exemplo rápido para realmente recuperar um arquivo, alterando-o com um novo comentário no início do arquivo e submetendo-o de volta
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)
fonte
Libsaas é ótimo para iniciantes. Possui uma boa documentação e é fácil de usar, veja exemplo . Sinta-se à vontade para contribuir.
fonte