Back to tech

GoogleHomeMiniにTwitterのトレンドを喋らせてみた

2 min read
Table of Contents

最近話題になっているGoogleHomeMiniを購入しました

前々からほしいなぁーとは思っていたのですが、使用用途があまりなく6000円は高いなぁということで購入をしていませんでした

しかし3000円セールをやっていたため、目覚まし時計を購入する感覚で購入をしてみました

色々試した後、“なんか作ってみるか”ということでGoogleHomeMiniさんにTwitterのトレンドを喋らせるようにしてみました

まずは動作しているところから

GoogleHomeMiniにTwitterのトレンドを喋らせてみた
www.youtube.com
image

トレンドを喋らせる流れは以下の感じにしました

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
  • Webhooks

    • Make a web requestを選択
      • URL
        • http://*****.ngrok.io (プログラムを起動した時に取得できるURLを記入)
      • Method
        • POST
      • Content Type (optional)
        • application/x-www-form-urlencoded
      • Body (optional)
        • text=twittertrend

プログラム

※今回作成したプログラムは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に投げました

GitHub - Momijinn/googlehome_tiwttertrends: GoogleHomeにTwitterのトレンドを喋らせる
github.com
image

このプログラムの危険事項

このプログラムはローカルエリア内でなく、ローカルエリア外で動きます

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に認証のユーザー名とパスワードをのせなかればならないのでどうなのかなぁという感じです

とりあえずは現状で使うのは脆弱性いっぱいなので常用したいという人は認証を入れてください

mark.png