SendGrid Email Activity API日期范围异常及无分页支持问题咨询
问题1:日期范围查询返回超出范围的内容
- 你代码里
last_event_time的参数格式有误,SQL风格的时间戳必须用单引号包裹。修改后的代码如下:
start_time = '2024-06-19T00:00:00Z' end_time = '2024-06-19T23:59:59Z' response = sg_client.client.messages.get(query_params={ 'limit': 1000, # 先改成官方允许的最大值1000,设10万会被API自动截断 'last_event_time': f"BETWEEN TIMESTAMP '{start_time}' AND TIMESTAMP '{end_time}'", })
- 之前的代码缺少单引号,导致API无法正确解析时间范围,从而返回超出指定区间的内容。
问题2:全量获取指定时间范围内的所有消息
SendGrid Email Activity API不支持offset参数,需要通过基于时间的分页实现全量获取,具体操作如下:
- 设置合理的limit值:官方规定
limit最大值为1000,超过该值会被API自动调整为1000,建议直接设为1000以提升获取效率。 - 循环分页请求:每次请求后,取返回结果中最后一条记录的
last_event_time作为下一次请求的end_time(保持start_time不变),直到返回结果为空或数量小于limit,说明已获取全部数据。 - 示例代码:
from sendgrid import SendGridAPIClient def fetch_all_email_activities(api_key, start_time, initial_end_time): sg_client = SendGridAPIClient(api_key) all_activities = [] current_end_time = initial_end_time limit = 1000 while True: response = sg_client.client.messages.get(query_params={ 'limit': limit, 'last_event_time': f"BETWEEN TIMESTAMP '{start_time}' AND TIMESTAMP '{current_end_time}'", }) activities = response.body if not activities: break all_activities.extend(activities) # 更新下一次请求的结束时间,避免重复获取数据 current_end_time = activities[-1]['last_event_time'] # 返回结果数量不足limit,说明无更多数据 if len(activities) < limit: break return all_activities # 调用示例 start_time = '2024-06-19T00:00:00Z' initial_end_time = '2024-06-19T23:59:59Z' all_activities = fetch_all_email_activities(self._api_key, start_time, initial_end_time)
内容的提问来源于stack exchange,提问作者user1686620
相关产品推荐
相关产品推荐

