首页 > 解决方案 > 从 TWILIO 的 HTTP GET REST API 响应中使用分页消息的最佳 Python 设计模式是什么?

问题描述

尝试实现 source_to_raw 以通过 python 脚本使用 Twilio API 响应。下面是我尝试过的示例代码。我希望应该有比这更好的方法。

我正在探索通过 Python 帮助程序库完成的选项,而没有任何模式选项,因为它仅适用于 raw_zone。我遇到了永无止境的'next_page_uri'的无限循环。Twilio 提供了 pageSize 限制,但无法确定“页面”的结尾,以便为我的代码中的循环和条件语句设计退出条件。有关 Python-AzureDatabricks 堆栈上的 Twilio 分页的任何帮助都会有很大帮助。

以下是示例代码和几个示例响应。

page_data = page_response(url,date,creds)
data.update(page_data)
while(page_data['next_page_uri']!=None):
    page_data = page_response(url,date,creds)
    data.update(page_data)
    next_page_url=data['next_page_uri']
    src_url='https://api.twilio.com'
    url=src_url+next_page_url
    print(url)```

Sample Responses:   
#response_0:
{
   "first_page_uri":"",
   "end":11111,
   "previous_page_uri":"/2010-04-01/..../",
   "messages":[{raw...data}]
   "next_page_uri":""/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json?start=2020-12-02PageSize=50&Page=1"
   "page":0
}  
#response_1:
{
   "first_page_uri":"",
   "end":49,
   "previous_page_uri":"",
   "messages":[{raw...data}]
   "next_page_uri":""/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json?start=2020-12-02PageSize=50&Page=2"
   "page":1
}

标签: pythonpaginationpython-requeststwilioazure-databricks

解决方案


我没有对此进行测试,但是您始终可以像以下代码一样进行一些递归:

def get_twillo_data(url, date, creds, data):
    _data = page_response(url, date, creds)
    data += _data['messages']
    next_page_uri = _data.get('next_page_uri')
    if next_page_uri:
        get_twillo_data(
            url = url + next_page_uri,
            date = date,
            creds = creds,
            data = data
        )
    else:
        return data

data = []

messages = get_twillo_data(
    url='https://api.twilio.com', 
    date='ur_date', 
    creds='ur_creds', 
    data = data
)

推荐阅读