如何使用 GitHub API 获取 GitHub 存储库的分叉数?

med*_*ifi 3 fork github-api

我使用 Github API V3 来获取存储库的分叉计数,我使用:

GET /repos/:owner/:repo/forks
Run Code Online (Sandbox Code Playgroud)

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

只有我我不需要所有这些信息,我需要的只是叉子的数量。
有没有办法只获得叉子的数量?

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

Von*_*onC 6

您可以尝试使用搜索查询。

例如,对于我的存储库VonC/b2d,我将使用:

https://api.github.com/search/repositories?q=user%3AVonC+repo%3Ab2d+b2d

json 答案给了我一个"forks_count": 5

这是一个超过 4000 个分叉的结果(仅考虑第一个结果,即“ full_name”实际上是“ strongloop/express”的结果)

https://api.github.com/search/repositories?q=user%3Astrongloop+repo%3Aexpress+express

"forks_count": 4114,
Run Code Online (Sandbox Code Playgroud)


小智 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)
Run Code Online (Sandbox Code Playgroud)