やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

GASでFusionTablesAPIを叩いてみた

GASでFusionTablesAPIを叩いてみた。

目標

ラズパイのCPU温度を定期的にロギングしてアップロードしたい

前回

GoogleAppsScriptでHelloWorldしてみた

今回

GASからFusion Tables APIを使う方法について確認する。

select文、insert文を実行できた。

対象環境

参考

こちらを参考にさせていただいた。感謝。

Google Apps Script

起動

  1. Google Driveにアクセスする
  2. Google Apps Scriptを起動する (メニューになければアプリに追加する) f:id:ytyaru:20161127110722p:plain
  3. 以下のような画面が開くことを確認する f:id:ytyaru:20161127110850p:plain

ついでにファイルの名前を任意に設定しておく。手順がわからないなら前回を参照。

Fusion Tables APIを使う

  1. メニュー→リソースGoogleの拡張サービス...をクリックする f:id:ytyaru:20161127131823p:plain
  2. Googleの拡張サービスダイアログからFusion Tables APIを探す f:id:ytyaru:20161127131646p:plain
  3. 無効をクリックしてONに変える f:id:ytyaru:20161127132000p:plain
  4. Googleデベロッパーコンソールリンクをクリックする f:id:ytyaru:20161127132041p:plain

  5. GoogleDeveloperConsoleサイトが開く f:id:ytyaru:20161127132219p:plain

  6. 検索ボックスにfusionを入力し、Enterキーを押下する
  7. Fusion Tables APIが表示される f:id:ytyaru:20161127132234p:plain
  8. Fusion Tables APIのリンクをクリックする f:id:ytyaru:20161127132317p:plain
  9. 以下のようなページが表示される f:id:ytyaru:20161127132357p:plain
  10. 有効にするをクリックする f:id:ytyaru:20161127132431p:plain
  11. 有効にする無効にするに変更されたことを確認する f:id:ytyaru:20161127132446p:plain
  12. GoogleDeveloperConsoleサイトを閉じる

  13. Google Fusion Tablesサイトに戻る

  14. Googleの拡張サービスダイアログのOKをクリックする f:id:ytyaru:20161127132642p:plain

select文を発行する

  1. ソースコードFusionTables.と入力すると、.入力直後にインテリセンスが表示される f:id:ytyaru:20161127132738p:plain
  2. Queryを選択する f:id:ytyaru:20161127132846p:plain
  3. sql(String sql)を選択する f:id:ytyaru:20161127132905p:plain f:id:ytyaru:20161127132939p:plain
  4. SQL文を入力する f:id:ytyaru:20161127133245p:plain
  5. select文の結果は、以下のようにして参照するらしい。 f:id:ytyaru:20161127134414p:plain
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]);
  }
}
  1. 実行する
  2. メニュー→表示ログをクリックする

f:id:ytyaru:20161127134654p:plain

[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内にあるはず。

レコード内容

f:id:ytyaru:20161127134056p:plain

テストデータとして、上記のようなレコードを挿入しておいた。

insert文を発行する

  1. select文のときと同様、insert文を作成し、実行する f:id:ytyaru:20161127140615p:plain
  2. 対象のFusionTablesファイルを開いて挿入されたか確認する f:id:ytyaru:20161127135151p:plain

成功。データが挿入されていた。

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コードを叩きたい。