前回書いた記事で調べていて、サービスアカウントを利用する方式も試してみたので記録しておきます。
Google DriveのAPIをNode.jsで触る ~ @google-cloud/local-authのサンプル版
前提など
- https://console.cloud.google.com にアクセスできる
- Google DriveのAPIをONにしている。
環境
- Node.js v17系
- google-api-nodejs-client(googleapis) v100
1. サービスアカウント利用の準備
こちらの記事が分かりやすかったです。
1-1. サービスアカウントの作成
APIとサービス
のメニューから認証情報を作成 -> サービスアカウントと進みます。
サービスアカウントの名前を入れて完了で進みます。
サービスアカウントが作成されました。メールアドレスが発行されます。
作成したサービスアカウントに権限を付与します。新しいプリンシパルの部分に先ほど発行されたメールアドレスを指定しましょう。ロールはプロジェクト => オーナー
にして保存します。
1-2. キーの発行
サービスアカウントのキーを発行します。
JSON形式で保存します。
credentials.json
という名前にして保存するとサンプルを試しやすいです。
1-3. 利用するGoogle Driveのフォルダにサービスアカウントの権限を付与
サービスアカウントを編集者にしてGoogle Driveに追加します。
2. サービスアカウントのキーで認証
ライブラリをインストールします。
npm i googleapis@100
こちらのドキュメントを参考にサービスアカウント利用のコードに修正してみました。
https://github.com/googleapis/google-api-nodejs-client#service-account-credentials
以下のようなコードになりました。
'use strict';
const path = require('path');
const {google} = require('googleapis');
async function runSample(query) {
const auth = new google.auth.GoogleAuth({
keyFile: path.join(__dirname, './.private/credentials.json'),
scopes: ['https://www.googleapis.com/auth/drive.metadata.readonly'],
});
const drive = google.drive({version: 'v3', auth: auth});
const params = {pageSize: 3};
params.q = query;
const res = await drive.files.list(params);
console.log(res.data);
return res.data;
}
if (module === require.main) {
runSample().catch(console.error);
}
module.exports = runSample;
実行すると見事にファイルリストが取得できました。
$ node app.js
{
kind: 'drive#fileList',
nextPageToken: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
incompleteSearch: false,
files: [
{
kind: 'drive#file',
id: '1QBZPkNxxxxxxxxxxxxxxxxxxxx'
省略
特にリダイレクトURLなど無しで利用できました。
前回(Google DriveのAPIをNode.jsで触る ~ @google-cloud/local-authのサンプル版)のサンプルだと毎回認証が発生して少し手間でしたが、こちらの方式だと手間が少なそうです。