”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > How to retrieve Github Repository Data using Python

How to retrieve Github Repository Data using Python

发布于2024-11-08
浏览:757

How to retrieve Github Repository Data using Python

Does your organization have (way) too many github repositories, and you need an easy way to summarize and keep record of what each one is for reporting, dashboard, or auditing purposes? Here's a quick script to do that very thing using the Github API.

Functions:

  1. get_repo_info(owner, repo):

    • Takes a GitHub repository owner's username (owner) and repository name (repo).
    • Sends a request to GitHub's API to get repository information.
    • Returns the repository's information as a JSON object if successful, or None if there is an error.
  2. get_collaborators(collaborators_url):

    • Takes the URL to the list of collaborators for a repository.
    • Sends a request to fetch the list of collaborators.
    • Returns a list of collaborator usernames, or an empty list if an error occurs.
  3. get_languages(languages_url):

    • Takes the URL to the repository's languages data.
    • Sends a request to retrieve the programming languages used in the repository.
    • Returns a list of languages, or an empty list if there is an error.
  4. get_open_issues(owner, repo):

    • Takes the repository owner's username (owner) and repository name (repo).
    • Sends a request to retrieve the list of open issues in the repository.
    • Returns the open issues in JSON format, or prints an error message if there's a problem.
  5. get_repo_data(repo_url):

    • Takes a repository URL, parses it to get the owner and repo values, and then calls the other functions to gather various information about the repository.
    • Compiles the repository information, including its name, owner, visibility, collaborators, languages, open issues, and last activity, and returns it in a structured format (a dictionary).
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-retrieve-github-repository-data-using-python-59g3?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • React 基础知识~渲染性能/ useTransition
    React 基础知识~渲染性能/ useTransition
    假设我们要显示大量数据,例如一万条数据,在将下一个值输入到输入字段时通常会出现延迟。 在这种情况下,当我们输入一个值时,屏幕会显示过滤后的数据。 但是,出现的一个问题是由于处理太多数据而延迟显示下一个操作,例如在输入字段中输入下一个值。 ·src/Example.js import { useSt...
    编程 发布于2024-11-08
  • PHP提交表单时如何防止多次插入?
    PHP提交表单时如何防止多次插入?
    防止 PHP 中表单提交时的多次插入当用户多次按下提交按钮时,可能会在提交表单时发生多次插入。这可能会导致意外的数据重复。有几种方法可以解决此问题:JavaScript 提交按钮禁用:此方法使用 JavaScript 禁用提交按钮后点击。但是,它并不可靠,因为可以在不使用按钮或禁用 JavaScri...
    编程 发布于2024-11-08
  • 探索 JavaScript 中真值与假值的核心...
    探索 JavaScript 中真值与假值的核心...
    在 JavaScript 中,真值是在布尔上下文中计算时被视为 true 的任何值。不虚假的值被认为是真实的。 真值示例: 任何非零数字 (1,-5,3.14) 非空字符串 ("hello" ) 空间值(" ") 对象 ({}, []) 布尔值...
    编程 发布于2024-11-08
  • 如何在 PHP 中抑制 \"htmlParseEntityRef: waiting \';\' in Entity\" 警告?
    如何在 PHP 中抑制 \"htmlParseEntityRef: waiting \';\' in Entity\" 警告?
    正在解析“htmlParseEntityRef:期待 ';' in Entity”警告将 HTML 内容加载到 DOMDocument 时,您可能会遇到警告“htmlParseEntityRef: waiting ';'在实体中。”此错误通常是由于加载内容中的 HTM...
    编程 发布于2024-11-08
  • 如何在 PHP 中根据与另一个 2D 数组的交集从 2D 数组中过滤行?
    如何在 PHP 中根据与另一个 2D 数组的交集从 2D 数组中过滤行?
    基于行交集过滤二维数组的行在 PHP 中,array_diff_assoc() 函数旨在查找两个数组之间的差异,同时对键值进行优先级排序对。然而,当使用此函数根据与另一个 2D 数组的交集来过滤 2D 数组中的行时,它可能并不总是产生预期的结果。理解问题问题的出现是由于由 array_diff_as...
    编程 发布于2024-11-08
  • SQLRAG:利用自然语言和法学硕士转变数据库交互
    SQLRAG:利用自然语言和法学硕士转变数据库交互
    在数据驱动的世界中,速度和洞察力的可访问性至关重要,SQLRAG 带来了一种与数据库交互的全新方法。通过利用大型语言模型 (LLM) 的强大功能,SQLRAG 使用户能够使用自然语言查询数据库,从而无需深厚的 SQL 知识。在这篇文章中,我们将深入探讨 SQLRAG 的工作原理、其主要功能,以及它如...
    编程 发布于2024-11-08
  • 哪些构建系统可以扩展 Go 的开发工作流程?
    哪些构建系统可以扩展 Go 的开发工作流程?
    Go 构建系统:扩展您的开发工作流程Go 是一种以其简单性和并发性而闻名的编程语言,已获得广泛的认可。随着开发项目的发展,对强大的构建系统来自动化构建、测试和部署过程的需求变得至关重要。但是哪些构建系统支持 Go 并增强其功能?Makefile:初始 Go 构建系统传统上,Go 依赖于与其源代码发行...
    编程 发布于2024-11-08
  • 如何在 JavaScript 中安全处理空值
    如何在 JavaScript 中安全处理空值
    JavaScript 中的空值检查使用 JavaScript 时,正确处理“空”值至关重要。但是,标准空检查可能并不总是按预期工作。让我们探讨原因并提供替代解决方案。了解 JavaScript 的 Null Check在 JavaScript 中,相等运算符 (==) 和严格相等运算符 (===)分...
    编程 发布于2024-11-08
  • 使用 AWS Lambda 为 Next.js 构建无服务器后端
    使用 AWS Lambda 为 Next.js 构建无服务器后端
    在不断发展的 Web 开发世界中,利用无服务器架构已经成为游戏规则的改变者,尤其是对于 Next.js 应用程序而言。通过集成 AWS Lambda,开发人员可以构建可扩展且高效的后端,而无需管理服务器的开销。在这篇文章中,我们将探讨如何使用 AWS Lambda 为您的 Next.js 应用程序...
    编程 发布于2024-11-08
  • 当你开始学习编程语言时会发生什么
    当你开始学习编程语言时会发生什么
    在数字时代,学习编程语言不仅是一种优势,而且是一种必要。无论您的目标是提升职业生涯、构建创新应用程序,还是只是更好地了解数字世界,编程技能都是不可或缺的。让我们深入探讨您应该踏上这一变革之旅的原因和方式。 学习编程语言的重要性 职业发展 根据美国劳工统计局的数据,从 ...
    编程 发布于2024-11-08
  • 如何使用匿名结构或联合编译 C 代码?
    如何使用匿名结构或联合编译 C 代码?
    使用匿名结构/联合编译 C 代码出现了关于如何使用匿名结构或联合编译 C 代码的问题,如C 具有使用联合的匿名字段。在 C 中,尝试使用包含匿名联合的命名结构创建类似的结构会导致编译错误。错误消息表明匿名联合和结构字段未在结构声明中声明。要在 C 中启用此功能,必须使用 -fms-extension...
    编程 发布于2024-11-08
  • 如何使用 OpenSSL 和 C++ 生成 SHA256 哈希值?
    如何使用 OpenSSL 和 C++ 生成 SHA256 哈希值?
    使用 OpenSSL 和 C 生成 SHA256 哈希 哈希是一种加密技术,用于生成数据的唯一指纹或摘要。对于 SHA256(安全哈希算法 2,256 位),此摘要是 256 位十六进制字符串。 SHA256 通常用于检查数据完整性、验证数字签名和安全存储密码。在本文中,我们将介绍如何使用 Open...
    编程 发布于2024-11-08
  • 探索软件工程师的就业市场
    探索软件工程师的就业市场
    Introduction In this article, we dive into the process of extracting and analyzing job data from LinkedIn, leveraging a combination of Python...
    编程 发布于2024-11-08
  • 在 React 中的选项卡之间发送数据。
    在 React 中的选项卡之间发送数据。
    本文将介绍如何在 React 全局组件之间发送数据,甚至在不同的浏览器选项卡中也是如此。 故事 想象您有一个项目列表,例如用户。 每个用户都可以在模态窗口中打开进行修改。 您没有任何后端订阅,这意味着如果用户发生变化,用户列表不会自动与后端同步。 因此,一旦用户的个人资料更新,您希望...
    编程 发布于2024-11-08
  • 如何从 WPF 中的非调度程序线程修改 ObservableCollection?
    如何从 WPF 中的非调度程序线程修改 ObservableCollection?
    “这种类型的 CollectionView 不支持从与调度程序线程不同的线程更改其 SourceCollection”问题描述A DataGrid 绑定异步填充的 ObservableCollection 会抛出错误,指出不允许从非 Dispatcher 线程对 SourceCollection 进...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3