Zapier:代码未返回预期的所有值

Posted

技术标签:

【中文标题】Zapier:代码未返回预期的所有值【英文标题】:Zapier: Code not returning all values expected 【发布时间】:2017-12-16 01:58:06 【问题描述】:

我正在使用 Zapier 编写的代码,但无法判断我的正则表达式是否错误或其他部分错误(我认为是后者)

我正在提取一个 URL,这个 URL 有几个 9 位的 ID,它们被附加到 URL 的末尾。有人告诉我尝试提取这些 ID 并重建 URL,以便我们可以为每个它们发布 API 调用。

我是 Python 新手,但到目前为止我有这个,但它只返回前 9 位 ID,我希望有一个数组,这样我就可以用每个特定的 ID 重建 URL。到目前为止,这是我的代码:

import re
    urls = re.findall(r'\b\d+\b', input_data['input'])
         return [
             'url': url for url in urls
]

输入 _data 将是 "https://api.helpscout.net/v1/conversations/123456789,098765432.json"

正如我所说,它只返回第一个 ID。我知道我没有重建 URL 的代码或任何试图一次一步迈出的东西!

我的正则表达式不正确还是我返回它们的方式不正确?谢谢!

【问题讨论】:

如果我点击链接,我会得到 400。 【参考方案1】:

David 来自 Zapier 平台团队。我有好消息和坏消息。

好消息是,您的正则表达式有效!所以那里没有汗水。不利的一面是,您遇到了一个带有代码步骤的奇怪角落案例。它没有记录在案,因为我们不鼓励使用它(正如你所知道的那样,这很令人困惑)。当您从代码步骤返回数组时,它的功能类似于触发器。也就是说,为数组中的每个项目运行后续步骤(但 UI 仅显示第一个)。

如果这是所需的行为,您可以放心地忽略奇怪的测试并完成 zap。如果您不想扇出,则应该解析出逗号分隔的字符串并稍后对其进行操作。

如果您需要更多指导,请让我了解您的其他操作,我可以从中提供建议。

旁注,您看到上述 Willem 函数的错误消息的原因是您的 python 代码必须将 output 变量设置为一个值或返回一个对象。 return get_digits(input_data['input'])output = get_digits(input_data['input']) 中的任何一个都应该可以工作。

【讨论】:

嗨,大卫,对不起,我错过了这条评论!谢谢你回到我身旁!所以,如果我在这之后使用一个操作步骤,这是一个 Python 代码步骤,根据我的数组中返回的每个 URL 进行 POST 调用,你是说它实际上会在我的 Python 代码部分中运行通过数组吗?我今天可以试一试,让你知道我的进展如何。谢谢! 没错!如果步骤 A 返回 5 个 url 并且步骤 B 向该 url 发出 post 请求,则当它真正运行时,每次触发 A 时,步骤 B 将运行 5 次。请小心,因为这可能会很快通过您的任务分配!【参考方案2】:

代码在我的机器上运行正常:

import re

def get_digits(s):
    return ['url':url for url in re.findall(r'\b\d+\b',s)]

如果我随后使用示例输入调用它,我会得到:

>>> get_digits("https://api.helpscout.net/v1/conversations/123456789,098765432.json")
['url': '123456789', 'url': '098765432']

所以一个包含两个字典的列表。每个字典都包含一个键,即'url',它与包含一个或多个数字的字符串相关联。

如果您只想匹配九位数字序列,您可以使正则表达式更具限制性(但这只能减少匹配数):

import re

def get_digits(s):
    return ['url':url for url in re.findall(r'\b\d9\b',s)]

【讨论】:

嗨,Willem,感谢您收紧正则表达式!问题是当使用 Zapier 的 Zapier 部分的 Code 时,它​​对事情非常挑剔,并不断告诉我“请定义输出或早点返回”在 Zapier 中编写代码令人沮丧,但不幸的是,在这种情况下我别无选择!跨度> 【参考方案3】:

真是令人沮丧,我决定尝试 javascript 并且多种方法都没有输出任何东西

<script>
var str = "https://api.helpscout.net/v1/conversations/382411278,374879346,374879343.json";
var tickets = str.match(/\d9/g);
for(var i = 0; i<tickets.length; i++)
    
document.write("https://api.helpscout.net/v1/conversations/"+tickets[i]+".json</br>")

<p id="demo"></p>
<script>
function myFunction() 
    var str = "https://api.helpscout.net/v1/conversations/382411278,374879346,374879343.json";
    var tickets = str.match(/\d9/g);

    for(var i = 0; i<tickets.length; i++)
    
      document.getElementById("demo").innerhtml +="https://api.helpscout.net/v1/conversations/" +tickets[i] + "<br />"
    


</script>

【讨论】:

以上是关于Zapier:代码未返回预期的所有值的主要内容,如果未能解决你的问题,请参考以下文章

For 循环未返回预期值 - C# - Blazor

For 循环未返回预期值 - C# - Blazor

Zapier 编写的代码循环遍历一组对象,每个对象提取一个值,然后平均这些值

函数未返回预期值

Lambda 表达式未返回预期的 MemberInfo

Lambda 表达式未返回预期的 MemberInfo