"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo recuperar datos del repositorio de Github usando Python

Cómo recuperar datos del repositorio de Github usando Python

Publicado el 2024-11-08
Navegar:359

How to retrieve Github Repository Data using Python

¿Su organización tiene (demasiados) demasiados repositorios de github y necesita una manera fácil de resumir y mantener un registro de lo que es cada uno para fines de informes, paneles o auditorías? Aquí hay un script rápido para hacer precisamente eso usando la API de Github.

Funciones:

  1. get_repo_info(propietario, repositorio):

    • Toma el nombre de usuario (propietario) y el nombre del repositorio (repo) del propietario de un repositorio de GitHub.
    • Envía una solicitud a la API de GitHub para obtener información del repositorio.
    • Devuelve la información del repositorio como un objeto JSON si tiene éxito, o Ninguno si hay un error.
  2. get_colaboradores(colaboradores_url):

    • Lleva la URL a la lista de colaboradores de un repositorio.
    • Envía una solicitud para recuperar la lista de colaboradores.
    • Devuelve una lista de nombres de usuarios de colaboradores, o una lista vacía si ocurre un error.
  3. get_languages(languages_url):

    • Lleva la URL a los datos de idiomas del repositorio.
    • Envía una solicitud para recuperar los lenguajes de programación utilizados en el repositorio.
    • Devuelve una lista de idiomas, o una lista vacía si hay un error.
  4. get_open_issues(propietario, repositorio):

    • Toma el nombre de usuario (propietario) y el nombre del repositorio (repo) del propietario del repositorio.
    • Envía una solicitud para recuperar la lista de problemas abiertos en el repositorio.
    • Devuelve los problemas abiertos en formato JSON o imprime un mensaje de error si hay un problema.
  5. get_repo_data(repo_url):

    • Toma la URL de un repositorio, la analiza para obtener el propietario y los valores del repositorio, y luego llama a las otras funciones para recopilar información diversa sobre el repositorio.
    • Recopila la información del repositorio, incluido su nombre, propietario, visibilidad, colaboradores, idiomas, problemas abiertos y última actividad, y la devuelve en un formato estructurado (un diccionario).
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))
Declaración de liberación Este artículo se reproduce en: https://dev.to/techbelle/how-to-retrieve-github-repository-data-using-python-59g3?1 Si hay alguna infracción, comuníquese con [email protected] para eliminar él
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3