Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mendapatkan Data Repositori Github menggunakan Python

Bagaimana untuk mendapatkan Data Repositori Github menggunakan Python

Patricia Arquette
Patricia Arquetteasal
2024-09-29 06:12:30318semak imbas

How to retrieve Github Repository Data using Python

Adakah organisasi anda mempunyai (cara) terlalu banyak repositori github dan anda memerlukan cara mudah untuk meringkaskan dan menyimpan rekod tentang perkara setiap satu untuk tujuan pelaporan, papan pemuka atau pengauditan? Berikut ialah skrip pantas untuk melakukan perkara itu menggunakan API Github.

Fungsi:

  1. get_repo_info(pemilik, repo):

    • Mengambil nama pengguna (pemilik) dan nama repositori (repo) pemilik repositori GitHub.
    • Menghantar permintaan kepada API GitHub untuk mendapatkan maklumat repositori.
    • Mengembalikan maklumat repositori sebagai objek JSON jika berjaya, atau Tiada jika terdapat ralat.
  2. get_collaborators(collaborators_url):

    • Membawa URL ke senarai kolaborator untuk repositori.
    • Menghantar permintaan untuk mengambil senarai rakan usaha sama.
    • Mengembalikan senarai nama pengguna kolaborator atau senarai kosong jika ralat berlaku.
  3. get_languages(languages_url):

    • Mengambil URL ke data bahasa repositori.
    • Menghantar permintaan untuk mendapatkan semula bahasa pengaturcaraan yang digunakan dalam repositori.
    • Mengembalikan senarai bahasa atau senarai kosong jika terdapat ralat.
  4. dapatkan_open_issues(pemilik, repo):

    • Mengambil nama pengguna (pemilik) dan nama repositori (repo) pemilik repositori.
    • Menghantar permintaan untuk mendapatkan semula senarai isu terbuka dalam repositori.
    • Mengembalikan isu terbuka dalam format JSON atau mencetak mesej ralat jika terdapat masalah.
  5. dapatkan_repo_data(repo_url):

    • Mengambil URL repositori, menghuraikannya untuk mendapatkan pemilik dan nilai repo, dan kemudian memanggil fungsi lain untuk mengumpulkan pelbagai maklumat tentang repositori.
    • Menghimpun maklumat repositori, termasuk nama, pemilik, keterlihatan, rakan usaha sama, bahasa, isu terbuka dan aktiviti terakhir serta mengembalikannya dalam format berstruktur (kamus).
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))

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan Data Repositori Github menggunakan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn