我的代码在按触发器运行时出现问题,但手动运行正常。
我有以下功能
var url = "https://api.facebook.com/method/links.getStats?urls="+links+"&format=json";
var getParams = {
"method": "get",
"validateHttpsCertificates":false,
"accept": "application/json",
"muteHttpExceptions": true
};
var stats = UrlFetchApp.fetch(url,getParams);
Utilities.sleep(3000);
var cont = JSON.parse(stats.getContentText());
按触发器运行记录"意外错误"
根据我的研究,我发现这是一个常见的问题,我读到手动运行的规则与触发器不同(即使ip也不同) " Apps Script使用两个不同的UrlFetchApp管道:一个用于代码由用户运行,另一个用于代码由触发器运行。触发器管道有一些略有不同的规则,这就是您偶尔会看到这些错误的原因。"
嗯,我认为这是一个严重的问题,如果谷歌这样做是为了规范Fetch电话,我认为对用户来说是违法的,基本上不应该存在触发服务。
对解决方案有任何想法吗?
答案 0 :(得分:0)
我找到了一个可能的时间解决方案:
Util.fetchJSON = function (url) {
var maxTries = 3;
var tries = 0;
var res, body;
do {
tries++;
if (tries > 1) {
Utilities.sleep(1000);
Logger.log('GET %s (try #%s)', url, tries);
} else {
Logger.log('GET %s', url);
}
res = UrlFetchApp.fetch(url);
body = res.getContentText();
} while (!body && (tries < maxTries));
if (!body) {
throw new Error('Unable to fetch JSON after ' + tries + ' attempts: ' + url);
}
return JSON.parse(body);
};
但我不知道如何将它应用到我原来的功能:(帮助)
(这是我原来功能的一部分)
function soyEspiritual() {
do {
try {
var pipe = "http://pipes.yahoo.com/pipes/pipe.run?_id=888ed60ff6a5ee79c05ec6963f6d3efe&_render=json";
var pipedata = UrlFetchApp.fetch(pipe,{method:"get"});
Utilities.sleep(3000);
var object = JSON.parse(pipedata.getContentText());