サービスアカウントで認証してGoogleSpreadsheetからデータを取得
Dec 1, 2018 16:30 · 526 words · 2 minute read
spreadsheetのデータを取ってくるやり方をググったらいいのが見つからなかった
- 認証周りをガバガバでやってそう
- 古い認証方式(oauth)の紹介になってそう
spreadsheetはpublicにしてcsvで取得するのが一番楽だが、 もっと権限をちゃんとしないといけない場合のフローをメモしておく
- gcpのプロジェクトがある前提からスタート
- そこにサービスアカウントを作る
- サービスアカウントがspreadsheetにアクセスできるようにする
APIライブラリのページでSheetsAPIを有効化
- https://console.developers.google.com/apis/api/sheets.googleapis.com/overview?project=
- https://console.developers.google.com/apis/library/drive.googleapis.com

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

サービスアカウントを作成
Select a role は空でつくってよい (通知出るけどwithoutでよい)

サービスアカウントにスプレッドシートの権限を入れる
右上の共有ボタンから

sheetId とは
- こんなURLの場合は
- この部分
- 1HucDy33jZYDSGmXvIGDL5SOu4mv9B2mJui3Bi512345
 
叩いてみる
- こちらのコピペ
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の権限についてはこちらが分かりやすかった