Biblioteca python mais adequada para Github API v3 [fechado]


86

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. :-)


Pode valer a pena perguntar a alguns membros da equipe do github.
Daenyth de

6
Fwiw, acabei usando PyGithub. Funciona bem e o autor é realmente receptivo a comentários e relatórios de erros. :-)
Christoph

Classifiquei todas as alternativas por estrelas no GitHub, comparei os resultados com esta resposta e escolhi PyGithub. Suporta Python 3, parece que está bem documentado ... Não tenho tempo para experimentar todos e nenhuma outra forma de tomar minha decisão.
astrojuanlu

Respostas:


77

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.


11
1 para mencionar requests, que eu não tinha encontrado anteriormente. Parece bacana.
larsks

aliás, deveria ser r.content, não r.text(o objeto 'Resposta' não tem o atributo 'texto')
Christoph

@Christoph r.textdeve funcionar se a resposta for JSON. r.contentretorna 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 a textpropriedade.
Lycha

Bem, eu não sei o que está acontecendo, mas coloquei seu exemplo original em ipython no estado em que se encontra (exceto para correção de recuo mutilado) e obtiveAttributeError: 'Response' object has no attribute 'text'
Christoph

Se eu disser json.loads(r.content or r.text)no editado, funciona btw.
Christoph

32

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)


15

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)

2
É isso? Eu não uso há anos, mas afaik ainda é mantido - talvez abra um problema sobre isso? Aliás, o PyGithub é um dos poucos exemplos de transferência de manutenção bem-sucedida, onde o criador original não tinha mais tempo e pediu voluntários .
Christoph

2
Obrigado por este exemplo, não entendo como alguém pode passar meses desenvolvendo seu projeto e não se preocupa em escrever alguns parágrafos descrevendo como usá-lo.
serg

Descobri que a documentação em pygithub.readthedocs.io/en/latest funcionou bem para o que eu precisava fazer. A documentação pode não ser bem mantida para os recursos mais recentes e pode não conter todos os exemplos que eu queria (o Google cuidou do resto), mas funcionou bem para mim.
aschultz de

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.