在While循环中捕获空列表

2024-10-01 04:58:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试通过基于光标的分页来获取订户列表。这是我第一次使用基于光标的分页,所以我可能过于复杂了&;如果是这样的话,我希望你能指认出来

以下是我的函数供参考:

def get_subscribers():
    subscribers = [] # Create empty list for appending collected

    url = 'https://api.twitch.tv/helix/subscriptions'

    token = refresh_token(config.refresh_token)

    headers = {
        'Client-id':config.client_id,
        'Authorization': 'Bearer {}'.format(token)
    }

    params = {
        'broadcaster_id':config.channel_id,
    }

    req = requests.request('GET', url, params=params, headers=headers)
    response = req.json()
    subs = response['data']
    next = response['pagination']['cursor']
    for sub in subs:
        print('Appending {0} to Subscriber List.'.format(sub['user_name']))
        subscribers.append(sub)

    while subs is not None:
        params = {
            'broadcaster_id':config.channel_id,
            'after':next
        }

        req = requests.request('GET', url, params=params, headers=headers)
        response = req.json()
        subs = response['data']
        next = response['pagination']['cursor']

        for sub in subs:
            print('Appending {0} to Subscriber List.'.format(sub['user_name']))
            subscribers.append(sub)

    return subscribers

以下是第一个请求的响应示例:

{
  "data": [
    {
      "broadcaster_id": "67961343",
      "broadcaster_name": "xJOKERx",
      "is_gift": false,
      "plan_name": "Channel Subscription (xJOKERx): $24.99 Sub",
      "tier": "3000",
      "user_id": "67961343",
      "user_name": "xJOKERx"
    },
    {
      "broadcaster_id": "67961343",
      "broadcaster_name": "xJOKERx",
      "is_gift": false,
      "plan_name": "Channel Subscription (xJOKERx)",
      "tier": "1000",
      "user_id": "147283917",
      "user_name": "killming"
    },
    {
      "broadcaster_id": "67961343",
      "broadcaster_name": "xJOKERx",
      "is_gift": false,
      "plan_name": "Channel Subscription (xJOKERx)",
      "tier": "1000",
      "user_id": "100417968",
      "user_name": "King_gilbster"
    },
    {
      "broadcaster_id": "67961343",
      "broadcaster_name": "xJOKERx",
      "is_gift": false,
      "plan_name": "Channel Subscription (xJOKERx)",
      "tier": "1000",
      "user_id": "81318617",
      "user_name": "ParagonWing"
    },
  ],
  "pagination": {
    "cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6MjB9fQ"
  }
}

以下是“最终”页面上的示例回复:

{
  "data": [],
  "pagination": {
    "cursor": "eyJiIjp7Ik9mZnNldCI6MTYwfSwiYSI6eyJPZmZzZXQiOjIwMH19"
  }
}

所以我要做的是发出我的初始请求,然后在列表is not None继续发出请求的同时使用最后一个游标作为偏移量

问题是这个列表从来都不是None。为了停止while循环,可以满足什么条件

我也愿意接受不需要while循环的替代方案


Tags: nametokenidconfigdataisresponseparams