Google が公式にサポートしている Node.js 向けクライアントライブラリである「googleapis」を使って、Google Sheet API を呼び出してみたので、その手順をメモしておきます。
ちなみに googleapis は Google Sheet API をサポートしていないため、OAuth2 をサポートしたクライアントとして使用し、クライアントの提供する API ではなく HTTP リクエストレベルでの処理を記述していきます。
今回はバッチ処理のためのスクリプトで使うつもりなので、OAuth2 (RFC6749) の Grant Type で言うと Client Credentials Grant に相当するであろう Google API でいうところの「サービス アカウント」を使って認証します。
今回の実装で、この認証のために必要な情報は、次の 2 点です。
- メールアドレス
- プレーンテキストの秘密鍵 (pem ファイル)
上記の情報を取得していきます。
Google Develepers Console (https://developers.google.com/console) にアクセスし、プロジェクトを作成しておきます。
プロジェクトから [API と認証] > [認証情報] > [OAuth] > [新しいクライアント ID を作成] とたどります。
[サービス アカウント] を選択して [OK] ボタンを押します。
p12 ファイルがダウンロードされ、パスワードが表示されます。
ここで手に入る情報のうち、利用するものは以下の 3 点です。
- メールアドレス
- p12 ファイル
- p12 ファイルのパスワード (おそらく「notasecret」)
p12 ファイルはバイナリなので、pem ファイル(テキスト) に変換します。
これは環境変数 (文字列) で認証情報を渡せるようにするためです。
以下のコマンドで変換できます。
コマンド中の key.p12
には「 p12 ファイル」を、コマンド実行時に確認されるパスワードには「 p12 ファイルのパスワード (おそらく「notasecret」) 」を指定します。
$ KEY=$(openssl pkcs12 -in key.p12 -nodes -nocerts)
これで必要な認証情報がそろいました。
- メールアドレス
- プレーンテキストの秘密鍵 (pem ファイル)
スクリプトを作成していきます。
任意のディレクトリを作成し、npm init
などで package.json
を初期化しているものとします。
googleapis をインストールします。詳細はリポジトリを参照してください。
https://github.com/google/google-api-nodejs-client
また今回のスクリプト用にいくつかライブラリを使っているので、それもインストールします。
$ npm install --save googleapis es6-promise xml2js