如何使用GitHub API获取GitHub存储库的fork数量?

5

我使用Github API V3获取一个仓库的fork数量,代码如下:

GET /repos/:owner/:repo/forks

即使一个仓库包含更多的结果,该请求也只会给我带来30个结果。我查了一下谷歌发现,由于内存限制,API每页只返回30个结果,如果我想要下一页的结果,我必须指定页数。

只有我不需要所有这些信息,我只需要收藏的数量。
有没有办法只获取收藏的数量?

因为如果我开始循环每一页,我的脚本可能会在一个包含数千个结果的仓库中崩溃。

2个回答

6

5
我曾经有一份工作,需要获取一个GitHub项目的所有分支作为git-remotes。我编写了一个简单的Python脚本https://gist.github.com/urpylka/9a404991b28aeff006a34fb64da12de4。程序的基础是递归函数,用于获取分支的分支。但我遇到了同样的问题(GitHub API只返回了30个项目)。我通过添加?page=1的增量和添加对来自服务器的空响应的检查来解决了这个问题。
def get_fork(username, repo, forks, auth=None):

page = 1
while 1:

    r = None
    request = "https://api.github.com/repos/{}/{}/forks?page={}".format(username, repo, page)
    if auth is None: r = requests.get(request)
    else: r = requests.get(request, auth=(auth['login'], auth['secret']))
    j = r.json()
    r.close()

    if 'message' in j:
        print("username: {}, repo: {}".format(username, repo))
        print(j['message'] + " " + j['documentation_url'])
        if str(j['message']) == "Not Found": break
        else: exit(1)

    if len(j) == 0: break
    else: page += 1

    for item in j:
        forks.append({'user': item['owner']['login'], 'repo': item['name']})

        if auth is None:
            get_fork(item['owner']['login'], item['name'], forks)
        else:
            get_fork(item['owner']['login'], item['name'], forks, auth)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接