IToTの覚え書き

マイクロビット、アルドゥイーノ、ラズベリーパイなどで楽しい道具を作る趣味のサイトです。 基本的に自分用の覚え書きです。

2020年04月

本の場所検索システムを作っていて家のサーバにColdFusion と SQL Serverまでデプロイして作ったが、そんな必要はなかった
家にサーバが無くても、その代わりにグーグルスプレッドシートを使えばいい。
イフトからA1に本のタイトルが入る。スペースをとるために
B1=SUBSTITUTE(SUBSTITUTE(A1," ","")," ","")
とおく。
G列に本のタイトル、H列に場所を書き入れる。
C1=match(B1,G1:G32,0)
とおいて何行目かを検索する
D1=indirect("R"&C1&"C8", false)
とおいて本の場所を書き入れる
E1=B1&"は"&D1&"にあります"
とおいてGHNに言わせる文を作る。
F1にはそれをURLエンコードした文字をスクリプトで記入して、GHNにURLを送る。

Google spleadsheetのスクリプト(拡張されたjavascript):
function doPost(e) {
var value = e.postData.getDataAsString(); //TextFieldの中身
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
sheet.getRange("A1").setValue(value);
value2 = sheet.getRange("E1").getValue();
var value3 = ecl.EscapeSJIS(value2);
sheet.getRange("F1").setValue(value3);
var url = "http://183.77.***.**:50***/?ja="+value2; // アクセス先
UrlFetchApp.fetch(url); // GETリクエスト 元は var response = UrlFetchApp.fetch(url);
}


これだけで、サーバは要らなかった。
どんなにロバストなシステムでも、なくてもすむよりはプニーだ。

いままでFileMakerを使っていた家のサーバを強化しようと思います。

『グーグルホームミニに何かを言うと、IFTTT(トリガーはGoogleAssistant、アクションはWebHook)に行き、GoogleSpleadSheet経由でサーバのFilemakerのWebCompanionに来た後、Filemakerで検索して結果をGoogleHomeNotifier経由で、グーグルホームミニに答をしゃべらせる。』
という仕組みでした。

今まではFilemakerのWebCompanionを使っていて、若干非力でした。
『サーバのFilemakerのWebCompanionに来た後、Filemakerで検索して』のところを
『サーバのIISに来た後、ColdFusion経由でSQL Serverで検索して』にします。

サーバーサイドスクリプトはColdFusionの代わりにASPでもできます
Dreamweverを使えばColdFusionもASPもほとんどソースを書かないでほぼ同じ手順でできます。
でもソースを書かないと自分で書いた気がしません。というか言語を覚えない・・・。
しかもそのスクリプトは、やはり機械が作っただけあって、妙に複雑でまどろっこしいというのもあります。
今回はColdFusionは手書きで書き、ASPはDreamweverを使いました。
タグベースのCFの方がスクリプトのASPより行が短いです。
また今までFMのCDMLに慣れているので、CFMLの方がなじみやすいです。

まず、SQL Serverをインストールします。booksDBというデータベース内にbooksというテーブルを作り、ID、title、placeというフィールドを作ります。
そしてColdFusionをインストールします
ColdFusionは普通、FormPage.cfmでtitleフィールドに本のタイトルを入れると、ActionPage.cfmで変数をFORM.titleで受け取り、本の場所を検索してお知らせするわけです。検索はActionPage.cfm中のcfqueryタグ中のSQL文でwhere title='#FORM.title#'とやればいいわけです。
ですが今回はURLパラメータでtitle変数を渡しますのでFormPage.cfmは使わずActionPage.cfmだけでやります。where title='#FORM.title#'のかわりにWHERE title='#URL.title#'とやります。
IFTTTからActionPage.cfm?title=チャート式化学
と送られてくると
http://192.168.1124/?ja=チャート式化学は机の上にあります
とGHNに送りますのでグーグルホームミニが『チャート式化学は机の上にあります』と言ってくれます。

 

↑このページのトップヘ