«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как получить данные репозитория Github с помощью Python

Как получить данные репозитория Github с помощью Python

Опубликовано 9 ноября 2024 г.
Просматривать:587

How to retrieve Github Repository Data using Python

В вашей организации (слишком) слишком много репозиториев GitHub, и вам нужен простой способ суммировать и вести учет каждого из них для отчетности, информационной панели или целей аудита? Вот быстрый скрипт, позволяющий сделать то же самое с использованием API Github.

Функции:

  1. get_repo_info(владелец, репо):

    • Принимает имя пользователя (владелец) и имя репозитория (репозиторий) владельца репозитория GitHub.
    • Отправляет запрос к API GitHub для получения информации о репозитории.
    • Возвращает информацию о репозитории в виде объекта JSON в случае успеха или None в случае ошибки.
  2. get_collaborators(collaborators_url):

    • Переносит URL-адрес в список соавторов репозитория.
    • Отправляет запрос на получение списка соавторов.
    • Возвращает список имен пользователей, соавторов, или пустой список в случае возникновения ошибки.
  3. get_languages(languages_url):

    • Принимает URL-адрес языковых данных репозитория.
    • Отправляет запрос на получение языков программирования, используемых в репозитории.
    • Возвращает список языков или пустой список в случае ошибки.
  4. get_open_issues(владелец, репо):

    • Принимает имя пользователя (владелец) и имя репозитория (repo) владельца репозитория.
    • Отправляет запрос на получение списка открытых задач в репозитории.
    • Возвращает открытые проблемы в формате JSON или печатает сообщение об ошибке, если есть проблема.
  5. get_repo_data(repo_url):

    • Принимает URL-адрес репозитория, анализирует его, чтобы получить значения владельца и репозитория, а затем вызывает другие функции для сбора различной информации о репозитории.
    • Компилирует информацию о репозитории, включая его имя, владельца, видимость, соавторов, языки, открытые проблемы и последнюю активность, и возвращает ее в структурированном формате (словаре).
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))
Заявление о выпуске Эта статья переиздана по адресу: https://dev.to/techbelle/how-to-retive-github-repository-data-using-python-59g3?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected], чтобы удалить его.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3