我在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中获取和响应的示例;
样本数据输入(获取请求)
json_key:访问未展平:是标头:内容类型:application / jsonSiteId:xxxAPI密钥:xxx名称:xxx网址:https://api.mindbodyonline.com/public/v6/client/clientvisits数据:限制:200开始日期:2015-01-01T00:00:00结束日期:2099-01-01T00:00:00客户编号:xxx偏移:0As_json:否
返回样品数据
访问:1:类别编号:xxxLastModifiedDateTime:0001-01-01T00:00:00Z化妆:假约会编号:0服务名称:约会性别偏好:无截止日期时间:2019-12-11T08:15:00客户编号:xxxLateCancelled:false动作:无服务编号:SiteId:xxx登录:true开始日期时间:2019-12-11T07:15:00员工编号:xLocationId:xWebSignup:假产品编号:约会状态:无ID:xxx名称:xxx2:类别编号:xxxLastModifiedDateTime:0001-01-01T00:00:00Z化妆:假约会编号:0服务名称:约会性别偏好:无结束日期时间:2019-12-11T09:30:00客户编号:xxxLateCancelled:false动作:无服务编号:SiteId:xxx登录:true开始日期时间:2019-12-11T08:30:00员工编号:xxxLocationId:xxWebSignup:假产品编号:约会状态:无ID:xxx名称:xxx
PaginationResponse:总结果:2页面大小:2RequestedOffset:0RequestedLimit:
我建议使用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=f"{base_url}?limit={limit}&offset={offset}", 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个单独的结果,则以下操作步骤将分别在每个步骤中执行。
希望这会有所帮助。我对您要达到的目标做了一些假设。让我知道是否有任何不清楚的地方,或者您还有其他问题。