Используйте Python для получения изображения в Zapier - PullRequest
2 голосов
/ 10 марта 2019

Я пытаюсь использовать шаг кода 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

Кто-нибудь знает, как я могу использовать запросы в шаге кода Python в Zapier для получения изображения? (Я пытаюсь получить изображение и сохранить его в Dropbox.) БЛАГОДАРНОСТЬ.

1 Ответ

2 голосов
/ 10 марта 2019

Похоже, вам нужен сериализуемый объект 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')) 
...