触发函数时无法 UrlFetch

Posted

技术标签:

【中文标题】触发函数时无法 UrlFetch【英文标题】:Cannot UrlFetch when the function is triggered 【发布时间】:2014-03-07 06:51:16 【问题描述】:

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

运行此应用程序时,我得到了预期的结果,没有任何错误。但是,当通过时间驱动触发器运行它时,我得到了错误。有谁知道为什么会出现这个错误?

代码:

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=滑板+狗' + '&开始索引=21' + '&max-results=10' +'&v=2'; var response = UrlFetchApp.fetch(url); Logger.log(响应);


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


*这篇文章是我在 *** 上的第一篇文章,而且我通常不会说英语,所以如果你看不懂我上面的英语,我很抱歉......

【问题讨论】:

究竟是什么错误? 【参考方案1】:

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

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

类似的事情发生在我身上,具体原因我也记不清了。

【讨论】:

哈罗德,感谢您的回复。我尝试按照您的建议以编程方式设置触发器,但它没有用...function everyDayTrigger() ScriptApp.newTrigger("triggerFetchTest").timeBased().everyMinutes(1).create(); 我检查了“成绩单”,它显示运行脚本在“UrlFetchApp.fetch()”点失败。我什么都不知道……【参考方案2】:

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

我认为它可以工作,因为触发器不会在您登录时运行(类似于 AuthMode.NONE),它需要能够执行 urlFetch,当您在应用程序上执行此操作时会调用 doGet()或 doPost() 完成所有工作。

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

【讨论】:

【参考方案3】:

这是一个与 Google Apps 脚本 UrlFetch 和触发器相关的 open issue。请为它加注星标并在此未决问题上发表评论,以迫使 Google 对此采取措施。

【讨论】:

以上是关于触发函数时无法 UrlFetch的主要内容,如果未能解决你的问题,请参考以下文章

从云函数触发数据流管道时,无法从主类执行超过 1 个函数

快速放置在函数中时无法触发uiview.animate

无法访问 PostgreSQL 触发函数中的主键值

MySql 错误:无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用

当元素的innerHTML改变时触发一个函数?

当 URL 包含空格时,为啥 urlfetch 会得到 status:400?