サービスアカウントで認証してGoogleSpreadsheetからデータを取得

Dec 1, 2018 16:30 · 526 words · 2 minute read

spreadsheetのデータを取ってくるやり方をググったらいいのが見つからなかった

  • 認証周りをガバガバでやってそう
  • 古い認証方式(oauth)の紹介になってそう

spreadsheetはpublicにしてcsvで取得するのが一番楽だが、 もっと権限をちゃんとしないといけない場合のフローをメモしておく

  • gcpのプロジェクトがある前提からスタート
  • そこにサービスアカウントを作る
  • サービスアカウントがspreadsheetにアクセスできるようにする

APIライブラリのページでSheetsAPIを有効化

image

APIとサービス/認証情報のページへ

image

サービスアカウントを作成

Select a role は空でつくってよい (通知出るけどwithoutでよい)

image

サービスアカウントにスプレッドシートの権限を入れる

右上の共有ボタンから

image

sheetId とは

叩いてみる

yarn add googleapis などしてから以下のコードでoneシートの右上4マスが取ってこれる

const { google } = require('googleapis');
const sheets = google.sheets('v4');
const path = require('path');

execAPI('1HucDy33jZYDSGmXvIGDL5SOu4mv9B2mJui3Bi512345', 'one!A1:B2');

async function execAPI(spreadsheetId, range) {
  const auth = await google.auth.getClient({
    keyFile: path.join('/Users/jibun/Documents/jibunno-612344e1408a.json'),
    scopes: ['https://www.googleapis.com/auth/spreadsheets'],
  });

  const apiOptions = {
    auth,
    spreadsheetId,
    range,
  };

  sheets.spreadsheets.values.get(apiOptions, (err, res) => {
    console.log(err);
    console.log(res.data.values);
  });
}

参考

サービスアカウントとG-Suiteの権限についてはこちらが分かりやすかった

tweet Share