Zapier 从 Tsheets 数据在 Google 表格中创建多行

Posted

技术标签:

【中文标题】Zapier 从 Tsheets 数据在 Google 表格中创建多行【英文标题】:Zapier to create multiple rows in Google Sheet from Tsheets data 【发布时间】:2019-03-29 15:42:38 【问题描述】:

在 Zapier Zap 中,我使用 API GET 调用 Tsheets 来获取时间表列表。我想将每个时间表拆分为行项目,例如 Xero 发票中的行项目,因为我想将每个时间表中的项目数据保存到 Google 工作表中自己的行中。 (理想情况下,我想将行数据直接保存到 mysql 数据库,但我看到 Zapier 目前只支持一次保存多行的 Google 表格。)但是我不高兴。 我怀疑以下两个问题之一:

    Zapier 期望响应中的单词 lineitems 或 响应的格式不正确 - 我似乎有两个“结果”类别

在我设置 Google 表格电子表格行的步骤中,我没有选择逗号分隔的项目,如下图所示的示例所示: Add an action app that supports line items, and each item will be saved individually 图片来自此页面:https://zapier.com/blog/formatter-line-item-automation/,标题为“添加支持订单项的操作应用程序,每个项目将单独保存”对于我得到的内容,请参见照片 https://cdn.zapier.com/storage/photos/f055dcf11a4b11b86f912f9032780429.png 在从 API 返回数据的步骤中,文本响应显示在 https://cdn.zapier.com/storage/photos/33129fb7425cfae44be4a81533d6e892.png 如果我返回 json 数据,它是这样的:https://cdn.zapier.com/storage/photos/34da1b98f8941324c35befef8efe350d.png

任何人都可以确认我的怀疑是正确的,以及 1 还是 2 是可能的罪魁祸首。

这个链接Zapier - Catch Hook - JSON Array - Loop over each item in array 是否有可能引导我找到解决方案?看起来可能是这样,但我不知道作者是如何将其整合到他的 Zap 中的。

编辑:我从 API 返回的数据如下所示:


 "results": 
  "timesheets": 
   "11515534": 
    "id": 11515534,
    "user_id": 1260679,
    "jobcode_id": 11974818,
    "start": "2018-07-13T14:58:00+10:00",
    "end": "2018-07-13T14:58:00+10:00",
    "duration": 0,
    "date": "2018-07-13",
    "tz": 10,
    "tz_str": "Australia\/Brisbane",
    "type": "regular",
    "location": "(Brisbane, Queensland, AU?)",
    "on_the_clock": false,
    "locked": 0,
    "notes": "",
    "customfields": 
     "118516": "",
     "121680": "",
     "118530": "",
     "118518": "Field supplies, materials"
    ,
    "last_modified": "2018-07-13T04:59:27+00:00",
    "attached_files": [

    ]
   ,
   "11515652": 
    "id": 11515652,
    "user_id": 1260679,
    "jobcode_id": 11974830,
    "start": "2018-07-13T14:59:00+10:00",
    "end": "2018-07-13T14:59:00+10:00",
    "duration": 0,
    "date": "2018-07-13",
    "tz": 10,
    "tz_str": "Australia\/Brisbane",
    "type": "regular",
    "location": "(Brisbane, Queensland, AU?)",
    "on_the_clock": false,
    "locked": 0,
    "notes": "",
    "customfields": 
     "118516": "",
     "121680": "",
     "118530": ""
    ,
    "last_modified": "2018-07-13T05:00:30+00:00",
    "attached_files": [

    ]
   ,
   "39799840": 
    "id": 39799840,
    "user_id": 1260679,
    "jobcode_id": 19280104,
    "start": "2018-10-24T11:45:00+11:00",
    "end": "2018-10-24T12:00:00+11:00",
    "duration": 900,
    "date": "2018-10-24",
    "tz": 11,
    "tz_str": "Australia\/Brisbane",
    "type": "regular",
    "location": "(Sydney, New South Wales, AU?)",
    "on_the_clock": false,
    "locked": 0,
    "notes": "",
    "customfields": 
     "118516": "",
     "121680": "FP - Field plant Installation",
     "118530": "Site cleanup"
    ,
    "last_modified": "2018-10-24T05:56:27+00:00",
    "attached_files": [

    ]
   ,
   "39801850": 
    "id": 39801850,
    "user_id": 1260679,
    "jobcode_id": 19280204,
    "start": "2018-10-24T12:00:00+11:00",
    "end": "2018-10-24T13:45:00+11:00",
    "duration": 6300,
    "date": "2018-10-24",
    "tz": 11,
    "tz_str": "Australia\/Brisbane",
    "type": "regular",
    "location": "(Sydney, New South Wales, AU?)",
    "on_the_clock": false,
    "locked": 0,
    "notes": "",
    "customfields": 
     "118516": "",
     "121680": "OP - Plant, Vehicles",
     "118530": "Load\/Unload"
    ,
    "last_modified": "2018-10-24T05:57:04+00:00",
    "attached_files": [

    ]
   ,
   "40192757": 
    "id": 40192757,
    "user_id": 1260679,
    "jobcode_id": 19280110,
    "start": "2018-10-25T08:00:00+11:00",
    "end": "2018-10-25T10:00:00+11:00",
    "duration": 7200,
    "date": "2018-10-25",
    "tz": 11,
    "tz_str": "Australia\/Brisbane",
    "type": "regular",
    "location": "TSheets android App",
    "on_the_clock": false,
    "locked": 0,
    "notes": "From my mobile",
    "customfields": 
     "118516": "",
     "121680": "FW - Plant Assembly",
     "118530": "Panels"
    ,
    "last_modified": "2018-10-24T23:02:56+00:00",
    "attached_files": [

    ]
   ,
   "40193033": 
    "id": 40193033,
    "user_id": 1260679,
    "jobcode_id": 19280108,
    "start": "2018-10-25T10:00:00+11:00",
    "end": "2018-10-25T10:00:00+11:00",
    "duration": 0,
    "date": "2018-10-25",
    "tz": 11,
    "tz_str": "Australia\/Brisbane",
    "type": "regular",
    "location": "TSheets Android App",
    "on_the_clock": false,
    "locked": 0,
    "notes": "",
    "customfields": 
     "118516": "",
     "121680": "FW - Plant Assembly",
     "118530": "Panels"
    ,
    "last_modified": "2018-10-24T23:06:05+00:00",
    "attached_files": [

    ]
   
  
 ,
 "more": false

这是我的 Python 代码:https://imgur.com/a/8W1X1em

【问题讨论】:

【参考方案1】:

好吧,我想我已经为你解决了一些问题。您提供的示例 Zapier - Catch Hook - JSON Array - Loop over each item in array 绝对是正确的,但是,因为它依赖于 webhook,所以它可能对您不起作用,除非您可以从您的发票应用程序中发布数据。

注意:我使用 Python 编写代码,因此我的示例将使用 Python,也就是说这些示例几乎与代码无关,也可以在 javascript 中复制。 我设置了一个虚拟 Zap 来复制你的 Zap 目前正在发生的事情

# results = requests.get(url, headers=header)
# results = results.json()
# Dummy result data converted to JSON object after API GET request:
results =   
    "results" : 
        "timesheets" : 
            "timesheet_id_1" : 
                "data_1" : "data",
                "data_2" : "data",
                "data_3" : "data"
                ,
            "timesheet_id_2" : 
                "data_1" : "data",
                "data_2" : "data",
                "data_3" : "data"
                ,
            "timesheet_id_3" : 
                "data_1" : "data",
                "data_2" : "data",
                "data_3" : "data"
                
            
        
    

return results

进一步阅读here,以便 Zapier 映射它需要以数组形式接收数据的行项目。上面的输出是一个字典对象,Zapier 确实将这个字典中的值映射到以后可以访问的数据,但是它映射了整个字典,这就是为什么您将输出视为多个字段并且在我的 output 中复制的原因.您要做的是映射字典的子集 AND 将每个子集作为单独的输出提供。

您要做的是遍历结果字典对象的内部字段并在嵌套的“timesheet_id_n”上执行 zaps。为此,我们必须返回一个行项目列表,如上所述,行项目必须放入一个数组中。所以我实现这一点的代码如下:

# results = requests.get(url, headers=header)
# results = results.json()
# Dummy result data converted to JSON object after API GET request:
results =   
    "results" : 
        "timesheets" : 
            "timesheet_id_1" : 
                "data_1" : "data",
                "data_2" : "data",
                "data_3" : "data"
                ,
            "timesheet_id_2" : 
                "data_1" : "data",
                "data_2" : "data",
                "data_3" : "data"
                ,
            "timesheet_id_3" : 
                "data_1" : "data",
                "data_2" : "data",
                "data_3" : "data"
                
            
        
    

# Container for my line items. Each element in this list will be executed on separately
return_results = []

results = results.get("results")
results = results.get("timesheets")
for item in results:
    return_results.append("sheet_id" : item, "sheet_data" : results.get(item))

return return_results

return_results 的输出将是一个字典对象数组。由于这些字典对象在数组中,Zapier 会将它们视为行项目,另外因为每个行项目都是一个字典对象,Zapier 将自动映射每个值,以便它们可以在以后的操作步骤中独立使用。您可以在以下屏幕截图中的 trigger zap 输出中看到这一点:

output 1output 2output 3

希望这有帮助!

【讨论】:

Michael 感谢您的回复,这让我比以前更进一步。我让 Python 抓取我的数据,唉,目前只解析第一个数据项。我已编辑我的问题以包含从 API 返回的数据 你现在什么时候卡住了?是否有任何错误弹出? 没有错误,一切正常,但只返回一条记录:runtime_meta duration_ms 457 memory_used_mb 24 logs sheet_id 39785064 id 4ghY1Ra7WiCPEx6JW4oKe5pk9jD61vk5 sheet_data attach_files end tz_str Australia/Brisbane notes 由 IT 部门通过 PTO 输入工具添加。 jobcode_id 11767513 锁定 0 on_the_clock 错误开始 last_modified 2018-10-23T23:43:17+00:00 位置(悉尼,新南威尔士州,澳大利亚?)日期 2018-10-21 user_id 1260679 自定义字段 118516 118516 121680 类型手册 id 390785040888 tz 11 嗯,我能够准确地复制这些步骤并让它为我工作。你打开Zap了吗?当您测试时,它只会显示一个响应作为输出,当您打开它时,尽管它会执行,但您的 return_list 中有许多响应。我还看到您正在使用格式化程序操作作为您的后续步骤。您可能需要考虑尝试将其合并到您的代码步骤中,因为您可以为自己节省一些 Zaps。 啊哈,我确信这将是 Michael 的问题 - 在测试模式下运行它而不是打开 Zap。再次感谢你的帮助。我现在正在周末休息,所以直到星期一才尝试。是的,我仍处于使用 zap 的开发模式,后续步骤可能会在最终版本中消失。也感谢您提供减少 Zap 数量的提示。我从您的示例中学到的另一件事是如何在我的 Zaps 中包含示例数据以进行测试:)

以上是关于Zapier 从 Tsheets 数据在 Google 表格中创建多行的主要内容,如果未能解决你的问题,请参考以下文章

Zapier Zap 用于从条带中检索客户数据

从 Django 代码调用 Zapier 触发器

解析具有可读性的新闻 URL

从 Zapier 对 Monday.com API 进行身份验证

如何从 zapier 代码触发 webhook

Zapier:从电子表格到 Facebook 离线事件跟踪