2015-04-08 15 views
3

我不使用CURL,只使用jQuery,AJAX和JS從Github API獲取信息。我使用這樣的URL來獲取有關問題的信息 - https://api.github.com/repos/jquery/jquery/issues如何獲取從Github API獲取的數據的結果頁面數量的請求?

但是自從Github API使用分頁功能以來,結果出現在多個頁面中。當使用CURL時,我們瞭解到頭部信息,其中也顯示了結果頁面的數量,但我沒有使用CURL並使用jQuery和AJAX直接從上面的API url請求數據,所以我無法獲取上面的頭部信息URL。我想要使​​用上面的URL爲jquery/jquery存儲庫和一些其他repositoris計數開放和封閉問題的數量,並打開和關閉PR,但由於某些存儲庫存在很多問題,因此我在多個頁面。

我知道的「頁」和「per_page」 GET可以通過URL傳遞到拿到結果頁面,並顯示了一些結果(例如 - 100)的參數每頁喜歡這個 - https://api.github.com/repos/jquery/jquery/issues?page=5&per_page=100

我不想手動檢查結果頁面的數量。我希望我的腳本自動獲取結果頁信息的數量,以便我可以創建循環並遍歷所有頁面以獲取有關所有問題的信息。

例如如果我知道結果頁面的數量是8,然後我可以創建這樣一個循環來獲取所有結果中的所有問題的信息pages-

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; 
    } 
} 

其中「issues_information」將得到JSON數據從Github API獲取。但是我無法獲得特定API調用的結果頁數。

有人可以告訴我如何從Github API獲取結果頁面的數量爲一個請求?請舉一個例子代碼,URL格式等

回答

0

docs:在API調用 的鏈接頭提供

約分頁信息。例如,讓我們做一個捲曲的請求到搜索API,以 找出Mozilla的項目有多少次用這個短語addClass:

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

參數表明我們只關心標題,而不是 實際內容。在檢查的結果,你會發現在連接頭,看起來像這樣一些 信息:

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 
相關問題