Я пытаюсь сделать автоматизацию на Zapier с потоком, подобным следующему:
- Триггер: веб-ловушка, которая получает запрос POST.Тело - это ключ
file
со значением строка base64 определенного PDF , поэтому типом является str
- Действие: код Zapier Python, который получает
file
из веб-хуков, декодируйте строку base64 в bytes
, чтобы получить реальное действительное содержимое PDF, чтобы сказать переменную с именем file_bytes
- Действие: выпадающий список, который извлекает
file_bytes
из предыдущего шага,и загрузить его в dropbox
Я сам кодировал декодер (пункт 2) и проверил, что он хорошо работает в моей локальной системе.
Проблема в том, что Dropbox (пункт 3)получить двоичный файл, в то время как Python (точка 2) не может передавать значение, отличное от сериализуемого JSON.Это явное ограничение от Zapier:
output
Словарь или список словарей, которые будут «возвращаемым значением» этого кода.Вы можете явно вернуться рано, если хотите.Это должен быть сериализуемый JSON!
...
Эти два вопроса очень близки к тому, что я могу получить из других вопросов на этих сайтах, но это не принесло мне никакой удачи.
...
Код для декодирования строки base64 в bytes
выглядит так:
file_bytes = base64.b64decode(input_data['file'])
Что я уже сделал:
- передать
file_bytes
на вывод примерно так:
output = [{'file': input_data['file_bytes']}]}]
но это дало мне Это должно быть JSON-сериализуемо!
передать
file_bytes
в виде строки, подобной следующей:
output = [{'file': str(input_data['file_bytes'])}]
it do загружено в Dropbox, но содержимое файла повреждено.(конечно, да)
передать
file_bytes
как декодированную строку с кодировкой
latin-1
:
output = [{'file': input_data['file_bytes'].decode('latin-1')}]
it do , загруженной в Dropbox, PDF также можно открыть, даже еслитот же номер страницы, что и в оригинальном PDF, но он полностью пустой (белый, без содержимого)
...
Итак, действительно ли эта функция видна на платформе Zapier?Или я был уже в тупике даже с самого начала?