created: 2018-12-01T07:30:16.000Z

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

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

image

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

  • https://console.developers.google.com/apis/credentials

image

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

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

image

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

右上の共有ボタンから

  • https://console.developers.google.com/iam-admin/serviceaccounts

image

sheetId とは

  • こんなURLの場合は
    • https://docs.google.com/spreadsheets/d/1HucDy33jZYDSGmXvIGDL5SOu4mv9B2mJui3Bi512345/edit#gid=0
  • この部分
    • 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の権限についてはこちらが分かりやすかった

Efficient Linuxコマンドライン ―開発と自分に磨きをかけるLinuxのテクノロジー
[ad] Efficient Linuxコマンドライン ―開発と自分に磨きをかけるLinuxのテクノロジー
Daniel J. Barrett, 大嶋 真一 (単行本(ソフトカバー))