"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como recuperar dados do repositório Github usando Python

Como recuperar dados do repositório Github usando Python

Publicado em 2024-11-08
Navegar:843

How to retrieve Github Repository Data using Python

Sua organização tem (muitos) repositórios no GitHub e você precisa de uma maneira fácil de resumir e manter registro do que cada um é para fins de relatórios, painéis ou auditoria? Aqui está um script rápido para fazer exatamente isso usando a API do Github.

Funções:

  1. get_repo_info(proprietário, repositório):

    • Leva o nome de usuário (proprietário) e o nome do repositório (repo) do proprietário do repositório GitHub.
    • Envia uma solicitação à API do GitHub para obter informações do repositório.
    • Retorna as informações do repositório como um objeto JSON se for bem-sucedido ou Nenhum se houver um erro.
  2. get_collaborators(collaborators_url):

    • Leva a URL para a lista de colaboradores de um repositório.
    • Envia uma solicitação para buscar a lista de colaboradores.
    • Retorna uma lista de nomes de usuários de colaboradores ou uma lista vazia se ocorrer um erro.
  3. get_idiomas(url_idiomas):

    • Leva a URL para os dados de idiomas do repositório.
    • Envia uma solicitação para recuperar as linguagens de programação usadas no repositório.
    • Retorna uma lista de idiomas ou uma lista vazia se houver um erro.
  4. get_open_issues(proprietário, repositório):

    • Pega o nome de usuário (owner) e o nome do repositório (repo) do proprietário do repositório.
    • Envia uma solicitação para recuperar a lista de problemas em aberto no repositório.
    • Retorna os problemas em aberto no formato JSON ou imprime uma mensagem de erro se houver algum problema.
  5. get_repo_data(repo_url):

    • Pega um URL de repositório, analisa-o para obter os valores do proprietário e do repositório e, em seguida, chama as outras funções para coletar várias informações sobre o repositório.
    • Compila as informações do repositório, incluindo nome, proprietário, visibilidade, colaboradores, idiomas, questões em aberto e última atividade, e as retorna em um formato estruturado (um dicionário).
import json
import requests
from pymongo import MongoClient

# MongoDB setup (replace with your actual connection details)
client = MongoClient("mongodb://localhost:27017/")
db = client["github_repos"]  # Database name
collection = db["repos"]     # Collection name

def get_repo_info(owner, repo):
    url = f"https://api.github.com/repos/{owner}/{repo}"
    headers = {"Accept": "application/vnd.github json"}
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.json()
    else:
        print(f"Error: {response.status_code}")
        return None

def get_collaborators(collaborators_url):
    response = requests.get(collaborators_url)
    if response.status_code == 200:
        return [collaborator["login"] for collaborator in response.json()]
    else:
        return []

def get_languages(languages_url):
    response = requests.get(languages_url)
    if response.status_code == 200:
        return list(response.json().keys())
    else:
        return []

def get_open_issues(owner, repo):
    url = f"https://api.github.com/repos/{owner}/{repo}/issues?state=open"
    headers = {"Accept": "application/vnd.github json"}
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.json()
    else:
        print(f"Error: {response.status_code}")
        return []

def get_repo_data(repo_url):
    owner, repo = repo_url.split("/")[-2:]
    repo_info = get_repo_info(owner, repo)

    if repo_info:
        data = {
            "Github URL": repo_url,
            "Project name": repo_info["name"],
            "Project owner": repo_info["owner"]["login"],
            "List users with access": get_collaborators(repo_info["collaborators_url"].split("{")[0]),  # remove template part of URL
            "Programming languages used": get_languages(repo_info["languages_url"]),
            "Security/visibility level": repo_info["visibility"],
            "Summary": repo_info["description"],
            "Last maintained": repo_info["pushed_at"],
            "Last release": repo_info["default_branch"],
            "Open issues": get_open_issues(owner, repo),
        }

        # Insert the data into MongoDB
        collection.insert_one(data)
        print("Data inserted into MongoDB successfully.")

        return data
    else:
        return None

# Example usage
repo_url = "https://github.com/URL"
repo_data = get_repo_data(repo_url)

if repo_data:
    print(json.dumps(repo_data, indent=4))
Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/techbelle/how-to-retrieve-github-repository-data-using-python-59g3?1 Se houver alguma violação, entre em contato com [email protected] para excluir isto
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3