Google Home Miniに無駄遣いしないように釘をさしてもらう

# はじめに
一人暮らしをはじめてからというもの、衝動買いに歯止めが利かなくなってしまい
部屋にAmazonのダンボールが増え続ける生活を送っております。**これではいかん。**

無駄遣いはしないと決心をしても、効果がないのはわかりきっていたので、
Amazonサイトでの衝動買いを減らせるような仕組みを作ろうとした記録になります。

# 概要
amazonのサイトを訪れると、無駄遣いしないようにGoogle Home Miniが釘を刺してくれます。
<img width="863" alt="スクリーンショット 2018-03-28 7.53.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/206110/277059cc-08d2-0865-f90d-88919c41f883.png">

※[google-home-notifier周りをほぼ自動化した](https://qiita.com/k_keisuke/items/3e67aa25a24f07656f47)こちらを元にGoogle Spreadsheetを噛ませているので、サンプルコードはSpreadsheetへPOSTするようになっています。

# Google Home Miniに喋ってもらう準備(google-home-notifier)
前回の記事でも紹介させていただきましたが、
[GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます](https://qiita.com/azipinsyan/items/db4606aaa51426ac8dac)
こちらの記事を参考に行えば、特に詰まることはないかと思います。

:pray::pray::pray: 改めまして、すばらしい記事をありがとうございます :pray::pray::pray:

## ちょっと違う声で喋ってほしい！

google-home-notifierの設定が完了すると、通常の"OK, Google!"時の声とは違う音声で喋ってくれます。
この音声がいまいち…という方は
[VoiceText Web API](https://cloud.voicetext.jp/webapi)を使用することで、好みの声で喋らせることが可能です！
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/Google?src=hash&amp;ref_src=twsrc%5Etfw">#Google</a> Home で野太い声になるアプリ「筋肉ボイス」を作った！筋肉はいいぞ<a href="https://twitter.com/hashtag/ActionsOnGoogle?src=hash&amp;ref_src=twsrc%5Etfw">#ActionsOnGoogle</a> 対応した！<br>これで声から起動できる！<br><br>Microsoft のサーバーレスのサービス「<a href="https://twitter.com/hashtag/AzureFunctions?src=hash&amp;ref_src=twsrc%5Etfw">#AzureFunctions</a>」使って、<br>言語は C# を使ってプログラミングした！<br><br>コードは全部上げたよ！<a href="https://t.co/K5zJCJlUyt">https://t.co/K5zJCJlUyt</a><br>ー <a href="https://t.co/FssZ6UDw0M">pic.twitter.com/FssZ6UDw0M</a></p>&mdash; ちょまど@広島なう (@chomado) <a href="https://twitter.com/chomado/status/974534165419892736?ref_src=twsrc%5Etfw">2018年3月16日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ちょまどさんがこちらのツイートで紹介されているアプリで使用されているものです！

:pray::pray::pray: いつも参考にさせていただいております :pray::pray::pray:

今回は、こちらの記事を参考に実装しました。

[Google Homeで好きな言葉を話してもらう その2(VoiceText)](http://gadgetneko.blog.jp/archives/5326857.html)

:pray::pray::pray: めちゃくちゃ助かりました :pray::pray::pray:

# 特定のWebページを訪れたら、google-home-notifierに通知する
Amazonのサイトに来たらgoogle-home-notifierにPOSTするChromeの拡張機能を作成して実現しました。

ページ遷移のたびに喋られるのは鬱陶しいので、
セッションで最初の訪問の際に喋ってもらうようにしました。

```json:manifest.json
{
    "name": "Google-Home-Page-Alert-Chrome-Extension",
    "version": "1",
    "manifest_version": 2,
    "description": "When you visit Amazon's website, alert to Google Home",
    "content_scripts": [{
      "matches": ["https://www.amazon.co.jp/*"],
      "js": ["alert.js"]
    }],
    "permissions": [ "https://script.google.com/macros/s/*", "tabs" ]
}
```

```js:alert.js
var pageUrl = location.pathname;
var url = [YOUR URL];

if(window.sessionStorage.getItem(["GHAlert"]) === null){
    /* セッションで最初の訪問だったときの処理 */

    // セッションに値を登録
    window.sessionStorage.setItem(["GHAlert"],["1"]);

    var msg = "無駄遣いしないようにね";    
    postGHN(url, msg);    
}else if(~pageUrl.indexOf("/gp/cart/view.html")){
    /* カートページを訪れたときの処理 */

    var msg = "それ本当に必要なの？";    
    postGHN(url, msg);
}

/* google-home-notifierにPOSTするための関数 */
function postGHN(url, msg) {
    var xhr = new XMLHttpRequest();
    msg = encodeURIComponent(msg);

    xhr.open("POST", url, true);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.withCredentials = "true";    
    xhr.send("msg=" + msg);
}
```

# デモ
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Amazonのサイトを見ると、Google Home Miniが無駄遣いしないように釘をさしてくれる拡張機能を作りました！ <a href="https://t.co/BMVA2MLpxz">pic.twitter.com/BMVA2MLpxz</a></p>&mdash; にみり (@nimiri_) <a href="https://twitter.com/nimiri_/status/979706326505762816?ref_src=twsrc%5Etfw">March 30, 2018</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Google Home との楽しい同棲生活に少し近づいた気がしますね！

~~作り終わったあとで、スマートスピーカーを使う必要性が全くないことに気づきました~~