使用Google Apps脚本,我编写了以下函数来将一条信息提取到电子表格中:
function myFunction(symbol, elemento) {
var url = "http://www.example.com/query?symbol=" + symbol;
switch (elemento) {
case 'one':
var xpath='//*[@id="sectionTitle"]/h1';
break;
case 'two':
var xpath='//*[@id="headerQ"]/div[1]/div/span[2]'
break;
}
var query = "select * from html where url = '" + url + "' and xpath = '" + xpath + "'";
var yql = "https://query.yahooapis.com/v1/public/yql?format=json&q=" + encodeURIComponent(query);
var response = UrlFetchApp.fetch(yql);
var json = JSON.parse(response.getContentText());
switch(elemento){
case 'one':
return json.query.results.h1;
break;
case 'two':
return ponto(json.query.results.span.content);
break;
}
}
现在,在将单元格中的函数输入时可以正常工作,但“有时”我会在带有注释的单元格中收到错误#ERROR!
:
TypeError: Can't read "h1" property of null. (line 54).
删除该单元格并再次输入该功能通常有效。
为什么这个函数是易变的(即:它确实有效,但有时只有)?
答案 0 :(得分:0)
您需要使用fetch进行一些错误检查。任何通过互联网的请求都可能失败。
如果未找到结果,则结果对象值将为null。我提出了快速退款,但您可能需要使用这些数字来满足您的需求。
var response = UrlFetchApp.fetch(yql);
var json = JSON.parse(response.getContentText());
var backoff = 1;
while((json.query.results == null || response.getResponseCode() != 200)){
Utilities.sleep((Math.pow(2,backoff)*1000) + (Math.round(Math.random() * 1000)));
response = UrlFetchApp.fetch(yql);
json = JSON.parse(response.getContentText());
backoff++;
}