「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python を使用して Github リポジトリ データを取得する方法

Python を使用して Github リポジトリ データを取得する方法

2024 年 11 月 8 日に公開
ブラウズ:617

How to retrieve Github Repository Data using Python

あなたの組織には (非常に) 多くの github リポジトリがあり、レポート、ダッシュボード、または監査の目的で、それぞれが何であるかを要約して記録する簡単な方法が必要ですか?ここに、Github API を使用してまさにそのことを行うための簡単なスクリプトを示します。

機能:

  1. get_repo_info(所有者、リポジトリ):

    • GitHub リポジトリ所有者のユーザー名 (owner) とリポジトリ名 (repo) を取得します。
    • GitHub の API にリクエストを送信してリポジトリ情報を取得します。
    • 成功した場合はリポジトリの情報を JSON オブジェクトとして返し、エラーがあった場合は None を返します。
  2. get_collaborators(collaborators_url):

    • リポジトリのコラボレーターのリストへの URL を取得します。
    • コラボレーターのリストを取得するリクエストを送信します。
    • コラボレーターのユーザー名のリストを返します。エラーが発生した場合は空のリストを返します。
  3. get_langages(言語 URL):

    • リポジトリの言語データへの URL を取得します。
    • リポジトリで使用されているプログラミング言語を取得するリクエストを送信します。
    • 言語のリストを返します。エラーがある場合は空のリストを返します。
  4. get_open_issues(所有者、リポジトリ):

    • リポジトリ所有者のユーザー名 (owner) とリポジトリ名 (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-retrieve-github-repository-data-using-python-59g3?1 侵害がある場合は、[email protected] に連絡して削除してください。それ
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3