Я пытаюсь обработать двоичные данные, полученные с метеостанции 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"