„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > So rufen Sie Github-Repository-Daten mit Python ab

So rufen Sie Github-Repository-Daten mit Python ab

Veröffentlicht am 09.11.2024
Durchsuche:501

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_sprachen(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 (Owner) 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))
Freigabeerklärung Dieser Artikel ist nachgedruckt unter: https://dev.to/techbelle/how-to-retrieve-github-repository-data-using-python-59g3?1 Wenn es zu Verletzungen besteht, wenden Sie sich bitte an [email protected], um ihn zu löschen.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3