«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Запись в Google Sheets из локального скрипта через аутентификацию gcloud CLI.

Запись в Google Sheets из локального скрипта через аутентификацию gcloud CLI.

Опубликовано 3 ноября 2024 г.
Просматривать:415

Write to Google Sheets from a local script via gcloud CLI authentication

Недавно мне нужно было получить данные из API GitHub и опубликовать их в Google Sheet, чтобы я мог поделиться некоторыми диаграммами рабочей нагрузки по проверке кода. Этот пост о том, как у меня работает аутентификация.

Я написал сценарий Node.js, потому что мой вариант использования был слишком сложен для BASH и казался слишком временным для Go. Первоначально скрипт генерировал специальные данные CSV, которые я мог вручную скопировать в Google Таблицы с помощью функции «Вставить как CSV». После нескольких раундов копирования вручную я захотел использовать свое время с умом: я подсчитал, что смогу заставить работать интеграцию с Таблицами в течение пары часов, и если так, то это
вероятно, окупится в течение нескольких месяцев.

Кроме того: Таблицы — не моя база данных. Это мой пользовательский интерфейс для отчетов о данных. Не используйте Таблицы в качестве базы данных.

Мне потребовалось около 4 часов, чтобы это заработало, потому что аутентификация сложна. В этом посте показан более прямой путь к работающему решению.

Сложность создания приложения oAuth легко отвлечь, и хотя мне особенно нравится использовать сервисную учетную запись из моих облачных сервисов, это
менее удобно при локальном запуске.

Хитрость, которую я узнал, заключается в том, что настройка учетных данных приложения по умолчанию в интерфейсе командной строки gcloud может работать как своего рода прокси-сервер OAuth для кода Google Workspace, расширяя способ аутентификации вашей учетной записи в Google и включая дополнительные разрешения (области OAuth).

? Локальная аутентификация с помощью gcloud CLI

Чтобы отправлять запросы API к Google Таблицам, включите Sheets API в своем облачном проекте:

$> gcloud services enable sheets.googleapis.com

Operation "operations/acat.p2-480745230567-02564c8d-c6ba-4f60-90bd-13f33e41f0fe" finished successfully.

Установите учетные данные приложения по умолчанию, а также заявите некоторые области OAuth, отличные от стандартных, чтобы учетные данные можно было использовать с таблицами:

$> gcloud auth application-default login --scopes \
   'https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets'

Это запустит поток OAuth, который предполагает посещение веб-страницы в вашем браузере. В зависимости от конфигурации терминала может отображаться URL-адрес или даже открываться страница.

Когда gcloud предоставляется эта область, код, который может получить доступ к вашим локальным учетным данным, будет иметь доступ для чтения и записи ко всем вашим данным Google Таблиц. Вы можете повторно запустить эту команду без настроенных областей, чтобы включать и выключать этот доступ по мере необходимости.

?️ Инициализируйте клиент Node для Google Таблиц.

import {google} from 'googleapis';

function sheetsClient() {
    const authConfig = new google.auth.GoogleAuth({
        scopes: [
            // Only 'spreadsheets' scope is needed in the code.
            // gcloud CLI also needs 'cloud-platform' and 'drive'.
            'https://www.googleapis.com/auth/spreadsheets'
        ],
    });
    const auth = await authConfig.getClient();
    return google.sheets({version: 'v4', auth});
}

? Добавить данные на лист

Пример из документации о том, как добавить данные в лист
(нажмите на вкладку Node.js) сработало хорошо. Однако я не мог понять, как заставить работать аутентификацию оттуда. Пример сработал, как только я понял описанный выше трюк, позволяющий добавить недостающие области OAuth к учетным данным моей среды разработки.

Я внес несколько изменений, чтобы упростить повторное использование клиента, по-другому параметризовать запрос и подчеркнуть, как я хочу, чтобы данные обрабатывались в Таблицах.

Мой код для добавления данных в лист с использованием приведенного выше кода инициализации клиента:

let client;

async function appendDataToSheet(spreadsheetId, tab, values) {
    if (!client) {
        client = sheetsClient();
    }

    try {
        const result = await client.spreadsheets.values.append({
            spreadsheetId,
            range: `${tab}!A2:AG`,
            // Use my data as provided.
            valueInputOption: 'RAW',
            // Inserts rows as part of appending to reduce overwrites.
            insertDataOption: 'INSERT_ROWS',
            requestBody: { values },
        });
        console.log(`${result.data.updates.updatedCells} cells appended.`);
    } catch(e) {
        // Show the error, do not stop. Cross-reference the error with terminal output
        // and decide case-by-case to re-run the script or manually copy data.
        console.error(e);
    }
}

Я использую «добавление», потому что мой скрипт собирает ежемесячные показатели, а добавление позволяет мне добавлять новые строки, не удаляя предыдущие.

Вот пример вызова функции AppendDataToSheet():

const values = [
  // Each nested array is a spreadsheet row.
  [1, 2, 3, 4, 'luggage'],
  [4, 5, 6, 'N/A', 'sticks'],
];
appendDataToSheet(
  'HPDkfqdu6rfIq5-4uTGDqz2tvmPxDZMul27JFexample',
  'Exported Data Tab',
  values
);

В документации есть несколько хороших советов по работе с Sheets API, например, предложение не отправлять более одного запроса API в секунду на каждый лист. Я понял это на собственном горьком опыте: перезаписал данные из первого запроса данными из второго.

? Отправьте это!

Если я перейду к производству, я, возможно, переключусь на использование
Облачный планировщик и задания облачного запуска. Дайте мне знать, если вы хотите об этом прочитать.

Фото на обложке: Глеб Альбовский на Unsplash

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/googlecloud/write-to-google-sheets-from-a-local-script-via-gcloud-cli-authentication-3p1f?1 Если есть какие-либо нарушения, пожалуйста, сообщите об этом. свяжитесь с Study_golang@163 .comdelete
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3