如何获取从Github API获取的数据的结果页数?

时间:2015-04-08 14:57:08

标签: github github-api github-pages

我没有使用CURL,只使用jQuery,AJAX和JS从Github API获取信息。我使用这样的网址来获取有关问题的信息 - https://api.github.com/repos/jquery/jquery/issues

但是由于Github API使用分页功能,结果会出现在多个页面中。当使用CURL时,我们了解了结果页面数量也显示的标题信息,但我没有使用CURL并使用jQuery和AJAX直接从上面的API url请求数据,所以我无法得到上面的标题信息URL。我想使用上面的jquery / jquery存储库和其他一些存储库来计算打开和关闭的问题以及打开和关闭的PR的数量,但是由于某些存储库存在很多问题,我得到多个页面的结果

我知道"页面"和" per_page" GET参数,可通过URL传递以获取该结果页面并显示每页的多个结果(例如 - 100),如下所示 - https://api.github.com/repos/jquery/jquery/issues?page=5&per_page=100

我不想手动检查结果页数。我希望我的脚本自动获取结果页面信息的数量,以便我可以创建一个循环并遍历所有页面以获取有关所有问题的信息。

e.g。如果我知道结果页面的数量是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;
    }
}

where&#34; issues_information&#34;将获取从Github API获取的JSON数据。但我无法得到特定API调用的结果页数。

有人可以告诉我如何从Github API获取请求的结果页数吗?请提供示例代码,URL格式等。

1 个答案:

答案 0 :(得分:2)

来自docs

  

有关分页的信息在API的链接头中提供   呼叫。例如,让我们向搜索API发出curl请求   找出Mozilla项目使用短语addClass的次数:

curl -I "https://api.github.com/search/code?q=addClass+user:mozilla" The -I
     

参数表示我们只关心标题,而不是   实际内容。在检查结果时,你会注意到一些   Link标头中的信息如下所示:

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