Zapier中的JavaScript使用分页循环API调用

Zapier中的JavaScript使用分页循环API调用,javascript,python,json,api,zapier,Javascript,Python,Json,Api,Zapier,我在Zapier有一个GET请求,使用此API从预订系统MindBody获取瑜伽课程列表 Zapier确实有一个功能可以自动获得“所有”结果,即使最大限制是200,Zap也需要获得下一页的结果。默认情况下,我可以获得200个偏移量为0的结果 我需要Zapier得到前200,增加偏移量200,得到结果200-400,依此类推。最终结果可能是650个结果,所有这些结果组合在Zap中,然后我可以在另一个任务中使用(计数、求和、查找等) 如何使用Zapier代码任务使用以下参数递增循环/获取JSON列表

我在Zapier有一个GET请求,使用此API从预订系统MindBody获取瑜伽课程列表

Zapier确实有一个功能可以自动获得“所有”结果,即使最大限制是200,Zap也需要获得下一页的结果。默认情况下,我可以获得200个偏移量为0的结果

我需要Zapier得到前200,增加偏移量200,得到结果200-400,依此类推。最终结果可能是650个结果,所有这些结果组合在Zap中,然后我可以在另一个任务中使用(计数、求和、查找等)

如何使用Zapier代码任务使用以下参数递增循环/获取JSON列表中的所有项:

响应正文中返回的分页信息示例:

{ “分页响应”:{ “请求限制”:10, “请求补偿”:20, “页面大小”:10, “总结果”:128 }, “类别”:[ . . . ] }

今天在Zapier获得样品和回复

样本数据输入(获取请求)

json_键:访问 unflatten:是的 标题: 内容类型:application/json SiteId:xxx API密钥:xxx 姓名:xxx 网址: 数据: 限额:200 开始日期:2015-01-01T00:00:00 结束日期:2099-01-01T00:00:00 客户编号:xxx 偏移量:0 As_json:没有

返回的样本数据

访问: 1: 类别:xxx LastModifiedDateTime:0001-01-01T00:00:00Z 化妆:假 任命ID:0 服务名称: 任命性别参考:无 结束日期时间:2019-12-11T08:15:00 客户编号:xxx 迟到:错 行动:无 服务ID: SiteId:xxx 签名人:是的 开始日期:2019-12-11T07:15:00 斯塔夫:x 位置ID:x WebSignup:错误 ProductId: 任命状态:无 身份证号码:xxx 姓名:xxx 2: 类别:xxx LastModifiedDateTime:0001-01-01T00:00:00Z 化妆:假 任命ID:0 服务名称: 任命性别参考:无 结束日期时间:2019-12-11T09:30:00 客户编号:xxx 迟到:错 行动:无 服务ID: SiteId:xxx 签名人:是的 开始日期:2019-12-11T08:30:00 职员:xxx 地址ID:xx WebSignup:错误 ProductId: 任命状态:无 身份证号码:xxx 姓名:xxx

分页响应: 结果:2 页面大小:2 请求的偏移量:0 请求的限制:

更新日期:2019年12月19日: 1) 呼叫端点;具有查询参数; 开始日期:2015-01-01T00:00:00 结束日期:2099-01-01T00:00:00 偏移量:0 客户编号:XXX 限额:200 标题; 姓名:xxx SiteId:xxx Api密钥:xxx 内容类型:application/json

《邮差》中的回应样本: { “分页响应”:{ “请求限制”:200, “RequestedOffset”:0, “页面大小”:2, “总体结果”:2 }, “访问”:[ { “任命ID”:0, “任命性别参考”:“无”, “任命状态”:“无”, “ClassId”:xxx, “客户ID”:“xxx”, “StartDateTime”:“2019-04-27T09:45:00”, “EndDateTime”:“2019-04-27T10:45:00”, “Id”:xxx, “LastModifiedDateTime”:“0001-01-01T00:00:00Z”, “延迟取消”:错误, “LocationId”:1, “化妆”:假, “名称”:“瑜伽棒”, “ServiceId”:空, “SignedIn”:是的, “StaffId”:xxx, “WebSignup”:错误, “操作”:“无” }, { “任命ID”:0, “任命性别参考”:“无”, “任命状态”:“无”, “ClassId”:xxx, “客户ID”:“xxx”, “StartDateTime”:“2019-07-19T16:45:00”, “EndDateTime”:“2019-07-19T17:45:00”, “Id”:273726, “LastModifiedDateTime”:“0001-01-01T00:00:00Z”, “延迟取消”:错误, “LocationId”:1, “化妆”:假, “名称”:“冥想”, “ServiceId”:空, “SignedIn”:是的, “StaffId”:xxx, “WebSignup”:错误, “操作”:“无” } ] }


如果TotalResults=201或更大,则应将请求的偏移量设置为200并再次循环,依此类推。我在回复中需要的唯一数据是“SignedIn”,如果所有的ClientVisitions都收集在一起,我可以在以后的步骤中对其进行计数或求和。希望这有意义

我建议使用Zapier提供的Python代码模块来实现这一点。从您到目前为止所描述的内容来看,您似乎正在使用WebhooksZAP,它对于快速生成HTTP请求非常有用,但在微调方面可能有所欠缺

我不确定您希望使用什么触发器来执行这个zap流,所以我假设您希望它在每天一次的特定时间发生。所以我们使用调度程序zap作为触发器。Zapier将使用Python模块编写操作步骤代码。请参阅下面的代码:

导入请求
def发送请求(url):
标题={
“Api密钥”:“yourApiKey”,
“站点ID”:“您的站点ID”,
“授权”:“staffUserToken”
}
result=requests.get(url,headers=headers)
返回结果
def main():
偏移量=0
限额=50
总结果=0
类_数据=[]
尽管如此:
结果=发送请求(f“api.mindbodyonline.com/public/v6/ckass/classes?limit={limit}&offset={offset}”)
如果不是result.ok:#请求不正确
打破
result=result.json()
如果不是全部结果:
total_results=result.get('PaginationResponse',{}).get('TotalResults',0)
如果偏移量>=总结果:#我们已超过可用结果的总数
打破
temp\u class\u data=result.get('Classes'))
对于临时类数据中的数据:
class_data.append({
“ClassScheduleID”:data.get(“ClassScheduleID”),
“客户”:data.get(“客户”),
“MaxCapacity”:data.get(“MaxCapacity”),
“TotalBooked”:data.get(“To”)