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

问题描述 投票:0回答:1

我在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:

javascript python json api zapier
1个回答
0
投票

我建议使用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个单独的结果,则以下操作步骤将分别在每个步骤中执行。

希望这会有所帮助。我对您要达到的目标做了一些假设。让我知道是否有任何不清楚的地方,或者您还有其他问题。

© www.soinside.com 2019 - 2024. All rights reserved.