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
APIとサービス/認証情報のページへ
- https://console.developers.google.com/apis/credentials
サービスアカウントを作成
Select a role
は空でつくってよい (通知出るけどwithoutでよい)
サービスアカウントにスプレッドシートの権限を入れる
右上の共有
ボタンから
- https://console.developers.google.com/iam-admin/serviceaccounts
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の権限についてはこちらが分かりやすかった