如何为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
相关产品推荐
相关产品推荐

