注:古い記事の為、内容が最新ではない可能性がありますm(_ _)m
マツウラです。
前回の続きになります。 今回はGoogleDriveに保存してあるスプレッドシートのデータを取得します。
実行環境は次の通りです。
- Node.js 0.10.25
- Google APIs Client Library for Node.js(alpha) 0.4.7
GoogleSpreadsheetsAPIはスプレッドシートのデータを読み込み、変更することができるAPIです。
このAPIはGoogle Data APIに数あるAPIの中の1つになります。
Google Data APIのクライアントライブラリがあるのですが、残念なことにNode.js用はありません。(2014-02-10現在)
そこで多少なりとも手軽にするためOAuth用に、
API Client Libraries | Google Developers
というGoogleのAPIを取り扱うライブラリを使います。
SpreadsheetsAPIには対応していませんが、この中にあるOAuth2Clientを利用することでOAuth周りのクライアント実装をサポートしてくれます。 こちらはNode.jsを始めとする多言語に対応しています。
Google APIs Client Library for Node.js (alpha)をインストールします。
$ npm install googleapis
こちらが今回のコード全体です。
Google Spreadsheets APIでGoogleアカウントユーザーのスプレッドシートから ...
まずアプリがアクセスする許可をGoogleアカウントユーザーに貰う必要があります。
許可そのものはユーザーに認証用URLへアクセスしてもらい、承認してもらうことで行われます。
次に認証用URLを生成します。
AccessTokenを取得する
コード中の、CLIENT_ID, CLIENT_SECERT, REDIRECT_URLは前記事であった値です。
そして重要なscopeオプションです。
これがGoogle Spreadsheets APIのOAuth 2.0のスコープとなります。
次に生成されたurlへブラウザでアクセスします。
Googleアカウントにログイン済みならば、アプリの認証が求められます。
許可しないと話が続かないので許可します。
ブラウザに文字列が表示され、コードをコピーする旨が書かれています。
これはリクエストトークンで、有効期限が1時間となっています。
リクエストトークンはAPIの使用に必要なアクセストークンと交換することができます。
OAuth2Clientにはアクセストークンを取得するためのgetToken(code, callback)メソッドがあります。
これにリクエストトークンを渡して取得します。
tokensにはアクセストークン、リフレッシュトークン、アクセストークンの有効期限、トークンの種類、以上4つが含まれたjsonです。
重要なのがリフレッシュトークンです。これはユーザーにアプリを承認してもらったリクエストと結び付けられています。以後、アクセストークンの再発行には必ず必要になるので、忘れずに保存しておきます。
OAuth2.0を使ってアクセスする方法に関する詳細は
Using OAuth 2.0 to Access Google APIs | Google Identity Platform
を見てください。
ここまでがユーザー認証のプロセスです。
次にGoogleアカウントユーザーのデータを取得します。
スプレッドシートからデータを取得する
新規にスプレッドシートを作成すると、その際にデフォルトのワークシートが作成されます。
今回はデフォルトのワークシートからデータを取得します。スプレッドシートを作成してデータを入力して下さい。
もちろん、既存のスプレッドシートを使って貰ってもかまいません。
(Google Data APIのクライアントライブラリがあるJava, .NET, Javascript, PHP, Python, Objective-Cはそちらを使うのが良いですよ)
次に取得したいスプレッドシートのKeyを確認します。
KeyはスプレッドシートをGoogleDriveから開いた時にブラウザのアドレスバーに表示されているkeyパラメータの値です。
ワークシートからフィードを取得する
今回は次のようなワークシートからデータを取得します。
client.requestはOAuth2.0を使用したリクエストの実装をサポートしてくれるありがたいヤツです。
ここで取得したフィードはデフォルトのワークシートのものです。また、alt=jsonクエリパラメータを付けることで、デフォルトでXMLレスポンスであるデータをjsonオブジェクトで返すようにします。
(Google Data APIのクライアントライブラリではjsonレスポンスをサポートしていないので注意)
APIによってワークシートからフィードを取得する方法は2つあります。
- List
- Cells
Listベースでフィードを取得すると、見出しが付いた文字列として各行を取得できます。
"title": { "type": "text", "$t": "1" }, "content": { "type": "text", "$t": "pythonms: 445, javams: 3238, goms: 166, phpms: 341" },
(なんで書式が解除され、括弧が無くなるんだろう・・・?わからん。)
Cellsベースでフィードを取得すると、各セルごと個別に取得することができます。
"title": { "type": "text", "$t": "B1" }, "content": { "type": "text", "$t": "Python(ms)" },
(セルベースだと書式が保たれている。なんで??)
今回はリストベースでフィードを取得しています。
リクエストが成功すると上記のようなデータがターミナルにズラズラっと表示されます。
Google Spreadsheets APIに関する詳細は
Overview | Sheets API v3 | Google Developers
を見てください。
以上、こんな感じでスプレッドシートからデータを取得します。といっても私自身が使い始めたばかりの新米です。何かあれば気軽にコメントしてくださいな。