Comment récupérer les données du référentiel Github à l'aide de Python

Patricia Arquette
Libérer: 2024-09-29 06:12:30
original
315 Les gens l'ont consulté

How to retrieve Github Repository Data using Python

Votre organisation possède-t-elle (beaucoup) trop de référentiels Github et vous avez besoin d'un moyen simple de résumer et de conserver une trace de chacun d'entre eux à des fins de reporting, de tableau de bord ou d'audit ? Voici un script rapide pour faire exactement cela en utilisant l'API Github.

Fonctions :

  1. get_repo_info(propriétaire, repo) :

    • Prend le nom d'utilisateur (propriétaire) et le nom du référentiel (repo) du propriétaire d'un référentiel GitHub.
    • Envoie une requête à l'API de GitHub pour obtenir des informations sur le référentiel.
    • Renvoie les informations du référentiel sous forme d'objet JSON en cas de succès, ou Aucun en cas d'erreur.
  2. get_collaborators(collaborators_url) :

    • Prend l'URL de la liste des collaborateurs d'un référentiel.
    • Envoie une demande pour récupérer la liste des collaborateurs.
    • Renvoie une liste de noms d'utilisateurs de collaborateurs, ou une liste vide si une erreur se produit.
  3. get_langues(langues_url) :

    • Prend l'URL des données linguistiques du référentiel.
    • Envoie une requête pour récupérer les langages de programmation utilisés dans le référentiel.
    • Renvoie une liste de langues, ou une liste vide en cas d'erreur.
  4. get_open_issues(propriétaire, dépôt) :

    • Prend le nom d'utilisateur (owner) et le nom du référentiel (repo) du propriétaire du référentiel.
    • Envoie une requête pour récupérer la liste des tickets ouverts dans le référentiel.
    • Renvoie les tickets ouverts au format JSON, ou imprime un message d'erreur en cas de problème.
  5. get_repo_data(repo_url) :

    • Prend l'URL d'un référentiel, l'analyse pour obtenir les valeurs du propriétaire et du référentiel, puis appelle les autres fonctions pour recueillir diverses informations sur le référentiel.
    • Compile les informations du référentiel, y compris son nom, son propriétaire, sa visibilité, ses collaborateurs, ses langues, ses problèmes ouverts et sa dernière activité, et les renvoie dans un format structuré (un dictionnaire).
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))
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal