You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何跟踪GitHub公共仓库/组织进度并导出指标至CSV?

如何通过GitHub API跟踪公共仓库指标并导出CSV

先澄清误解

GitHub的公开API对所有公共仓库开放访问权限,不需要你是仓库所有者。只要仓库设置为public,任何人都可以调用接口获取提交、PR、Issues等数据,仅受限于API请求速率限制(匿名请求60次/小时,认证后提升至5000次/小时)。


步骤1:准备API访问(可选但推荐)

如果需要定期批量获取数据,建议生成一个个人访问令牌(PAT):

  • 在GitHub账号设置中创建PAT,仅勾选public_repo权限即可(仅用于读取公共仓库数据)
  • 调用API时在请求头中携带令牌,能大幅提升请求速率限制,避免频繁触发限流

步骤2:获取各指标的API调用方式

以下是获取你需要的核心指标的具体API接口及参数:

  • 提交数(Commits):
    调用GET /repos/{owner}/{repo}/commits,通过since和until参数指定时间范围,接口返回分页数据,可通过响应头的Link字段获取总页数,进而计算总提交数(比遍历所有页更高效)。
  • 合并的PR数:
    调用GET /repos/{owner}/{repo}/pulls,添加参数state=closed和merged=true,再配合since/until筛选时间范围,同样通过分页信息统计总数。
  • 已解决的Issues数:
    调用GET /repos/{owner}/{repo}/issues,添加参数state=closed、type=issue(排除PR,因为PR在GitHub中属于特殊类型的Issue),再加上时间范围参数,统计结果总数。

步骤3:编写脚本自动导出CSV

用Python编写简单脚本,自动获取数据并导出为CSV,示例代码如下:

import requests
import csv

# 配置参数
REPO_OWNER = "目标仓库所有者用户名"
REPO_NAME = "目标仓库名称"
START_DATE = "2024-01-01T00:00:00Z"  # 开始时间,ISO 8601格式
END_DATE = "2024-06-30T23:59:59Z"    # 结束时间
# 可选:填入你的个人访问令牌提升速率限制
GITHUB_TOKEN = "your_personal_access_token_here"
headers = {"Authorization": f"token {GITHUB_TOKEN}"} if GITHUB_TOKEN else {}

def fetch_total_count(endpoint, params):
    """通用函数:获取分页接口的总数据量"""
    params["per_page"] = 1  # 每页只取1条,通过页数计算总数
    response = requests.get(endpoint, headers=headers, params=params)
    response.raise_for_status()  # 捕获请求错误
    
    if "Link" not in response.headers:
        return len(response.json())
    
    # 解析Link头获取最后一页页码
    last_link = [link for link in response.headers["Link"].split(",") if "rel=\"last\"" in link][0]
    last_page = int(last_link.split("page=")[1].split(">")[0])
    return last_page

# 获取各指标
commits_count = fetch_total_count(
    f"https://api.github.com/repos/{REPO_OWNER}/{REPO_NAME}/commits",
    {"since": START_DATE, "until": END_DATE}
)

merged_pr_count = fetch_total_count(
    f"https://api.github.com/repos/{REPO_OWNER}/{REPO_NAME}/pulls",
    {"state": "closed", "merged": "true", "since": START_DATE, "until": END_DATE}
)

resolved_issues_count = fetch_total_count(
    f"https://api.github.com/repos/{REPO_OWNER}/{REPO_NAME}/issues",
    {"state": "closed", "type": "issue", "since": START_DATE, "until": END_DATE}
)

# 导出到CSV
metrics_data = [
    ["日期范围", "提交数", "合并PR数", "已解决Issues数"],
    [f"{START_DATE} 至 {END_DATE}", commits_count, merged_pr_count, resolved_issues_count]
]

with open("github_repo_metrics.csv", "w", newline="", encoding="utf-8") as csv_file:
    writer = csv.writer(csv_file)
    writer.writerows(metrics_data)

print("指标已成功导出到 github_repo_metrics.csv")

步骤4:定期运行脚本

  • Windows:使用「任务计划程序」创建定时任务,指定脚本路径和运行周期
  • Linux/Mac:使用cron(Linux)或launchd(Mac)设置定时任务,例如每周一自动运行脚本更新数据

内容的提问来源于stack exchange,提问作者user9351801

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:02:25