You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Mailgun API查询实现分页以突破300条结果限制?

实现Mailgun API分页获取所有已送达事件数据

你的思路完全正确!Mailgun API的分页机制就是通过响应返回的paging.next链接来迭代获取下一页数据的。咱们只需要用一个循环,不断请求下一页直到没有更多数据为止,就能拿到所有你需要的成千上万条记录。

下面是修改后的完整代码,我帮你加上了分页逻辑,同时保留了你原来的DataFrame处理逻辑:

import requests
import json
import pandas as pd

# 配置你的Mailgun信息
DOMAIN = "你的域名"  # 替换成你的Mailgun域名,比如example.com
API_KEY = "你的API密钥"  # 替换成你的真实API密钥
BASE_URL = f"https://api.mailgun.net/v3/{DOMAIN}/events"

# 初始化存储所有数据的列表
all_items = []
# 初始请求URL和参数
current_url = BASE_URL
params = {"event": "delivered", "limit": 300}

# 分页循环:直到没有下一页为止
while current_url:
    # 发送请求
    response = requests.get(current_url, auth=("api", API_KEY), params=params)
    response.raise_for_status()  # 如果请求失败,抛出异常方便排查
    raw_data = response.json()
    
    # 将当前页的items添加到总列表
    all_items.extend(raw_data['items'])
    
    # 检查是否有下一页链接
    current_url = raw_data.get('paging', {}).get('next')
    # 注意:拿到next链接后,不需要再传params了,因为next链接已经包含了所有必要参数(包括分页游标和limit)
    params = {}  # 清空参数,避免重复传递

# 接下来是你原来的数据处理逻辑,只是把items换成all_items
message_elements = []
events = []
for row in all_items:
    message_elements.append(row['message'])
    events.append(row['event'])

message_values = []
for row in message_elements:
    message_values.append(row['headers'])

# 生成DataFrame
data = pd.DataFrame(message_values)
data['event'] = events
print(data)

关键说明:

  • 循环终止条件:当raw_data['paging'].get('next')返回None时,说明已经没有更多数据,循环结束。
  • 参数处理:第一次请求需要传event和limit参数,但后续请求next链接已经包含了分页所需的游标(比如page或者cursor参数),所以不需要再重复传原参数,直接清空params即可。
  • 异常处理:添加了response.raise_for_status(),如果请求返回错误状态码(比如401权限错误、404域名错误),会直接抛出异常,方便你排查问题。
  • 数据合并:用extend()方法把每一页的items合并到总列表,而不是append(),这样不会产生嵌套列表。

这样修改后,代码就会自动遍历所有分页,把所有已送达事件的数据都收集起来,最后生成符合你需求的DataFrame。

内容的提问来源于stack exchange,提问作者SuperSecretAndNotSafeFromWork

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:59:25