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

モチベ

クリスマスプレゼントとして、Google Home Miniをゲットしたので、Splatoon2のステージ情報を教えてもらえるようにした。色々なところでコケたけど、できたので報告します。

完成イメージ

Google Home miniに「ステージ情報教えて」と言うと、IFTTTがfirebaseのリアルタイムDBに書き込むので、そのタイミングでnode.jsが動いて、ステージ情報を教えてくれる。
概念図.png

環境

ラズパイゼロW
Google home mini

こんだけ

準備

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

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

npmとnode.jsとかの取得

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とかの取得

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を使って、スプランプってとこでステージ情報を取得できる。
このプログラムを2時間おきに実行して、テキストsplatoon2_stage_now.txtに書き込んでおく。

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
レギュラーのステージ情報です
エンガワ河川敷と
ザトウマーケットです
次にガチマッチのステージ情報です
ガチアサリで
Bバスパークと
モズク農園です
次にリーグマッチのステージ情報です
ガチヤグラで
ホッケふ頭と
タチウオパーキングです

node.js周り

ラズパイに常駐させるためにforeverを入れる。configの伏せてある部分は各自の用意をしてください。(参考参照)

pi@raspberrypi:~/Documents/google-home$sudo npm install forever -g
pi@raspberrypi:~$forever start test.js
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);
    });
  }
});

余談

時間が無くてあんまり詳しく書けてないのは申し訳ない。自分が見たサイトは下記にあるので参考にしてください。実行すると、通常よりぎこちない日本語で発声されるのですが、それはこのへんに書いてあるらしいです。(よくわからなかった)

参考

スプランプ
Raspberry Pi に google-home-notifier を入れた時に躓いたメモ
Raspberry PiにNode.jsとnpmの最新版をインストールする
Google Home開発入門 / google-home-notifier解説
GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます
node.js node.jsスクリプトをforeverでデーモン化する
Node.jsの標準モジュール(https)でAPIを叩く(GETのみ)
Google Home、IFTTT、Firebase、Node.js、irMagicianを使ってシーリングライトを音声操作する
新着メールを知らせてくれるGoogle Home
Google Homeにセンサーの値を言ってもらう
Google HomeにつぶやくとTwitterでつぶやくやつ、IFTTTですぐできた。
google-home-notifier

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.