在 Zapier 中使用 Python 获取图像
Posted
技术标签:
【中文标题】在 Zapier 中使用 Python 获取图像【英文标题】:Use Python to get image in Zapier 【发布时间】:2019-07-31 22:52:40 【问题描述】:我正在尝试使用 Python 代码步骤在 Zapier 中下载图像。这是一些示例代码(但它似乎不起作用):
r = requests.get('https://dummyimage.com/600x400/000/fff')
img = r.raw.read()
return 'image_data': img
我得到的错误是
Runtime.MarshalError: Unable to marshal response: b'' is not JSON serializable
有谁知道我如何在 Zapier 的 Python 代码步骤中使用请求来获取图像? (我正在尝试获取图像并将其保存到 Dropbox。) 谢谢。
【问题讨论】:
这和 Zapier 有什么关系? 见这里zapier.com/help/code-python 【参考方案1】:看起来您需要一个 json 可序列化对象而不是二进制对象。
将图像转换为字符串的一种方法是使用 base64
然后对其进行编码:
使图像可序列化:
r = requests.get('https://dummyimage.com/600x400/000/fff')
img_serializable = base64.b64encode(r.content).decode('utf-8')
# check with json.dumps(img_serializable)
现在return 'image_data': img_serializable
不应该给出错误。
从字符串中恢复图像并保存到文件:
with open("imageToSave.png", "wb") as f:
f.write(base64.decodebytes(img_serializable.encode('utf-8')))
同样使用codecs
,它是标准 Python 库的一部分:
r = requests.get('https://dummyimage.com/600x400/000/fff')
content = codecs.encode(r.content, encoding='base64')
img_serializable = codecs.decode(content,encoding='utf-8')
type(img_serializable)
# Out:
# str
with open("imageToSave3.png", "wb") as f:
f.write(codecs.decode(codecs.encode(img_serializable, encoding='utf-8'), \
encoding='base64'))
【讨论】:
我认为这不适用于 Zapier,因为您无法导入任何库,例如 base64。 (默认有请求库。) @LordNull 编解码器库应该是标准的,这行得通吗? @LordNull Zapier 实际上提供了一些有用的非标准库。这包括 base64。 啊,是的,我现在看到了,它说标准 Python 库可用。我尝试了上面的示例,但它们并不适合我。图像 以 base64 数据形式保存到输出 (return 'image_data': img_serializable
),但在下一个操作步骤中,它会以文本文件的形式保存到 Dropbox。如何让操作步骤了解它是图像,以便将 图像 保存到 Dropbox 而不仅仅是包含 base64 文本的文本文件?
@LordNull 也许您应该在另一个问题中发布您的代码以上传到 Dropbox。另外,我不知道 Zapier,但我想知道是否可以将文件直接流式传输到 Dropbox 而无需先将其保存在服务器上以上是关于在 Zapier 中使用 Python 获取图像的主要内容,如果未能解决你的问题,请参考以下文章
Zapier Cli - 应用程序在 Cli 中运行良好,但在 Zapier UI 中无法正常运行
如何在“Zapier 代码”中编写节点获取(Rest-API)?