javascript - 在 Google Apps 脚本自定义函数中访问和抓取逗号分隔的 UTF-8 文本网页

标签 javascript utf-8 google-apps-script

我正在尝试为 Google 表格编写一个自定义函数,该函数将访问地下天气的历史天气数据并返回温度。数据位于全部由逗号分隔的 UTF-8 文本的网页中。每行的第一项是时间,第二项是温度。该函数将以日期-DD、月份-MM、年份-YYYY、时间-HH:MM AM(或PM)的形式接受输入。我需要进入网页,找到与输入相同的小时的行(所有数据都是在该小时的第53分钟获取的),并返回当时的温度。

这是我第一次使用 javascript 式编码,我认为我打开和解码网页的方式不正确。在谷歌表格中,它说 TEMP 是一个未知函数。谢谢。

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 不会自行发生这种情况。

在此对象上使用 decodeURI 是没有意义的。该函数用于解码表示 URI 的字符串,例如

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

它是关于解码网页地址,而不是其内容。

此外,您在 try-catch block 中放置了错误的内容。在字符串连接步骤中不会引发任何错误。获取数据时很可能会出现错误;您可能需要查看 fetch 方法的 muteHttpExceptions 选项。

无论如何,去掉空的 else {} block ,它们有什么用?

对脚本进行以下更改后,

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。

关于javascript - 在 Google Apps 脚本自定义函数中访问和抓取逗号分隔的 UTF-8 文本网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41350487/

相关文章:

javascript - AngularJS)类型错误: Cannot read property 'push' of undefined

c# - 将 url 从 utf-8 编码重新编码为 iso-8859-1 编码

Oracle:将 varchar2 字段中的 xml 实体转换为 utf-8 字符

javascript - Google Spreadsheet On 更改将日志写入另一张表

Javascript 对象样式模块到函数式编程

javascript - android.permission.GET_ACCOUNTS,android.permission.READ_CONTACTS。在 APK 中使用这些权限的应用需要设置隐私政策

google-apps-script - 使用 Google Apps 脚本获取 Google Drive 事件

google-apps-script - Google Apps Script - 将数据复制到不同的工作表并附加

javascript - Bootstrap-Navbar 在移动设备上看起来不一样

java - GlassFish + MySQL + XHTML + Java Beans + UTF-8 问题