1. ホーム
  2. Blog
  3. Visualization APIを使ってGoogle Docsを簡易DBにする。

Visualization APIを使ってGoogle Docsを簡易DBにする。

山田 大悟

山田 大悟

技術

ヤマダタイゴです。米国時間の3月19日にVisualization APIが公開されました。 このAPIを使えば、Excelのように作ったデータをSQLのように呼び出すことができるそうです。

ちょうど犬の名前とか相場とかを管理したいなあと思っていたので、早速使ってみました。

こんなシーンで役に立ちそう

  • DBにするほどでもないかな、っていうデータを使う
  • 世の中に公開したらちょっとだけ喜ばれそう
  • xmlよりExcelの運用の方がやりやすくて好き

まずは使ってみてください。

GoogleDocs のデータをSQLライクにゲットする。

使ったスプレッドシートは、以下にあります。犬の和名、英語名、概要、平均価格といった情報を保持するマスタを作ろうとしています。現在鋭意作成中です。

http://spreadsheets.google.com/pub?key=pi2Y9LlwGuSiRsdG1QAStHw
※随時メンテナンスしてます。descriptionカラムやcautionカラムは消すかもしれません。ご注意ください。

ソース解説

(1)Google AJAX APIsを読み込んでloadする。
3行目~7行目
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript" src="../js/jquery-1.2.1.pack.js"></script>
<script type="text/javascript">
google.load("visualization", "1");
google.setOnLoadCallback(init);

visualization APIのVersion1をロード、ロードしおわったらinit関数を実行する処理です。
bodyのOnLoadやjqueryの$( document ).readyの代わりに使います。

(2)SQLを定義する。
sql = 'select ' + col
    + ' from `Sheet 1` where C=0 order by ' + sort_key;

公開したスプレッドシート上ではシート名はdogsに変更してますが、SQL上はSheet 1とする必要があります。C列はdel_flagという項目です。

SQLには、

  • select
  • from
  • where
  • group by
  • pivot
  • order by
  • limit
  • offset
  • label
  • format
  • options
上記の語句が使えるようです。詳細はコチラ
残念ながら今のところupdateはなくselectのみです。
また、like検索はできず、等式による検索のみ行えるようです。
スプレッドシート上でシート名やカラム名を定義していても、シート名は`Sheet 1`..、カラム名はA,Bといった列番号で指定する必要があります。

(3)公開されたスプレッドシートを指定してオブジェクトを生成する。
var query = new google.visualization.Query(
        "http://spreadsheets.google.com/tq?key=pi2Y9LlwGuSiRsdG1QAStHw");

冒頭で紹介したスプレッドシートのURLは、

http://spreadsheets.google.com/pub?key=ABCDE
でしたが、APIで参照する際は、
http://spreadsheets.google.com/?tq=ABCDE
と、tqというパラメータで呼び出す必要があります。

(4)レスポンスからデータを取得する。
var data = response.getDataTable();

リファレンスにはgetData()と書かれてますが、3/28時点では動きませんでした。

他にも、

  • getNumberOfColumns()
  • getNumberOfRows()
  • getColumnId(columnIndex)
  • getColumnLabel(columnIndex)
  • getColumnPattern(columnIndex)
  • getColumnType(columnIndex)
  • getValue(rowIndex, columnIndex)
  • getFormattedValue(rowIndex, columnIndex)
のようなメソッドを使えます。詳細はリファレンスをご覧ください。

まとめ

いかがでしょうか。割と簡単にDB構築からデータ取得までできそうで、スプレッドシートに用意したデータは内容に関わらず同じ呼び出し方法が使えるのが便利ですね! 「簡易だけどあると便利」なマスタがいっぱい公開されて参照しあうような世界になるとステキですね!

トップへ戻る