我正在尝试为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。