"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > gcloud CLI 인증을 통해 로컬 스크립트에서 Google Sheets에 쓰기

gcloud CLI 인증을 통해 로컬 스크립트에서 Google Sheets에 쓰기

2024-11-03에 게시됨
검색:503

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

최근에는 코드 검토 작업량에 대한 차트를 공유할 수 있도록 GitHub API에서 데이터를 가져와 Google 시트에 게시해야 했습니다. 이 게시물은 인증이 작동하는 방법에 대한 것입니다.

내 사용 사례가 BASH에는 너무 복잡하고 Go에는 너무 임시적이어서 Node.js 스크립트를 작성했습니다. 처음에 스크립트는 CSV로 붙여넣기 기능을 사용하여 Google 스프레드시트에 수동으로 복사할 수 있는 임시 CSV 데이터를 생성했습니다. 몇 차례 수동으로 복사한 후 시간을 현명하게 사용하고 싶었습니다. 몇 시간 내에 Sheets 통합이 작동할 수 있을 것으로 예상했는데 그렇게 된다면 그렇게 될 것입니다
아마도 몇 달 안에 성과를 낼 것입니다.

참고: 스프레드시트는 내 데이터베이스가 아닙니다. 내 데이터 보고 UI입니다. 시트를 데이터베이스로 사용하지 마세요.

인증이 어렵기 때문에 이 작업을 수행하는 데 거의 4시간이 걸렸습니다. 이 게시물은 작동하는 솔루션에 대한 보다 직접적인 경로를 보여줍니다.

oAuth 애플리케이션을 만드는 복잡성으로 인해 주의가 산만해지기 쉽습니다. 특히 클라우드 서비스의 서비스 계정을 사용하는 것을 좋아하지만
로컬로 실행할 때는 덜 편리합니다.

제가 배운 비결은 gcloud CLI의 애플리케이션 기본 사용자 인증 정보 설정이 더 많은 권한(OAuth 범위)을 포함하도록 Google에서 계정을 인증하는 방법을 확장하여 일종의 Google Workspace 코드에 대한 OAuth 프록시로 작동할 수 있다는 것입니다.

? gcloud CLI를 사용한 로컬 인증

Google Sheets에 API를 요청하려면 클라우드 프로젝트에서 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 Sheets 데이터에 대한 읽기/쓰기 액세스 권한이 부여됩니다. 사용자 정의된 범위 없이 이 명령을 다시 실행하여 필요에 따라 해당 액세스를 켜거나 끌 수 있습니다.

?️ 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
);

문서에는 시트당 초당 두 개 이상의 API 요청을 보내지 말라는 제안과 같이 Sheets API 작업에 대한 몇 가지 좋은 팁이 문서에 있습니다. 어렵게 알아낸 것은 첫 번째 요청의 데이터를 두 번째 요청의 데이터로 덮어쓰는 것이었습니다.

? 배송하세요!

이것을 제작하기 위해 앞으로 나아가면
사용으로 전환할 수도 있습니다. Cloud Scheduler 및 Cloud Run 작업 이에 대해 읽고 싶으시면 알려주세요.

Unsplash의 Glib Albovsky가 표지 사진

릴리스 선언문 이 기사는 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