Найти тему
Google Таблицы

Парсим погодное API в Таблице. Пользовательская функция.

Друзья, привет! Недавно мы решили научиться брать данные из API, предоставляющего прогноз погоды: https://openweathermap.org/api.

Ниже - строчка с фрагментом JSON, который возвращает API. Внутри «list» - строки с погодой по дням, из которых нам нужно было достать «dt» (unix date) и «day» (температура за день, °F). То, что достаем - выделено жирным.

{"cod":"200","message":0,"city":{"geoname_id":524901,"name":"Moscow","lat":55.7522,"lon":37.6156,"country":"RU","iso2":"RU","type":"city","population":0},"cnt":7,"list":[{"dt":1485766800,"temp":{"day":262.65,"min":261.41,

Мы написали простую пользовательскую функцию для парсинга, сейчас расскажем и покажем:

1. Сначала парсим JSON из введенной ссылки и превращаем его в object.

2. Затем - создаем пустой массив (arr) и заполняем его в цикле. Мы знаем расположение (ключи) всех значений, которые хотим вытащить. Количество строк (дней) с погодой мы определим с помощью data["list"].length. Цикл пройдется по каждой строке (row) в JSON, достанет нужные нам поля и вставит их в новый массив.

Первое поле каждой строки нового массива - название города (ключ: ["city"]["name"]).

Второе поле - unix date, которую мы приводим к формату даты (ключ: ["list"][row]["dt"]).

Третье поле - температура в градусах Фаренгейта, которые мы приводим к Цельсию, вычитая 273,15 (ключ: ["list"][row]["temp"]["day"]).

3. Возвращаем получившийся массив

Код целиком:

function parseWeatherJson(url){
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var data = JSON.parse(json);
var arr = []
for(var row = 0; row<data["list"].length; row++){
arr = arr.concat([[
data["city"]["name"],
new Date(data["list"][row]["dt"]*1000),
data["list"][row]["temp"]["day"]-273.15]])
}
return arr
}

На скриншоте - как это работает в Таблице: