如何使用python阅读API的下一页?

时间:2017-07-25 03:34:31

标签: python api pagination

我需要有关如何进行循环的帮助,所以每次发出GET请求时,它总是来自API的新页面。

我从获得第一个回复开始。它包含下一页next_key

的参数
{
  "result": [
    {
      ...,
      ...
    }
  ],
  "next_key": 123
 }

以下是我目前的尝试

import requests
import json

url = "https://flespi.io/gw/channels/all/messages"
headers = {"Authorization": "FlespiToken 23ggh45"}

def getFirst():
    data = {"limit_count":100, "limit_size":10000}
    params = {"data":json.dumps(data, separators=(",", ":"))}

    reqFirst = requests.get(url, params=params, headers=headers).json()
    return reqFirst["next_key"] ## this returns "123"

def getDataNext():
    data = {"limit_count":100, "limit_size":10000, "curr_key":getFirst()}
    params = {"data":json.dumps(data, separators=(",", ":"))}

    reqNext = requests.get(url, params=params, headers=headers)

    jsonData = reqNext.json()

    while True:
        if "next_key" in jsonData:
            data = {"limit_count":100, "limit_size":10000,"curr_key":jsonData["next_key"]}
            params = {"data":json.dumps(data, separators=(",", ":"))}

            req = requests.get(url, params=params, headers=headers).json()  ## this should do GET request for the third page and so on...

            print req["next_key"] # this returns "3321" which is the value for "next_key" in second page

        else:
            pass

getDataNext()

包含限制计数,限额大小和限制键的完整网址如下https://flespi.io/gw/channels/all/messages?data=%7B%22curr_key%22%123%2C%22limit_count%22%3A100%2C%22limit_size%22%3A10000%7D

如您所见,这只会返回jsonData["next_key"]的第二页。我想要做的是,对于每个GET请求,程序将读取next_key并将其放在下一个GET请求中。

我想在curr_key上使用增量,但键是随机的,我也不知道有多少页。

我认为必须有一个简单的解决方案,但显然我无法想到它。感谢您的帮助和建议。

1 个答案:

答案 0 :(得分:1)

试试这个

has_next_key = False
nextKey = ""

if "next_key" in jsonData:
    has_next_key = True
    nextKey = jsonData["next_key"]

while has_next_key:
    data = {"limit_count":100, "limit_size":10000,"curr_key":nextKey}
    params = {"data":json.dumps(data, separators=(",", ":"))}

    req = requests.get(url, params=params, headers=headers).json()  ## this should do GET request for the third page and so on...
    if "next_key" in req:
        nextKey = req["next_key"]
        print nextKey # this returns "3321" which is the value for "next_key" in second page
    else:
        has_next_key = False
        # no next_key, stop the loop