node.jsのいろいろなモジュール51 – OAuth2認証形式でGoogleスプレッドシートにアクセス
node.jsでGoogle Spread Sheetにアクセスその2
OAuth2でGoogle Spreadsheetにアクセスする
前回はサービスアカウント形式の認証とシート共有を使ってGoogleスプレッドシートにAPIでアクセスしました。
しかし、この方法の場合、セキュリティによりシート共有を制限している場合などには使用できません。
Googleでは他にもいくつか認証方法があり、今回はOAuth2を使用してスプレッドシートにアクセスする方法について紹介します。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.10.5
- Node : v4.1.2
データとAPIを使用する準備
1.シートの用意とGoogle Developer コンソールにてAPI許可
前回と同じシートを使用します。 Drive APIの許可をしてないなら、許可しておきましょう。
2.OAuth 2.0 クライアント(その他)を作成
サイドメニューから認証情報を選択し、「OAuth2.0クライアントID」形式で認証情報を作成します。
クライアントIDとクライアントシークレットキーが表示されるので、ひかえておきましょう。
3.ブラウザでアクセスし、codeを取得
次に、下記URLをブラウザで直打ちし、APIアクセスを許可します。Client IDのところは、先ほど発行されたIDを記述します。
//改行いれない https://accounts.google.com/o/oauth2/auth?client_id=<Client ID>&redirect_uri=http://localhost&scope=http://spreadsheets.google.com/feeds https://spreadsheets.google.com/feeds http://docs.google.com/feeds&response_type=code&approval_prompt=force&access_type=offline
ブラウザの画面的にはエラー画面になりますが、URLのパラメータにcodeがついているので、それをひかえておいてください。
4.curlコマンドでトークン取得
curl等のコマンドラインツールで、下記コマンドを実行します。
curl -d client_id=<Client ID> -d client_secret=<クライアントシークレットキー> -d redirect_uri=http://localhost -d grant_type=authorization_code -d code=<3で取得したコード> https://accounts.google.com/o/oauth2/token
コマンドが成功すると、アクセストークンやリフレッシュトークンがJSON形式で返ってきます。
これでGoogleスプレッドシートにAPIでアクセスするための情報が取得できました。
nodeアプリの作成
準備ができたので、node.jsプログラムを作成してみましょう。
モジュールのインストール
Googleスプレッドシートにアクセスするためのモジュールをnpmでインストールします。
今回はedit-google-spreadsheetを使います。
% npm install edit-google-spreadsheet
サンプル作成
edit-google-spreadsheetモジュールをrequireしてload関数で各種キー情報を指定し、シートを読み込みます。
var Spreadsheet = require('edit-google-spreadsheet'); Spreadsheet.load({ debug: true, spreadsheetName:<スプレッドシート名>, worksheetName: <シート名>, oauth2: { client_id: <クライアントID>, client_secret: <クライアントシークレットID>, refresh_token: <リフレッシュトークン> }, accessToken: { type: <トークンタイプ>, token: <アクセストークン> }, },<callback>);
callback部分に、シートへアクセスするコードを記述します。
receive関数を取得すると、行単位でシートの情報を取得できます。
※エラー処理は省略
function readMySheet(err, spreadsheet) { spreadsheet.receive(function(err, rows, info) { for(var i in rows) { console.log(rows); } }); }
また、シートに情報を追加するには、send関数を使います。
function sendMySheet(err, spreadsheet) { spreadsheet.add({ 1: { 2: "add value" } }); spreadsheet.send(function(err) { console.log("Updated Cell at row 1, column 2 to 'add value'"); }); }
metadata関数で、シートのメタ情報を取得することもできます。
spreadsheet.getMetadata(function(err, metadata){ console.log(metadata); });
まとめ
今回はOAuth2をつかってGoogleスプレッドシートにアクセスする方法を紹介しました。
これでサービスアカウント形式でもOAuth2形式でも、GoogleスプレッドシートAPIを使うことができますね。