She*_*ang 2 python github-api python-2.7 python-requests
我想获取特定存储库的贡献者及其提交总数。我正在使用 Python 2.7 和 Requests 2.7.0 库来请求 GitHub API url,例如:“ https://api.github.com/repos/marcboeker/mongodb-utils/stats/contributors ”(这是一个随机链接,抱歉马克布克^_^)。
然而,当我第一次请求特定的 url 时,我得到了一个空的字典响应。第二次请求相同的 url 时,我可以获得包含我需要的信息的列表。这是我的代码:
import requests
contributors_url = 'https://api.github.com/repos/marcboeker/mongodb-utils/stats/contributors'
contributors = requests.get(contributors_url).json()
print contributors
Run Code Online (Sandbox Code Playgroud)
我还尝试使用 GitHub 身份验证并尝试使用 urllib2 库。我也在Python 3.4中尝试过。但我得到了同样的结果。我需要在第一次请求 URL 时获得正确的结果,而不是第二次或第三次。由于其他 GitHub API url 工作正常,请解释为什么它会发生在“贡献者”身上。


我相信这是由于生成统计数据需要进行计算造成的。API文档概述了这一点:
\n\n\n\n\n如果当您查询存储库\xe2\x80\x99s 统计信息时,数据尚未\xe2\x80\x99 被缓存,您\xe2\x80\x99 将收到响应
\n202;还会启动后台作业来开始编译这些统计数据。给作业一些时间来完成,然后再次提交请求。如果作业已完成,该请求将收到200响应正文中包含统计信息。
您可以检查请求中的状态代码以验证它是否为空响应:
\n\ncontributors_url = \'https://api.github.com/repos/marcboeker/mongodb-utils/stats/contributors\'\nrequest = requests.get(contributors_url)\nprint request.status_code\n
我在一个新的存储库上使用 Fiddler 对此进行了测试,并收到了202状态代码和一个空的 JSON 数组作为响应。所以我认为您需要检查该状态代码,然后在延迟后重试呼叫......