Python查询限制为300个结果,如何添加分页来更新pandas表

时间:2018-01-12 09:44:54

标签: python api pandas pagination

我正在使用Mailgun API获取有关特定事件发送的电子邮件数量的一些数据,然后是主题和收件人等消息详细信息

响应限制为300,但我需要数千

我知道我需要使用分页,但我不知道如何使用它。我想它会是这样的:

nextUrl = status['paging']['next']
    data = requests.get(nextUrl, auth=("api", API_KEY), params ={"limit":300})

到目前为止,这是我的代码:

import requests
import json
import pandas as pd

delivered = requests.get(
        "https://api.mailgun.net/v3/#",
        auth=("api", "key-#"),
        params={"event" : "delivered",
                "limit" : 300}) 

raw = delivered.json()
items = raw['items']

message_elements = []

for row in items:
    message = row['message']
    message_elements.append(message)

events = []

for row in items:
    event = row['event']
    events.append(event)

message_values = []

for row in message_elements:
    message_details = row['headers']

    message_values.append(message_details)

data = pd.DataFrame(message_values)

data['event'] = events
data

在创建此表时:

enter image description here

现在这个表正是我想要的,但我不想限于300个结果。我可能需要成千上万的

有人可以告诉我如何使用分页来做到这一点吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

documentation表示' previous-url'和' next-url'总是回来。

  

...始终返回下一页和上一页的网址,即使检索其中一个网页也没有意义。有两种情况:第一个结果页面的上一页URL和最后一个结果页面的下一页URL;请求这些URL始终返回空结果页面。 ...

所以,看起来你必须重复拨打电话,例如这样的事情。注意:这是伪代码,只是一个想法:

url = "https://api.mailgun.net/v3/#"
last_next_url = None
while url is not last_next_url:
    delivered = requests.get(url,
    auth=("api", "key-#"),
    params={"event" : "delivered",
            "limit" : 300}) 
    ...
    # TODO: i'm not sure about HTTP response code here:
    if delivered.status >= 200 and delivered.status < 300: 
        url = raw['next_page_url']