首页 > 解决方案 > 在 Google Apps 脚本中处理使用 UrlFetchApp 检索到的二进制数据

问题描述

我正在尝试通过他们的网络服务器处理从戴维斯气象站检索到的二进制数据。

我使用附加到 Google Apps 电子表格的脚本来执行此操作。

var lResponse = UrlFetchApp.fetch(lWLDataUrl);
var lContentBytes = lResponse.getAs('application/octet-stream').getBytes();

Weatherlink 返回的数据由 52 字节长的记录组成,因此我使用以下方法在循环中对它们进行切片:

var lContentObject = {};
for (var li=1; li<=lNumberOfRecords; li++) {
  var lBinaryData = lContentBytes.slice((li-1)*52, (li-1)*52+52);
  lContentObject[li] = {"binary_data": lBinaryData}; 
}

但结果不是我所期望的。我很难说服务器是否返回了错误的数据(不太可能),或者我没有正确处理它(可能)。我应该能够将响应转换为无符号 8 位整数数组,并将它们解码为如下所示的天气数据记录:

2015/01/01;00:30;-1,9;-1,9;-2,0;92;-3,1;1,6;W;0,80;4,8;W;-1,9;-2,1;-2,1;1031,5;0,00;0,0;0,422;0,000;18,7;42;5,5;17,4;8,14;1,2209;M;M;M;M;M;M;M;M;M;-0,6;-1,1;M;M;4;0;-0,6;-1,1;698;1;100,0;30

相反,检索到的数据lContentBytes在调试器中显示为负数,尽管情况并非如此。尽管返回的字节数组的总大小与我的预期相对应(记录数 * 52),但从字节数组中“切片”的最后一条记录填充了“-1”,情况不应该如此。

我做了很多研究,但没有找到任何解决方案...

以下是对 GET 请求的响应的标头:

标签: arraysgoogle-apps-scripturlfetch

解决方案


推荐阅读