如何使用 GitHub API 获取 GitHub 仓库的分叉数?
How to get the number of forks of a GitHub repo with the GitHub API?
我使用 Github API V3 来获取存储库的复刻计数,我使用:
GET /repos/:owner/:repo/forks
请求只给我带来 30 个结果,即使存储库包含更多结果,我搜索了一下,发现由于内存限制 API return 每页只有 30 个结果,并且如果我想要下一个结果,我必须指定页数。
只有我,我不需要所有这些信息,我只需要叉子的数量。
有什么办法可以只得到叉子的数量吗?
因为如果我开始每页循环一页,如果存储库包含数千个结果,我的脚本就有崩溃的风险。
您可以尝试使用搜索查询。
例如,对于我的回购 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,
我有一份工作,我需要 将所有分支作为 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)
我使用 Github API V3 来获取存储库的复刻计数,我使用:
GET /repos/:owner/:repo/forks
请求只给我带来 30 个结果,即使存储库包含更多结果,我搜索了一下,发现由于内存限制 API return 每页只有 30 个结果,并且如果我想要下一个结果,我必须指定页数。
只有我,我不需要所有这些信息,我只需要叉子的数量。
有什么办法可以只得到叉子的数量吗?
因为如果我开始每页循环一页,如果存储库包含数千个结果,我的脚本就有崩溃的风险。
您可以尝试使用搜索查询。
例如,对于我的回购 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,
我有一份工作,我需要 将所有分支作为 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)