首页 > 解决方案 > 使用 PyGitHub 库获取成员的最后提交日期

问题描述

我正在开发一个 python 脚本,它要求我获取所有 GitHub 组织成员的列表,这些成员长时间未对任何组织存储库执行提交。借此,我们希望找到非活跃成员并将其从组织中删除

关于如何使用 PyGitHub 库获取成员上次提交日期的任何想法?

标签: pythongithub-api

解决方案


使用Search commit API并使用参数过滤您组织的 repo org

GET https://api.github.com/search/commits?q=[SEARCH REQUEST]

您需要使用标头Accept: application/vnd.github.cloak-preview才能使用此 API。以下给出了在特定组织拥有的存储库中为特定用户所做的所有提交,并按最近的 first 排序:

curl -s -H "Accept: application/vnd.github.cloak-preview" \
    https://api.github.com/search/commits?q=author:fgette%20org:BboxLab%20sort:author-date-desc

然后,您可以过滤该组织中最近提交的日期:

curl -s -H "Accept: application/vnd.github.cloak-preview" \
    https://api.github.com/search/commits?q=author:fgette%20org:BboxLab%20sort:author-date-desc | \
    jq -r '.items[0].commit.author.date'

使用,您将使用以下命令检查最近的提交是否低于截止日期(此处 < 12 个月后):

from github import Github
from datetime import date
from datetime import datetime
from dateutil.relativedelta import relativedelta

deadline = datetime.combine(
    date.today() + relativedelta(months=-12), 
    datetime.min.time()
)

g = Github("YOUR_TOKEN", per_page = 1)

commits = g.search_commits(
    query = 'author:fgette org:BboxLab sort:author-date-desc'
)

data = commits.get_page(0)

if (len(data) > 0):
    last_commit = data[0].commit.author.date
    print(f'last commit : {last_commit}')
    if (last_commit < deadline):
        print("too old :(")
    else:
        print("ok :)")

输出 :

最后一次提交:2019-03-06 15:29:26

太老 :(


推荐阅读