2015-08-08 78 views
3

我正在使用api從網站獲取訂單。問題是一次只能提取20個訂單。我想通了,我需要使用分頁迭代器,但不知道使用它。如何一次獲取所有訂單。使用python請求獲取所有頁面

我的代碼:

def search_orders(self): 
    headers = {'Authorization':'Bearer %s' % self.token,'Content-Type':'application/json',} 
    url = "https://api.flipkart.net/sellers/orders/search" 
    filter = {"filter": {"states": ["APPROVED","PACKED"],},} 
    return requests.post(url, data=json.dumps(filter), headers=headers) 

這裏是一個文檔的鏈接。

Documentation

回答

5

你需要做的文檔建議 -

的搜索API的第一個調用返回基於pageSize的值結果的數量有限。 調用響應的nextPageURL字段中返回的URL將獲取搜索結果的後續頁面。

nextPageUrl - 字符串 - 此URL上的GET調用獲取下一頁結果。不存在的最後一頁

(重點煤礦)

您可以使用response.json()獲得響應的JSON。然後你可以檢查標誌 - hasMore - 看看是否還有更多,使用requests.get()得到下一頁的響應,並繼續這樣做直到hasMore爲假。示例 -

def search_orders(self): 
    headers = {'Authorization':'Bearer %s' % self.token,'Content-Type':'application/json',} 
    url = "https://api.flipkart.net/sellers/orders/search" 
    filter = {"filter": {"states": ["APPROVED","PACKED"],},} 
    s = requests.Session() 
    response = s.post(url, data=json.dumps(filter), headers=headers) 
    orderList = [] 
    resp_json = response.json() 
    orderList.append(resp_json["orderItems"]) 
    while resp_json.get('hasMore') == True: 
     response = s.get('"https://api.flipkart.net/sellers{0}'.format(resp_json['nextPageUrl'])) 
     resp_json = response.json() 
     orderList.append(resp_json["orderItems"]) 
    return orderList 

上述代碼應返回完整的訂單列表。

+0

「也許你的意思是http:// {0}?」.format(url)) requests.exceptions.MissingSchema:無效的URL賦予此錯誤 –

+0

噢好吧對不起,不能測試,因爲沒有所需的信息進行郵政通話。在我的答案中更新了它。 –

+0

raise InvalidURL(「Invalid URL%r:No host supplied」%url) –