gau*_*mar 5 github github-api github-pages
我不使用 CURL,只使用 jQuery、AJAX 和 JS 从 Github API 获取信息。我正在使用这样的 URL 来获取有关问题的信息 - https://api.github.com/repos/jquery/jquery/issues
但是结果出现在多个页面中,因为 Github API 使用了分页功能。使用 CURL 时,我们会了解标头信息,其中还显示了结果页面的数量,但我没有使用 CURL,而是使用 jQuery 和 AJAX 直接从上述 API url 请求数据,因此我无法获取上述标头信息网址。我想使用上述 jquery/jquery 存储库和其他一些存储库的 URL 来计算打开和关闭的问题以及打开和关闭的 PR 的数量,但由于某些存储库存在很多问题,因此我在多个页面中得到结果.
我知道可以通过 URL 传递的“page”和“per_page”GET 参数以获取该结果页面并显示每个页面的多个结果(例如 - 100),例如 - https://api.github。 com/repos/jquery/jquery/issues?page=5&per_page=100
我不想手动检查结果页数。我希望我的脚本能够自动获取结果页面信息的数量,以便我可以创建一个循环并遍历所有页面以获取有关所有问题的信息。
例如,如果我知道结果页面的数量是 8,那么我可以创建一个这样的循环,以从所有结果页面获取有关所有问题的信息-
var number_of_pages=8;
var issues_information;
for(var nof=1; nof<=number_of_result_pages;nof++){
var URL='https://api.github.com/repos/jquery/jquery/issues?page='+nof+'&per_page=100';
$.getJSON(URL, function(json)){
issues_information=json;
}
}
Run Code Online (Sandbox Code Playgroud)
其中“issues_information”将获取从 Github API 获取的 JSON 数据。但我无法获得特定 API 调用的结果页数。
有人能告诉我如何从 Github API 获取请求的结果页数吗?请给出示例代码、URL 格式等。
从文档:
API 调用的链接标头中提供了有关分页的信息。例如,让我们向搜索 API 发出 curl 请求,以了解 Mozilla 项目使用短语 addClass 的次数:
Run Code Online (Sandbox Code Playgroud)curl -I "https://api.github.com/search/code?q=addClass+user:mozilla" The -I参数表示我们只关心标题,而不关心实际内容。在检查结果时,您会注意到 Link 标头中的一些信息,如下所示:
Run Code Online (Sandbox Code Playgroud)Link: <https://api.github.com/search/code?q=addClass+user%3Amozilla&page=2>; rel="next", <https://api.github.com/search/code?q=addClass+user%3Amozilla&page=34>; rel="last"让我们分解一下。rel="next" 表示下一页是 page=2。这是有道理的,因为默认情况下,所有分页查询都从第 1 页开始。 rel="last" 提供了更多信息,说明结果的最后一页在第 34 页。因此,我们还有 33 页关于 addClass 的信息我们可以消费。好的!
所以要迭代整个页面,只需继续请求页面,直到链接标题中没有“下一个”。
这是一些显示逻辑的python代码:
params = {'page': 1, 'per_page':100}
another_page = True
api = GH_API_URL+'orgs/'+org['login']+'/teams'
while another_page: #the list of teams is paginated
r = requests.get(api, params=params, auth=(username, password))
json_response = json.loads(r.text)
results.append(json_response)
if 'next' in r.links: #check if there is another page of organisations
api = r.links['next']['url']
else:
another_page=False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3698 次 |
| 最近记录: |