如何让 Flask 网站捕获 Google 表单提交事件触发器以更新该网站?

How to have Google Form submit event trigger be caught by a Flask website to update that website?

我有一个用 Flask 编写的网站,我想在提交 Google 表单的答案后更新它。

更准确地说,我已经将表单关联到 Google 电子表格,我可以从 Flask 读取该电子表格,但缺少的关键组件是如何在有新答案时触发网站更新其内容已提交表格。

执行此操作的最佳方法是什么?

您可以创建表单提交触发器来触发 Google Apps 脚本函数,调用您的 Flask 站点并触发更新。

https://developers.google.com/apps-script/guides/triggers/installable

Webhook 解决方案:

Google 形式:

  1. 进入Google表单编辑器
    1. 单击个人资料图片旁边的 3 个垂直点,然后 select 'script editor'
    2. 将此代码段自定义到您的 WebHook url 并设置自定义令牌(这不是很安全,但聊胜于无)。
function onFormSubmit(e) {
  const url = "https://example.com/webhook";

  var options = {
        "method": "post",
        "headers": {
            "Content-Type": "application/json"
        },
    "payload": JSON.stringify({"token": "sometokenheretocheckonbackend"})
  };
  UrlFetchApp.fetch(url, options);
}

(可能会弹出对话框,您必须批准您连接到未经授权的服务)

Flask 端的处理:

from http import HTTPStatus
from flask import (
    abort,
    request
)


@blueprint.route('/webhook', methods=['POST'])
def handle_webhook():

    payload = request.get_json()

    if payload.get('token') != "sometokenheretocheckonbackend":
        abort(HTTPStatus.UNAUTHORIZED)

    # Update your content

    return jsonify({'success': True}), HTTPStatus.OK

定期更新(替代解决方案):

我会考虑启动一个定期更新此内容的守护程序线程。这显然不那么优雅,但应该工作得相当稳定,如果内容更新过程相当轻量级,对服务器的要求也不会太高。