我在Zapier中有一个GET请求,使用该API从预定系统MindBody获取瑜伽课程列表; https://developers.mindbodyonline.com/PublicDocumentation/V6#get-classes
Zapier确实具有自动获取“所有”结果的功能,即使最大限制为200,Zap也需要获取下一页结果。默认情况下,我可以得到200个结果的限制,偏移量为0。
我需要Zapier来获得前200个,将偏移量增加200个,将结果获得200-400,依此类推。最终结果可能是将650个结果全部合并到Zap中,然后我可以将其用于其他任务(计数,求和,查找等)
如何使用Zapier Code任务使用以下参数以增量方式循环/获取JSON列表中的所有项目:
在响应正文中返回的示例分页信息:
https://developers.mindbodyonline.com/PublicDocumentation/V6#pagination
{ “ PaginationResponse”:{ “ RequestedLimit”:10, “ RequestedOffset”:20, “ PageSize”:10, “总结果”:128 }, “类别”:[ 。 。 。 ] }
今天在Zapier中采样GET和响应;
样品数据输入(获取请求)
json_key:访问 未展平:是 标头: 内容类型:application / json SiteId:xxx API密钥:xxx 名称:xxx 网址:https://api.mindbodyonline.com/public/v6/client/clientvisits 数据: 限制:200 开始日期:2015-01-01T00:00:00 结束日期:2099-01-01T00:00:00 客户编号:xxx 偏移:0 As_json:否
返回了样品数据
访问: 1: 类别编号:xxx LastModifiedDateTime:0001-01-01T00:00:00Z 化妆:假 约会编号:0 服务名称: 约会性别偏好:无 截止日期时间:2019-12-11T08:15:00 客户编号:xxx LateCancelled:false 动作:无 服务编号: SiteId:xxx 登录:true 开始日期时间:2019-12-11T07:15:00 员工编号:x LocationId:x WebSignup:假 产品编号: 约会状态:无 ID:xxx 名称:xxx 2: 类别编号:xxx LastModifiedDateTime:0001-01-01T00:00:00Z 化妆:假 约会编号:0 服务名称: 约会性别偏好:无 结束日期时间:2019-12-11T09:30:00 客户编号:xxx LateCancelled:false 动作:无 服务编号: SiteId:xxx 登录:true 开始日期时间:2019-12-11T08:30:00 员工编号:xxx LocationId:xx WebSignup:假 产品编号: 约会状态:无 ID:xxx 名称:xxx
分页响应: 总结果:2 页面大小:2 RequestedOffset:0 RequestedLimit:
更新12/19/2019: 1)呼叫端点; https://api.mindbodyonline.com/public/v6/client/clientvisits带有查询参数; 开始日期:2015-01-01T00:00:00 截止日期:2099-01-01T00:00:00 偏移量:0 客户编号:XXX 上限:200 标头; 名称:xxx SiteId:xxx api键:xxx 内容类型:application / json
邮递员中的样本回复: { “ PaginationResponse”:{ “ RequestedLimit”:200, “ RequestedOffset”:0, “ PageSize”:2 “总计结果”:2 }, “访问”:[ { “ AppointmentId”:0, “ AppointmentGenderPreference”:“无”, “ AppointmentStatus”:“无”, “ ClassId”:xxx, “ ClientId”:“ xxx”, “ StartDateTime”:“ 2019-04-27T09:45:00”, “ EndDateTime”:“ 2019-04-27T10:45:00”, “ Id”:xxx, “ LastModifiedDateTime”:“ 0001-01-01T00:00:00Z”, “ LateCancelled”:否, “ LocationId”:1 “彩妆”:假, “ Name”:“ Yoga Barre”, “ ServiceId”:null, “ SignedIn”:是的, “ StaffId”:xxx, “ WebSignup”:否, “动作”:“无” }, { “ AppointmentId”:0, “ AppointmentGenderPreference”:“无”, “ AppointmentStatus”:“无”, “ ClassId”:xxx, “ ClientId”:“ xxx”, “ StartDateTime”:“ 2019-07-19T16:45:00”, “ EndDateTime”:“ 2019-07-19T17:45:00”, “ Id”:273726, “ LastModifiedDateTime”:“ 0001-01-01T00:00:00Z”, “ LateCancelled”:否, “ LocationId”:1 “彩妆”:假, “名称”:“冥想”, “ ServiceId”:null, “ SignedIn”:是的, “ StaffId”:xxx, “ WebSignup”:否, “动作”:“无” } ] }
如果TotalResults = 201或更大,则应将请求的偏移量设置为200并再次循环,依此类推。我在响应中唯一需要的数据是“ SignedIn”,如果将所有ClientVisits收集在一起,则可以在以后的步骤中进行zapier计数或求和。希望有道理!
答案 0 :(得分:1)
我建议使用Zapier提供的Python代码模块来实现此目的。从到目前为止的描述来看,似乎您正在使用webhooks zap,这对于快速发出HTTP请求非常有用,但可能缺少微调方面。
我不确定您要使用哪个触发器来执行此zap流,因此我仅假设您希望它在每天的特定时间发生一次。因此,我们将调度程序zap用作触发器。 Zapier将使用Python模块对操作步骤进行编码。请参见下面的代码:
import requests
def send_request(url):
headers = {
"Api-Key" : "yourApiKey",
"SiteId" : "yourSiteID",
"Authorization" : "staffUserToken"
}
result = requests.get(url, headers=headers)
return result
def main():
offset = 0
limit = 50
total_results = 0
class_data = []
while True:
result = send_request(f"api.mindbodyonline.com/public/v6/ckass/classes?limit={limit}&offset={offset}")
if not result.ok: # Bad request
break
result = result.json()
if not total_results:
total_results = result.get('PaginationResponse', {}).get('TotalResults', 0)
if offset >= total_results: # We have exceeded the total number of results available
break
temp_class_data = result.get('Classes')
for data in temp_class_data:
class_data.append({
"ClassScheduleID" : data.get("ClassScheduleID"),
"Clients" : data.get("Clients"),
"MaxCapacity" : data.get("MaxCapacity"),
"TotalBooked" : data.get("TotalBooked")
})
offset += limit
return class_data
return main()
使用Python的请求库,您可以制定自己的HTTP请求。我们可以使用while循环对结果进行分页,以增加偏移量变量。我不使用此服务,因此我选择了一些任意数据点以返回下一步要使用的任何步骤。使用上面的代码,我将返回字典对象的列表。因此,任何后续操作步骤都将对每个唯一结果执行。因此,如果在运行上述代码后,我的class_data
列表包含3个单独的结果,则以下操作步骤将分别对每个步骤执行。
希望这会有所帮助。我对您要达到的目标做了一些假设。让我知道不清楚的地方还是有其他疑问。