触发该功能时无法进行UrlFetch

时间:2014-03-07 06:51:17

标签: google-apps-script

我构建了Google Apps脚本应用程序,该应用程序通过外部API获取数据。

运行此应用时,我得到了预期的结果,没有任何错误。但是,当由Time-Driven Trigger运行时,我收到错误。有人知道为什么会出现这个错误吗?

代码:

function triggerFetchTest() {

  // get token
  try {

    var id = "my_id",
        password = "my_password",
        tokenUrl = ("https://api.example.jp/v1/foo/auth/get_token?id=" + id
                     + "&password=" + password),
        tokenResponse = UrlFetchApp.fetch(tokenUrl);

    var token = JSON.parse(tokenResponse.getContentText())["token"];

    Logger.log(token);

  }

  catch(e) {

    Logger.log(e);

  }

}

此外:

  • 如果我在“脚本编辑器”中按“运行”按钮,我可以得到正确的答案。
  • 设置触发器没有任何问题。
  • 我尝试设置“muteHttpExceptions”:true,但发生了错误。
  • 即使被触发,External APIs Doc中显示的以下代码也可以。
  

var url ='https://gdata.youtube.com/feeds/api/videos?'       +'q =滑板+狗'       +'& start-index = 21'       +'& max-results = 10'       +'& v = 2';       var response = UrlFetchApp.fetch(url);       Logger.log(响应);


我想为此应用设置每日定时器并自动生成报告。请给我一些想法。


* 这篇文章是我在Stackoverflow上的第一篇文章,我不是正常的英语发言人,所以如果你不能阅读我上面的英语,我很抱歉...

3 个答案:

答案 0 :(得分:0)

SAMA,
尝试通过函数设置触发器。首先删除触发器,然后将此函数添加到代码中并运行它:

function setTrig(func){
  func=func||"triggerFetchTest";
  ScriptApp.newTrigger(func).timeBased().everyMinutes(5).create();
}

像我这样的事情发生在我身上也无法完全记住解释。

答案 1 :(得分:0)

尝试将主要功能设为doGet()或doPost()并将脚本作为具有以下设置的Web应用程序发布:以我身份执行应用程序,让任何人,甚至匿名访问它。然后,只需创建另一个对Web应用程序URI执行GET或POST请求的函数。

我认为它的工作原理是因为你在登录时没有运行触发器(比如AuthMode.NONE),它需要能够只做一个urlFetch,当你在你的应用程序上执行时会调用doGet()或doPost(),这是完成所有工作的地方。

示例:https://gist.github.com/jbutters/bece2fffe85080fe4314

答案 2 :(得分:0)

这是与Google Apps脚本UrlFetch和触发器相关的open issue。请注明并对此公开问题发表评论,以迫使Google采取相应措施。