Google Homeにスプラトゥーン2のステージ情報を教えてもらう

#モチベ
クリスマスプレゼントとして、Google Home Miniをゲットしたので、Splatoon2のステージ情報を教えてもらえるようにした。色々なところでコケたけど、できたので報告します。
#完成イメージ
Google Home miniに「ステージ情報教えて」と言うと、IFTTTがfirebaseのリアルタイムDBに書き込むので、そのタイミングでnode.jsが動いて、ステージ情報を教えてくれる。
![概念図.png](https://qiita-image-store.s3.amazonaws.com/0/216625/3ed85a09-956f-3bee-382b-f0a700e50ccd.png)
#環境
ラズパイゼロW
Google home mini

こんだけ
#準備
作ったプログラムが動作したのを確認した後にこれ書いているので、うまくいかないかも。すまん。

```bash:
pi@raspberrypi:~/Documents$mkdir google-home
pi@raspberrypi:~/Documents$cd google-home
```

##npmとnode.jsとかの取得

```bash:
pi@raspberrypi:~/Documents/google-home$sudo apt-get install -y nodejs npm
pi@raspberrypi:~/Documents/google-home$sudo npm cache clean
pi@raspberrypi:~/Documents/google-home$sudo npm install npm n -g
pi@raspberrypi:~/Documents/google-home$sudo n lts
pi@raspberrypi:~/Documents/google-home$npm init
pi@raspberrypi:~/Documents/google-home$sudo apt-get install libavahi-libdnssd-dev
pi@raspberrypi:~/Documents/google-home$sudo apt-get install libavahi-compat-libdnssd-dev
```
##google-home-notifierとfirebaseとかの取得

```bash:
pi@raspberrypi:~/Documents/google-home$npm install google-home-notifier
pi@raspberrypi:~/Documents/google-home$curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
pi@raspberrypi:~/Documents/google-home$sudo apt-get install git-core libnss-mdns
pi@raspberrypi:~/Documents/google-home$npm install firebase
```
#ステージ情報の取得
PHPを使って、[スプランプ](https://splamp.info/spstage2/)ってとこでステージ情報を取得できる。
このプログラムを2時間おきに実行して、テキストsplatoon2_stage_now.txtに書き込んでおく。

```PHP:splatoon2_stage_now.php
<?php

$data=splatoon2_stage_info();
echo $data;
$fp=fopen("/home/pi/Documents/php/splatoon2_stage_now.txt","w");
fwrite($fp,$data);
fclose($fp);

function splatoon2_stage_info(){
	$url="https://spstage2.splamp.info/now?timezone=jst";
	$json=file_get_contents($url);
	$ary=json_decode($json,true);
	
	print_r($ary);
	$str=null;
	$str="レギュラーのステージ情報です\n";
	$str.=$ary['result']['regular'][0]['maps']['0']['name']."と\n";
	$str.=$ary['result']['regular'][0]['maps']['1']['name']."です\n";

	$str.="次にガチマッチのステージ情報です\n";
	$str.=$ary['result']['ranked'][0]['rule']['name']."で\n";
	$str.=$ary['result']['ranked'][0]['maps']['0']['name']."と\n";
	$str.=$ary['result']['ranked'][0]['maps']['1']['name']."です\n";

	$str.="次にリーグマッチのステージ情報です\n";
	$str.=$ary['result']['league'][0]['rule']['name']."で\n";
	$str.=$ary['result']['league'][0]['maps']['0']['name']."と\n";
	$str.=$ary['result']['league'][0]['maps']['1']['name']."です\n";
	
	return $str;
}

?>
```
実行結果

```:splatoon2_stage_now.txt
レギュラーのステージ情報です
エンガワ河川敷と
ザトウマーケットです
次にガチマッチのステージ情報です
ガチアサリで
Ｂバスパークと
モズク農園です
次にリーグマッチのステージ情報です
ガチヤグラで
ホッケふ頭と
タチウオパーキングです
```
#node.js周り
ラズパイに常駐させるためにforeverを入れる。configの伏せてある部分は各自の用意をしてください。(参考参照)

```:
pi@raspberrypi:~/Documents/google-home$sudo npm install forever -g
pi@raspberrypi:~$forever start test.js
```

```javascript:test.js
var firebase=require("firebase");
var googlehome=require("google-home-notifier");
var fs = require('fs');
var language="ja";

googlehome.device('リビング',language);
googlehome.ip('192.168.1.254');

// Initialize Firebase
var config = {
	apiKey: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
	authDomain: "XXXXXXXXXXXXXXXXXXXXXXXX.firebaseapp.com",
    	databaseURL: "https://XXXXXXXXXXXXXXXX.firebaseio.com",
    	projectId: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    	storageBucket: "XXXXXXXXXXXXXXXXXXXXXXXXX.appspot.com",
    	messagingSenderId: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
};
firebase.initializeApp(config);

//jsonからvalueに一致する値取得
const getJsonData = (value, json) => {
  for (var word in json)  if (value == word) return json[word];
  return json["default"];
}

//database更新時
const path = "/";
const key = "word";
const db = firebase.database();
db.ref(path).on("value", function(changedSnapshot) {
  //値取得
  const value = changedSnapshot.child(key).val();
  if (value) {
    console.log(value);
    googlehome.notify((fs.readFileSync('/home/pi/Documents/php/splatoon2_stage_turf.txt')).toString(),function(res){
	console.log(res);
    });
  }
});
```
#余談
時間が無くてあんまり詳しく書けてないのは申し訳ない。自分が見たサイトは下記にあるので参考にしてください。実行すると、通常よりぎこちない日本語で発声されるのですが、それは[このへん](http://www.neo-tech-lab.co.uk/googletts/)に書いてあるらしいです。(よくわからなかった)
#参考
[スプランプ](https://splamp.info/spstage2/)
[Raspberry Pi に google-home-notifier を入れた時に躓いたメモ](https://god-support.blogspot.jp/2017/10/raspberry-pi-google-home-notifier.html)
[Raspberry PiにNode.jsとnpmの最新版をインストールする](https://qiita.com/mascii/items/77c685df65c4cbca9315)
[Google Home開発入門 / google-home-notifier解説](https://qiita.com/SatoTakumi/items/c9de7ff27e5b70508066)
[GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます](https://qiita.com/azipinsyan/items/db4606aaa51426ac8dac)
[node.js node.jsスクリプトをforeverでデーモン化する](http://onlineconsultant.jp/pukiwiki/?node.js%20node.js%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92forever%E3%81%A7%E3%83%87%E3%83%BC%E3%83%A2%E3%83%B3%E5%8C%96%E3%81%99%E3%82%8B)
[Node.jsの標準モジュール(https)でAPIを叩く(GETのみ)](https://qiita.com/r-yanyo/items/3ef153dac12e69a2c46c)
[Google Home、IFTTT、Firebase、Node.js、irMagicianを使ってシーリングライトを音声操作する](https://qiita.com/miso_develop/items/c2008235cb4a8567cfa9)
[新着メールを知らせてくれるGoogle Home](https://qiita.com/tetotetote/items/4d6ac866b716695fa4c9#firebase%E3%81%AE%E8%A8%AD%E5%AE%9A)
[Google Homeにセンサーの値を言ってもらう](https://qiita.com/AmbientData/items/d29a2977fea79a4d4a00)
[Google HomeにつぶやくとTwitterでつぶやくやつ、IFTTTですぐできた。](https://qiita.com/kazunori279/items/fdadbfde58ed133bb9d5)
[google-home-notifier](https://github.com/noelportugal/google-home-notifier)