Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用谷歌应用程序脚本和雅虎查询语言从网页获取数据_Google Apps Script - Fatal编程技术网

Google apps script 使用谷歌应用程序脚本和雅虎查询语言从网页获取数据

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

使用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;
  }
}
现在,当在单元格中键入函数时,这可以正常工作,但有时会出现错误!在带有注释的单元格中:

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++;
}