>  기사  >  웹 프론트엔드  >  gcloud CLI 인증을 통해 로컬 스크립트에서 Google Sheets에 쓰기

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

Susan Sarandon
Susan Sarandon원래의
2024-09-26 08:38:221118검색

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

최근에는 코드 검토 작업량에 대한 차트를 공유하기 위해 GitHub API에서 데이터를 가져와 Google 시트에 게시해야 했습니다. 이번 포스팅은 제가 어떻게 인증을 받았는지에 대한 글입니다.

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

여담: 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 범위를 내 개발 환경 자격 증명에 추가하는 위의 트릭을 이해하면 샘플이 작동했습니다.

클라이언트를 더 쉽게 재사용하고, 요청을 다르게 매개변수화하고, Sheets에서 데이터를 처리하는 방법을 강조하기 위해 몇 가지 변경 사항을 적용했습니다.

위의 클라이언트 초기화 코드를 활용하여 시트에 데이터를 추가하는 내 코드:

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

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

? 배송하세요!

이것을 제작하게 되면 다음을 사용하여 전환할 수도 있습니다
Cloud Scheduler 및 Cloud Run 작업 이에 대해 읽고 싶으시면 알려주세요.

Unsplash의 Glib Albovsky 표지 사진

위 내용은 gcloud CLI 인증을 통해 로컬 스크립트에서 Google Sheets에 쓰기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.