Обработка двоичных данных, полученных с помощью UrlFetchApp в скрипте Google Apps - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь обработать двоичные данные, полученные с метеостанции Davis через их веб-сервер.

Я делаю это с помощью сценария, прикрепленного к электронной таблице Служб Google.

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

данные, возвращаемые Weatherlink, состоят из записей длиной 52 байта, поэтому я делю их на все oop, используя:

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:

  • 'content -transfer-encoding ': "binary",
  • Соединение: "keep-alive",
  • ' Content-Encoding ': "gzip",
  • Зависит от "Accept" -Кодирование ",
  • 'Длина контента':" 161 ",
  • Дата:" Ср, 15 апреля 2020 20:29:13 GMT ",
  • 'Контент -Type ': "application / octet-stream"
...