Ir para o conteúdo

Como usar a API GitHub em Python: um guia completo

A API GitHub abre um mundo emocionante de possibilidades para automatizar fluxos de trabalho, integração com GitHub, gerenciamento de projetos e análise de dados. Como desenvolvedores Python, podemos aproveitar ao máximo a API para aumentar nossa produtividade e criar ferramentas úteis.

Neste guia passo a passo abrangente, você aprenderá como usar a API GitHub usando Python.

Por que usar a API GitHub com Python?

Antes de entrar no código, vamos ver por que usar a API GitHub com Python é tão poderoso:

  • Automatizar fluxos de trabalho – Elimine tarefas repetitivas escrevendo scripts para criar problemas, abrir e mesclar PRs, liberar binários, etc.

  • Aumente a produtividade – Integre ferramentas personalizadas ao seu ambiente de desenvolvimento para melhorar os fluxos de trabalho.

  • Gerenciar projetos – Gerencie programaticamente problemas, rótulos e marcos em repositórios.

  • Analisar dados – Extraia métricas e insights interessantes de mais de 96 milhões de repositórios.

  • Integre e estenda o GitHub – Crie aplicativos web personalizados, visualizações, ferramentas CLI, bots e muito mais!

A API abre muitas maneiras criativas de aumentar a produtividade e criar excelentes ferramentas e experiências para desenvolvedores.

Visão geral da API GitHub

A API GitHub fornece endpoints RESTful para acessar dados e serviços do GitHub. Você pode:

  • Gerenciar repositórios, essências, problemas, pull requests
  • Interaja com dados do Git – commits, ramificações, tags
  • Recuperar perfis de usuários, organizações, equipes
  • Código de pesquisa, problemas, repositórios, usuários
  • Acesse metadados, problemas, PRs, arquivos, commits
  • Analise as tendências da comunidade, bifurcações do projeto

E muito mais!

A API usa JSON para serializar dados e usa OAuth para autenticação. Todas as solicitações devem ser feitas via HTTPS.

Para usar a API, você simplesmente:

  1. Crie uma conta GitHub
  2. Gere um token de acesso pessoal para autenticação
  3. Faça solicitações de API e lide com respostas

Agora vamos ver isso em ação com exemplos de Python!

Fazendo solicitações de API do GitHub

Python requests biblioteca facilita a interação com APIs da web. Vamos buscar alguns dados do usuário do GitHub:

import requests

username = "defunkt"
response = requests.get(f"https://api.github.com/users/{username}")

print(response.json())

Isso imprime informações como:

{
  "login": "defunkt",
  "id": 2,
  "node_id": "MDQ6VXNlcjI=",
  "avatar_url": "https://avatars.githubusercontent.com/u/2?v=4",
  "gravatar_id": "",
  "url": "https://api.github.com/users/defunkt",
  "html_url": "https://github.com/defunkt",

  //...
}

Podemos acessar qualquer rota de API não autenticada dessa forma. Para acessar dados privados, precisamos passar por um token de autenticação.

Criando um token de acesso pessoal do GitHub

Para gerar um token:

  1. Acesse Configurações > Configurações do desenvolvedor > Tokens de acesso pessoal
  2. Clique Gerar novo token
  3. Dê uma descrição como "Meu script Python"
  4. Selecione os escopos/permissões que você deseja
  5. Clique Gerar token

Certifique-se de copiar o token – você não poderá recuperá-lo novamente mais tarde!

Os escopos comuns incluem:

  • repo – Acesse repositórios privados
  • admin:org – Gerenciar organizações
  • notifications – Acessar notificações
  • user – Acesso de leitura/gravação às informações do perfil

Vamos usar nosso token para criar um novo repositório:

import requests

token = "ghp_123abcMyToken"

data = {"name": "My New Repo"}

response = requests.post(
  "https://api.github.com/user/repos", 
  json=data,
  headers={"Authorization": f"token {token}"}
)

print(response.status_code) # 201 = Success!

O token nos autentica para criar repositórios privados.

Você também pode usar Aplicativos GitHub que têm acesso com escopo e não expiram como tokens de usuário. Os aplicativos devem ser instalados por um usuário/organização para obter acesso.

Trabalhando com repositórios GitHub

Uma parte importante da API envolve o gerenciamento de repositórios. Vamos passar por algumas tarefas comuns do repositório.

Obtenha um repositório

Para obter os metadados de um repositório:

response = requests.get("https://api.github.com/repos/pandas-dev/pandas")
repo_info = response.json()

print(repo_info[‘description‘]) 
# Powerful data structures for data analysis, time series, statistics

Podemos acessar informações como descrições, estrelas, clones, contribuidores, idiomas, lançamentos, commits e muito mais!

Listar repositórios

Para listar repositórios para um usuário ou organização:

repos_url = "https://api.github.com/users/octocat/repos"
repos = requests.get(repos_url).json()

for repo in repos:
  print(repo[‘name‘]) # Prints names of each repo

Crie um repositório

Também podemos criar novos repositórios:

data = {
  "name": "My New Repo",
  "description": "This is my cool new repo",
  "private": False
}

response = requests.post(
  "https://api.github.com/user/repos", 
  json=data,
  headers={"Authorization": "token {token}"}
) 

Excluir um repositório

Para excluir um repositório:

requests.delete(‘https://api.github.com/repos/octocat/Hello-World‘, 
                headers={"Authorization": "token {token}"})

Isso lhe dá controle total sobre o gerenciamento programático de seus repositórios.

Observação: Todas as solicitações de API devem ser feitas usando HTTPS por segurança.

Trabalhando com problemas em repositórios

A API Issues permite gerenciar problemas e solicitações pull. Você pode:

  • Listar/criar/editar/fechar/reabrir problemas
  • Bloqueie conversas, mescle PRs
  • Enviar e editar comentários
  • Adicione rótulos, responsáveis, marcos

Por exemplo, para obter problemas de um repositório:

response = requests.get(‘https://api.github.com/repos/octocat/hello-world/issues‘)
issues = response.json()

for issue in issues:
  print(issue[‘title‘]) # Prints each issue title

Isso permite integrar o gerenciamento de problemas em ferramentas e fluxos de trabalho externos.

Trabalhando com dados Git

A API Git Data fornece endpoints para interagir diretamente com repositórios Git. Você pode:

  • Gerenciar filiais e tags
  • Ler/gravar dados de blob
  • Recuperar commits, referências, árvores
  • Compare commits, referências, arquivos

Por exemplo, para obter commits de um repositório:

commits_url = "https://api.github.com/repos/pandas-dev/pandas/commits"
commits = requests.get(commits_url).json()

for commit in commits:
  print(commit[‘sha‘]) # Print commit SHAs
  print(commit[‘commit‘][‘message‘]) # Print messages

Isso fornece acesso completo para gerenciar repositórios Git programaticamente.

Procurando por repositórios e código

A API de pesquisa do GitHub permite consultar quase tudo em mais de 96 milhões de repositórios públicos.

Por exemplo, para encontrar projetos Python relacionados à ciência de dados:

import requests

query = "language:python data science in:readme"
response = requests.get("https://api.github.com/search/repositories", 
                        params={"q": query})

results = response.json()[‘items‘]
for result in results:
  print(result[‘name‘]) # Prints names of matching repos 

A sintaxe da consulta de pesquisa oferece suporte a operadores booleanos, filtros, seleção de contexto e muito mais para criar pesquisas direcionadas.

Alguns exemplos:

  • org:facebook language:python stars:>5000 – Repositórios Python na organização do Facebook com mais de 5 mil estrelas
  • filename:requirements.txt django – Repos com requisitos.txt contendo Django
  • user:defunkt location:san francisco – Encontre os repositórios do defunkt se o local for SF

A API de pesquisa abre muitas maneiras criativas de extrair insights e conjuntos de dados interessantes dos dados abertos do GitHub.

Usando a API GraphQL do GitHub

Além da API REST, o GitHub fornece uma API GraphQL para consultas mais flexíveis.

GraphQL permite especificar com precisão os dados desejados em estruturas JSON aninhadas. Você pode consultar diversas entidades vinculadas em uma solicitação.

Por exemplo, aqui consultamos os dados do perfil de um usuário, bem como os nomes de seus repositórios:

import requests 

query = """
query {
  user(login:"defunkt") {
    name
    repositories(first:10) {
      nodes { 
        name 
      }
    }
  }
}
"""

response = requests.post(‘https://api.github.com/graphql‘, json={‘query‘: query})
print(response.json())

Isso permite moldar a resposta exata que você precisa. O Explorador GraphQL ajuda a criar consultas de forma interativa.

Integrando a API GitHub em aplicativos

Agora que você conhece o básico, vamos dar uma olhada na construção de aplicativos com a API GitHub.

Autorização de aplicativo OAuth

Para aplicativos da web, use GitHub OAuth para autorização em vez de tokens codificados. Isso permite que os usuários revoguem o acesso.

  1. Registre um novo aplicativo OAuth
  2. Use o ID do cliente e o segredo para autorização
  3. Redirecionar usuários para solicitar acesso ao GitHub

Agora seu aplicativo pode fazer chamadas de API em nome dos usuários.

Fazendo solicitações autenticadas

Uma vez autorizado, faça chamadas com o token de acesso:

access_token = "abc123xxddff" # OAuth token 

response = requests.get(
  "https://api.github.com/user/repos",
  headers={"Authorization": f"token {access_token}"}
)

print(response.json()) # Print user‘s private repos

Isso permite acessar dados privados com base nas permissões do usuário.

Limitação de taxa

A API GitHub tem limites de taxa para solicitações. Monitore o status do seu aplicativo:

response = requests.get("https://api.github.com/users/octocat") 

print(response.headers[‘X-RateLimit-Limit‘]) # 5000
print(response.headers[‘X-RateLimit-Remaining‘]) # 4999

Distribua as solicitações ao longo do tempo e armazene os dados em cache para evitar limites.

Lidando com erros com elegância

Sempre verifique os códigos de status e trate os erros adequadamente:

response = requests.get(‘https://api.github.com/invalid/url‘)

if response.status_code == 404:
  print("Resource not found!") 
elif response.status_code == 403:
  print("You do not have access!")
else:
  print("An error occurred.")

Isso garante que seu aplicativo permaneça estável em produção.

Seguindo as práticas recomendadas de API, você pode criar integrações e ferramentas robustas para desenvolvedores.

Construindo um aplicativo de painel GitHub

Vamos unir o que aprendemos ao construir um aplicativo da web para visualizar seu perfil e repositórios do GitHub usando Flask:

# app.py

from flask import Flask
import requests
from github import Github # pyGithub library

app = Flask(__name__)

@app.route("/")
def dashboard():
  # Use access token for API requests
  github = Github("access_token123xxdd")

  # Fetch user profile info
  user = github.get_user()

  # Fetch list of repos
  repos = user.get_repos() 

  # Pass info to template
  return render_template("dashboard.html", user=user, repos=repos)

if __name__ == "__main__":
  app.run(debug=True)

Usamos pyGithub para simplificar algumas interações de API. A página inicial renderizará o dashboard.html modelo:

<!-- dashboard.html -->

<h3>GitHub Dashboard for {{user.name}}</h3>

<img src="{{user.avatar_url}}" style="width:64px">

<h4>Your Repositories</h4>

<ul>
  {% for repo in repos %}
  <li>{{repo.name}}</li>
  {% endfor %}
</ul>

Isso mostra como você pode construir um aplicativo para exibir dados do GitHub para um usuário logado!

As possibilidades são infinitas para integrar a API em seus próprios aplicativos e ferramentas.

Melhores práticas ao usar a API GitHub

Aqui estão algumas práticas recomendadas para garantir que seus aplicativos que usam a API GitHub tenham desempenho, segurança e robustez:

  • Autenticação – Use tokens ou OAuth, evite enviar nomes de usuário/senhas brutos.
  • HTTPS – Sempre use endpoints HTTPS para proteger os dados.
  • Limitação de taxa – Distribua solicitações e armazene dados em cache para evitar limites.
  • Paginação – Use parâmetros de página para iterar através de conjuntos de resultados.
  • Tratamento de erros – Lide com erros 4xx e 5xx normalmente.
  • ensaio – Teste minuciosamente as chamadas de API, use simulação para iterações.
  • Documentação – Leia os documentos com atenção, eles fornecem exemplos de código para cada endpoint.

Seguir as práticas recomendadas da API evita erros evitáveis ​​e garante aplicativos confiáveis.

Outros recursos da API GitHub para explorar

Nós apenas arranhamos a superfície do que é possível com a API GitHub. Aqui estão alguns outros recursos interessantes para verificar:

  • API de ações do GitHub – Automatize fluxos de trabalho acionando ações com a API
  • Páginas GitHub – Gerenciar sites de páginas de maneira programática
  • Gistas – Gerenciar trechos de código, configurações e modelos
  • Organizações – Gerenciar equipes organizacionais, membros e permissões
  • Banco de dados Git – Acesse diretamente dados de objetos Git, como blobs e árvores
  • API do GitHub Marketplace – Gerenciar aplicativos listados no GitHub Marketplace
  • API de discussões do GitHub – Crie fóruns comunitários e integrações de perguntas e respostas

Os recursos da API se expandem à medida que o GitHub adiciona novos recursos, portanto, fique atento aos novos endpoints.

Compare a API do GitHub com alternativas

Para desenvolvedores que trabalham com outras plataformas, como a API do GitHub se compara a concorrentes como GitLab, BitBucket, Azure DevOps, etc?

Em geral, os recursos da API do GitHub se destacam em termos de:

  • Adoção – De longe a maior base de usuários e comunidade
  • Documentação – Documentos extremamente completos com exemplos
  • REST + GraphQL – Flexibilidade de endpoints REST e GraphQL
  • Recursos de pesquisa – Pesquisa indexada poderosa em todos os dados públicos
  • Ecossistema – Enorme ecossistema de aplicativos, ferramentas e integrações
  • Análise de Código – Capacidades de digitalização de código, linting e análise de qualidade

O GitHub claramente lidera em funcionalidade de API graças à sua escala e anos de desenvolvimento. Outros provedores como GitLab e BitBucket estão expandindo os recursos de API para competir. Mas, por enquanto, o GitHub continua sendo a API com mais recursos para interagir programaticamente com repositórios Git.

Próximas etapas e recursos

Espero que este guia tenha fornecido uma visão geral abrangente de como usar a API GitHub com Python!

Aqui estão algumas próximas etapas e recursos para aprendizado adicional:

A API GitHub abre um mundo inteiro de possibilidades para construir ferramentas de desenvolvedor, automatizar fluxos de trabalho, gerenciar projetos e analisar dados. Espero que você se sinta inspirado para criar algo valioso para a comunidade!

Feliz codificação!

Junte-se à conversa

O seu endereço de e-mail não será publicado. Os campos obrigatórios são marcados com *