触发函数时无法 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的主要内容,如果未能解决你的问题,请参考以下文章