为什么"意外错误"在UrlFetchApp GAS上

时间:2015-04-16 03:11:38

标签: google-apps-script urlfetch

我的代码在按触发器运行时出现问题,但手动运行正常。

我有以下功能

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电话,我认为对用户来说是违法的,基本上不应该存在触发服务。

对解决方案有任何想法吗?

1 个答案:

答案 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());