あままこのブログ

役に立たないことだけを書く。

Google Homeに今NHKで放送している番組を教えてもらう(Actions On Google & DialogFlow & NHK番組表API)

というわけで、購入しましたGoogle Home。

Google Home

Google Home


下記のサイトを参考にしながら色々遊んでみたりしています。
appllio.com
azanaerunawano5to4.hatenablog.com
qiita.com
matagotch.hatenablog.com
特にIFTTTと組み合わせると面白いですね。ただ、IFTTTだけだと、いまいち複雑な処理とかができなくて億劫。
そんな中下記のサイトに気になる記述を発見。
qiita.com

Action on Googleによる機能追加

Actions on Googleを利用することで、自作のアプリをGoogleアシスタント内で提供することができる。 https://developers.google.com/actions/

これは面白そう、というわけで自作のアプリ、というかチャットボットをちょっと作ってみました。
結果がこちらです。
youtu.be
目玉は家族に勝手につけられましたので気にしなくていいです。

作り方

とりあえずまず、下記のサイトを参考にしてGoogle Homeで受け答えしてくれるようなチャットボットをGoogle Assistant上に作ります。
qiita.com
次に、下記サイトを参考に、テレビ局の単語をEntitiesに登録し、登録したIntentに少し手直しします。
tokibito.hatenablog.com
僕のボットだとこんな感じです。
f:id:amamako:20171016031641p:plain
f:id:amamako:20171016031650p:plain
Webhookにチェックを入れるのを忘れずに。
続いてFulfillmentの方へ行き、「Inline Editor(Powered by Cloud Functions for Firebase)」という項目をENABLEにします。
これの使い方は下記のサイトを参考にしましょう。 qiita.com
ここに、情報を受け取って、処理し、返答を返すコードをNodeJSで書きます。
具体的には次のようなコードを追加しました。

//リクエストの取得
const http = require('http');

//(中略)

    'getTVProgram':()=>{
        var tvStation = {
            "sougou" : "g1",
            "etv" : "e1",
            "bs1" : "s1",
            "bspremium" : "s3"
            
        }
        //URLを定義
        var url = 'http://api.nhk.or.jp/v2/pg/now/{area}/' + tvStation[parameters.TVStation] + '.json?key={apikey}';
        console.log(url);
        if (requestSource === googleAssistantRequest) {
            //リクエスト送信
            http.get(url, function(res) {
                var body = '';
                res.setEncoding('utf8');
                res.on('data', function(chunk) {
                    body += chunk;
                });
                res.on('end', function() {
                    var ret = JSON.parse(body);
                    sendGoogleResponse('いま放送している番組は' + ret.nowonair_list[tvStation[parameters.TVStation]].present.title + 'です'); // Send simple response to user
                });
            }).on('error', function(e) {
                console.log(e.message);
            });
        } else {
            //リクエスト送信
            http.get(url, function(res) {
                var body = '';
                res.setEncoding('utf8');
                res.on('data', function(chunk) {
                    body += chunk;
                });
                res.on('end', function() {
                    var ret = JSON.parse(body);
                    sendResponse('いま放送している番組は' + ret.nowonair_list[tvStation[parameters.TVStation]].present.title + 'です'); // Send simple response to user
                });
            }).on('error', function(e) {
                console.log(e.message);
            });
        } 
    },

なんかrequestモジュールが使えなかったのでhttpモジュールを使ってます。
なお、この情報の取得にはNHK番組表APIを使っています。
NHK番組表API
{area}と{apikey}に何を入れるかは上記のページを参照して登録してください。
コードを書いて、DEPLOYを押したら作業完了です。

追記 2017-10-16 4:06

書き忘れてました、このコード、Firebase上で動いてるんですが、Firebaseでは課金しないと外部のネットワークにアクセスできません。というわけで課金しましょう。

感想

おもったより簡単にできてびっくり。

次にしたいこと

これ公開できれば良いんだけどどうやって公開するんだろう