読者です 読者をやめる 読者になる 読者になる

やってみる

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

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