最近話題になっているGoogleHomeMiniを購入しました
前々からほしいなぁーとは思っていたのですが、使用用途があまりなく6000円は高いなぁということで購入をしていませんでした
しかし3000円セールをやっていたため、目覚まし時計を購入する感覚で購入をしてみました
色々試した後、“なんか作ってみるか”ということでGoogleHomeMiniさんにTwitterのトレンドを喋らせるようにしてみました
まずは動作しているところから

トレンドを喋らせる流れは以下の感じにしました
GoogleHomeに”Twitterのトレンド”と話すとiftttにその情報を渡し、RaspberryPiに送信されます
その次にRaspberryPiがTwitterのトレンドを取得してGoogleHomeに返す感じとなっています
RaspberryPi
今回はRaspberryPiZeroWを選択しました
そしてiftttからのトリガー取得とTwitterのトレンド取得にはNode.jsを利用しました
Twitterのトレンドを取得後、GoogleHomeへの送信にはgoogle-home-notifierというライブラリを利用しました
インストール方法等は公式ページに記載してるため割愛します
またこのプログラムではRaspberryPiにWebサーバーを立てます
そのため、“express” “body-parser” “ngrok”モジュールもインストールしてください
ifttt
Google AssistantをTriggerとし、Webhooksを行う処理としました
設定は以下のようにしました
-
GoogleAssistant
- Say a simple phraseを選択
-
What do you want to say?
- Twitterのトレンド
-
What’s another way to say it? (optional)
- ついったーのとれんど
-
What do you want the Assistant to say in response?
- ツイッターのトレンドを話します
-
Language
- Japanese
-
- Say a simple phraseを選択
-
Webhooks
- Make a web requestを選択
- URL
- http://*****.ngrok.io (プログラムを起動した時に取得できるURLを記入)
- Method
- POST
- Content Type (optional)
- application/x-www-form-urlencoded
- Body (optional)
- text=twittertrend
- URL
- Make a web requestを選択
プログラム
※今回作成したプログラムはgoogle-home-notifierのサンプルプログラムを利用しています。しかし、後述に説明しますが、結構危険じゃないかなぁと思っていますので現状のプログラムで常用運用は止めたほうが良いです
事前にTwitterのAPIを取得してください
流れとして最初にwebサーバーを立てます
あるワード(今回は”twittertrend”としました)をpostしたらTwitterのトレンドを取得し、取得した文字列をGoogleHomeさんへ投げています
またサーバーを立てるとURLが出力されますのでそれをiftttのWebhooksのURLに貼り付けます
$ node googlehome_twittertrends.js
Start Server
curl -X POST -d "text=Hello Google Home" http://*****.ngrok.io //このURLをiftttに貼り付ける
プログラムはGitHubに投げました
このプログラムの危険事項
このプログラムはローカルエリア内でなく、ローカルエリア外で動きます
ngrokというモジュールが簡単にローカルエリア外にサーバーを作ってくれるためです
TwitterのAPIが丸見え状態かつ、誰かに生成したURLへアクセスされると勝手にGoogleHomeが喋る可能性があります
“これを抜いてローカルエリア内でサーバーを立てればええんちゃう?“と思いますが、これだとiftttさんが動いてくれません
iftttはローカルエリア内のサーバーにはpostしません
じゃあサーバー借りてやればいいじゃん!と思いますが、それだとGoogleHomeさんを探せなくなります(google-home-notifierはあくまでローカルエリア内にあるGoogleHomeの検索のため)
そのため、ローカルエリア内しか作ることができません
考えられるセキュリティ向上策として以下のようなものがあります
- ngrokにBasic認証をするオプションがあるためそれをする
- node-expressにBasic認証かつDigest認証をする機能があるためどちらか(Digest認証推奨)を行う
- TwitterのAPIをなんらかで暗号化する
一応これでURLが知られても簡単にはアクセスできないと思います
しかし、iftttのURLに認証のユーザー名とパスワードをのせなかればならないのでどうなのかなぁという感じです
とりあえずは現状で使うのは脆弱性いっぱいなので常用したいという人は認証を入れてください