【问题标题】:Can I trigger a Google Script when a file is saved to Google Drive?当文件保存到 Google Drive 时,我可以触发 Google 脚本吗?
【发布时间】:2016-07-07 10:02:50
【问题描述】:

我有一个 VBA 脚本,可以将 Excel 文件转换为 PDF,然后通过 Google Drive 桌面同步将其保存到 Google Drive 文件夹中。

然后我想做的是让 Google 脚本触发器监视给定的文件夹,并且每次将文件保存在那里时,它都会运行一个脚本以通过电子邮件发送文件。我在基于时间的触发器上运行时脚本运行良好,每 15 分钟一次,但更喜欢实时解决方案。

所以我喜欢 onChange() 触发器,但用于 Google Drive。

可能吗?

谢谢

【问题讨论】:

标签: google-apps-script triggers


【解决方案1】:

这应该可以通过 Google Drive 的 Push Notifications API 实现。详情请见this link

推送通知

本文档描述了如何使用推送通知在资源更改时通知您的应用程序。

概述

Drive API 提供推送通知,让您可以监视资源的变化。您可以使用此功能来提高应用程序的性能。它允许您消除轮询资源所涉及的额外网络和计算成本,以确定它们是否已更改。每当监视的资源发生变化时,Drive API 都会通知您的应用程序。 要使用推送通知,您需要做两件事:

  • 设置您的接收 URL,或“Webhook”回调接收器。
  • 这是一个 HTTPS 服务器,用于处理资源更改时触发的 API 通知消息。
  • 为您要观看的每个资源端点设置通知通道。
    通道指定通知消息的路由信息​​。作为通道设置的一部分,您确定要接收通知的特定 URL。每当频道的资源发生变化时,Drive API 都会将通知消息作为 POST 请求发送到该 URL。

目前,Drive API 支持文件和更改资源更改的通知。

【讨论】:

    【解决方案2】:

    目前,GAS 无法实现这种脚本触发器。您必须运行一个持续检查的基于时间的脚本。

    【讨论】:

      【解决方案3】:

      我找到了这个blog,并进行了一些修改,它对我有用:

      function setupTrigger(){
        let oneMinuteAgo = new Date(new Date().getTime() - 1 * 60 * 1000).toISOString();  
        let files = DriveApp.searchFiles('("1w0P5s5-BAlWB1EIr124h3wFPha_q6BPt" in parents) and (modifiedDate > "' + oneMinuteAgo + '")');
        while (files.hasNext()){
          let file = files.next();
        }
      }
      

      其中 1w0P5s5-BAlWB1EIr124h3wFPha_q6BPt 是我上传文件的文件夹 ID。请注意,modifiedDate 表示文件的修改日期(因此,如果您在一天前创建文件,那么 modifiedDate 将表示一天前,而不是上传日期)。

      【讨论】:

        猜你喜欢
        • 2014-08-06
        • 2018-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-28
        • 2020-05-10
        • 1970-01-01
        • 2013-03-05
        相关资源
        最近更新 更多