Heim  >  Artikel  >  Backend-Entwicklung  >  So rufen Sie Github-Repository-Daten mit Python ab

So rufen Sie Github-Repository-Daten mit Python ab

Patricia Arquette
Patricia ArquetteOriginal
2024-09-29 06:12:30189Durchsuche

How to retrieve Github Repository Data using Python

Verfügt Ihre Organisation über (viel) zu viele Github-Repositories und Sie benötigen eine einfache Möglichkeit, die einzelnen Repositories für Berichts-, Dashboard- oder Prüfzwecke zusammenzufassen und aufzuzeichnen? Hier ist ein kurzes Skript, um genau das mit der Github-API zu tun.

Funktionen:

  1. get_repo_info(owner, repo):

    • Übernimmt den Benutzernamen (Eigentümer) und den Repository-Namen (Repo) eines GitHub-Repository-Besitzers.
    • Sendet eine Anfrage an die GitHub-API, um Repository-Informationen abzurufen.
    • Gibt bei Erfolg die Informationen des Repositorys als JSON-Objekt zurück, oder „Keine“, wenn ein Fehler vorliegt.
  2. get_collaborators(collaborators_url):

    • Übernimmt die URL zur Liste der Mitarbeiter für ein Repository.
    • Sendet eine Anfrage zum Abrufen der Liste der Mitarbeiter.
    • Gibt eine Liste der Benutzernamen der Mitarbeiter zurück oder eine leere Liste, wenn ein Fehler auftritt.
  3. get_linguals(sprachen_url):

    • Übernimmt die URL zu den Sprachdaten des Repositorys.
    • Sendet eine Anfrage zum Abrufen der im Repository verwendeten Programmiersprachen.
    • Gibt eine Liste von Sprachen zurück oder eine leere Liste, wenn ein Fehler vorliegt.
  4. get_open_issues(owner, repo):

    • Übernimmt den Benutzernamen (Eigentümer) und den Repository-Namen (Repo) des Repository-Eigentümers.
    • Sendet eine Anfrage zum Abrufen der Liste der offenen Probleme im Repository.
    • Gibt die offenen Probleme im JSON-Format zurück oder gibt eine Fehlermeldung aus, wenn ein Problem vorliegt.
  5. get_repo_data(repo_url):

    • Nimmt eine Repository-URL, analysiert sie, um die Eigentümer- und Repo-Werte abzurufen, und ruft dann die anderen Funktionen auf, um verschiedene Informationen über das Repository zu sammeln.
    • Kompiliert die Repository-Informationen, einschließlich Name, Besitzer, Sichtbarkeit, Mitarbeiter, Sprachen, offene Probleme und letzte Aktivität, und gibt sie in einem strukturierten Format (einem Wörterbuch) zurück.
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))

Das obige ist der detaillierte Inhalt vonSo rufen Sie Github-Repository-Daten mit Python ab. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn