GASでFusionTablesAPIを叩いてみた。
目標
ラズパイのCPU温度を定期的にロギングしてアップロードしたい。
前回
GoogleAppsScriptでHelloWorldしてみた。
今回
GASからFusion Tables APIを使う方法について確認する。
select文、insert文を実行できた。
対象環境
- Firefox 50.0
- Google Account
- Google Developers Console
- Google Drive
- Google Fusion Tables
- Google Apps Script
 
参考
こちらを参考にさせていただいた。感謝。
Google Apps Script
起動
- Google Driveにアクセスする
- Google Apps Scriptを起動する
(メニューになければアプリに追加する)
 
- 以下のような画面が開くことを確認する
 
ついでにファイルの名前を任意に設定しておく。手順がわからないなら前回を参照。
Fusion Tables APIを使う
- メニュー→リソース→Googleの拡張サービス...をクリックする 
- Googleの拡張サービスダイアログから- Fusion Tables APIを探す 
- 無効をクリックして- ONに変える 
- Googleデベロッパーコンソールリンクをクリックする 
- GoogleDeveloperConsoleサイトが開く  
- 検索ボックスにfusionを入力し、Enterキーを押下する
- Fusion Tables APIが表示される 
- Fusion Tables APIのリンクをクリックする 
- 以下のようなページが表示される
 
- 有効にするをクリックする 
- 有効にするが- 無効にするに変更されたことを確認する 
- GoogleDeveloperConsoleサイトを閉じる 
- Google Fusion Tablesサイトに戻る 
- Googleの拡張サービスダイアログの- OKをクリックする 
select文を発行する
- ソースコードにFusionTables.と入力すると、.入力直後にインテリセンスが表示される 
- Queryを選択する 
- sql(String sql)を選択する   
- SQL文を入力する 
- select文の結果は、以下のようにして参照するらしい。
 
function myFunction() { var res = FusionTables.Query.sql("select * from 01234567890abcdefghijklmnopqrstuvwxyzABCD;"); Logger.log("Timestamp, CpuTemperature"); for(var index = 0; index < res.rows.length; index++){ Logger.log("%s, %s", res.rows[index][0], res.rows[index][1]); } }
- 実行する
- メニュー→表示→ログをクリックする

[16-11-27 12:36:02:159 JST] Timestamp, CpuTemperature [16-11-27 12:36:02:160 JST] 2000/01-01 00:00:05, 36000 [16-11-27 12:36:02:160 JST] 2000/01-01 00:00:05, 36000 [16-11-27 12:36:02:161 JST] 2000/01-01 00:00:05, 36000 [16-11-27 12:36:02:161 JST] 2000/01-01 00:00:06, 36000 [16-11-27 12:36:02:162 JST] 2000/01-01 00:00:06, 36000 [16-11-27 12:36:02:163 JST] 2000/01/01 00:00:07, 36000 [16-11-27 12:36:02:164 JST] 2005/01-01 00:00:08, 38000
成功。念のため、Fusion Tables ファイルの内容と一致しているか確認する。
Fusion Tables ファイル
DocumentId
おさらい。
SQL文のテーブル名にはDocumentIdを使う。DocumentIdはFusionTablesファイルのURL内にあるdocidパラメータの値である。FusionTablesでテーブルを作成するで作成したらURLが割り振られている。FusionTablesを開いてブラウザのロケールバーにあるURL内にあるはず。
レコード内容

テストデータとして、上記のようなレコードを挿入しておいた。
insert文を発行する
- select文のときと同様、insert文を作成し、実行する
 
- 対象のFusionTablesファイルを開いて挿入されたか確認する
 
成功。データが挿入されていた。
function myFunction() { var docId = "01234567890abcdefghijklmnopqrstuvwxyzABCD"; var sql = "insert into " + docId + " (Timestamp,CpuTemperature) values ('2016-01-03 12:34:56', 34567);"; var res = FusionTables.Query.sql(sql); }
課題
認証せずに実行できた、ということなのか?それとも、すでにログインしているから使えるだけ?よくわからない。
所感
認証やリクエスト上限の問題がなければ、とてもすばらしいサービスだと思う。
次はGASコードを外部実行する方法について調べる。ラズパイからHTTPリクエストしてGASコードを叩きたい。