node.jsのいろいろなモジュール51 – OAuth2認証形式でGoogleスプレッドシートにアクセス

2015.10.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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」形式で認証情報を作成します。

edit-google-1
クライアント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を使うことができますね。

参考サイトなど