Разработка

Чтение данных по API из Google таблицы с помощью Nodul

Олег Заньков

October 31, 2024

Часто есть необходимость прочитать какие-то агрегированные данные, собранные в Google табличке, для того чтобы отправить их на анализ в другой сервис, например для визуализаци. И чтобы не тратить время на настройку разных сервисов между собой можно сделать это легче, настроев чтение и отправки данных с помощью Nodul.

Сперва обязательно получим токен по инструкции в нашей статье, только в списке выбрать "Google Sheets API v..." scope "www.googleapis.com/auth/spreadsheets" и "www.googleapis.com/auth/drive";

Создадим новую таблицу, можно например назвать её "NodulTestSheet4Add", с двумя столбцами "ID" и "Name";

Создание новой таблице

Подготовим запрос для нашего rest клиента;

REQ01: Запрос для rest клиента


    curl --request POST  --url 'https://webhook.nodul.ru/69/dev/becaa2c2-fcf6-4ef8-89a9-f375b3c0ba26?='
    --header 'Content-Type: application/x-www-form-urlencoded'
    --data token=[change everything inside the square brackets along with them] \
    --data tableName=NodulTestSheet4Add \


Подставим полученный из шага в начале наш токен;

Создадим узел "Webhook": "+ Добавить узел" => "Http" => "Webhook";
Скопируем адрес Webhook и вставим его в адресную строку rest клиента;

Копирование ссылки в Webhook

Далее добавим другой узел "JavaScript": "+ Добавить узел" => "Code" => "JavaScript";

Сохраняем;

Свяжем узлы вместе;

Запустим и вызовем цепочку для передачи данных между узлами;
Скопируем в него содержимое:


    const apiDriveURI = "https://www.googleapis.com/drive/v3/files";
    const apiSheetURI= "https://sheets.googleapis.com/v4";
    const bToken = "Bearer " + data["{{1.body.token}}"];
    const tableFileName = data["{{1.body.tableName}}"];
    
    return {
    							apiDriveURI,
                  apiSheetURI,
                  bToken,
                  tableFileName,
                }

Проверим во всех конструкциях вида "data["{{1.body.name}}"]" что номер Webhook соответствует от которого получаем данные, если нет заменим на нужные(напомню что 1 это номер узла который написан сразу под узлом над названием типа узла, далее если это запрос то выбирается поле объекта отвечающее за тип переданных/полученных данных - body для форм или query для query параметров);

Сохраняем изменения;

Создадим узел "HTTP request" для получения id файла таблицы: "+ Добавить узел" => "Http" => "HTTP request";

Сохраняем;

Свяжем узлы вместе;

Запустим и вызовем цепочку для передачи данных между узлами;

Сформируем поле "Url": в начало подставим переменную "apiDriveURI" из "JavaScript", после неё укажем ?:q=name"переменная tableFileName  из "JavaScript"";

Убедимся что метод выбран по умолчанию "Get";

Добавим заголовок "Autorization" и в его значение переменную "bToken" из "JavaScript";

Нажмём "Сохранить";

Подстановка и проверка значений в узел HTTP requst

Создадим узел "HTTP request" для добавления данных: "+ Добавить узел" => "Http" => "HTTP request";
Сохраняем;
Свяжем узлы вместе;

Запустим и вызовем цепочку для передачи данных между узлами;

Сформируем поле "Url": в начало подставим переменную "apiSheetURI" из "JavaScript", после неё /spreadsheets/, после подставим значение которое получили в предыдущем узле {{ 3.body.files.[ 0 ].id}}, и в конце /values/A:B;

Убедимся что метод выбран по умолчанию "Get";

Добавим заголовок "Autorization" и в его значение переменную "bToken" из первого узла "JavaScript";

Нажмём "Сохранить";

Создадим узел "Webhook response" для возврата найденных значений: "+ Добавить узел" => "Http" => "Webhook response";
Сохраняем;
Свяжем узлы вместе;

Запустим и вызовем цепочку для передачи данных между узлами;

Добавим в возвращаемые значения из предыдущего запроса с получением данных из ячеек {{ 4.body.values.[ 0 ]}};

После вызова всей цепочки будет возвращаться содержимое ячеек;

В конце вся цепочка в Nodul будет выглядеть так:

До встречи в новых статьях

Ссылки:

Основные:  
Nodul
Google OAuth 2.0 Playground

Информация:  
Google Drive API
Google Drive Files: list
Google Sheet API

Google Sheet Method: spreadsheets.values.get

Другие статьи