在Google Apps脚本自定义功能中访问和删除逗号删除的UTF-8文本网页



我正在尝试为Google表编写一个自定义功能,该功能将从 Weather Weather Underground 访问历史天气数据并返回温度。数据在一个均为逗号限制的UTF-8文本的网页中。每行的第一项是时间,第二个是温度。该功能将以date-dd,一个月毫米,年度YYY,TIME-HH:MM AM(或PM)的形式进行输入。我需要转到网页,找到与输入相同的小时(在小时的第53分钟获取的所有数据),然后返回当时的温度。

这是我第一次使用JavaScript-sque编码,我想我正在打开和解码网页。在Google表中,它说温度是未知的功能。谢谢。

function TEMP(day, month, year, time) {
  var newTime = String(time).split("");
  if(String(newTime[6]).localeCompare('A')){
    var newTime1 = newTime[0] + newTime[1] + ":53 AM";
  }
  else if(String(time[6]).localeCompare('P')){
     newTime1 = newTime[0] + newTime[1] + ":53 PM";
  }
  else{
  }  
  try{
  var url = "https://www.wunderground.com/history/airport/KTVR/" + year +"/" + month + "/" + day + "/DailyHistory.html?format=1";
  }
  catch(err){
    return "weather data not found"
  }
  var opened = decodeURI(UrlFetchApp.fetch(url));
  for each(var line in opened){
    var newLine = String(line).split(',');
    if(newLine[0] == newTime1){
      return newLine[1];
    }
    else{
    }  
  }
  return "sorry something went wrong";
}

这里的主要错误是关于UrlFetchApp.fetch返回的错误假设。我建议仔细阅读文档。此方法返回类HttPresponse的对象。人们通常想要的是getContentText(),它返回包含网页源标记的字符串。您可以通过新线将其拆分以获取数组;仅通过编写var line in opened就不会自行发生这种情况。

,在此对象上使用decodeURI是没有意义的。此功能用于解码代表URI的字符串,例如

decodeURI("https://developer.mozilla.org/ru/docs/JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B");

这是关于解码网页的解码,而不是其内容。

另外,您将错误的东西放在一个试用块中。在字符串串联步骤中没有任何错误。获取数据时可能会发生错误。您可能需要查看fetch方法的muteHttpExceptions选项。

,一定要摆脱空的else {}块,它们是用什么?

对脚本进行以下更改后,

var url = "https://www.wunderground.com/history/airport/KTVR/" + year +"/" + month + "/" + day + "/DailyHistory.html?format=1";
var opened = UrlFetchApp.fetch(url).getContentText().split('n');

我能够在电子表格中使用=temp(2,3,2016,"12:34 am");它返回52.0。

最新更新