Google apps script 使用谷歌应用程序脚本和雅虎查询语言从网页获取数据
使用Google Apps脚本,我编写了以下函数将一条信息提取到电子表格中:Google apps script 使用谷歌应用程序脚本和雅虎查询语言从网页获取数据,google-apps-script,Google Apps Script,使用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
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;
}
}
现在,当在单元格中键入函数时,这可以正常工作,但有时会出现错误!在带有注释的单元格中:
TypeError: Can't read "h1" property of null. (line 54).
删除该单元格并再次键入函数通常有效
为什么这个函数是不稳定的,即:它确实可以工作,但只是有时会工作?您需要对提取进行一些错误检查。互联网上的任何请求都可能失败 如果未找到结果,则结果对象值将为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++;
}