JavaScript
Node.js
NOW
linebot
Node.jsDay 12

Node.jsで仮想通貨の価格を教えてくれるLINEBOTを作った

Node.js Advent Calendarが埋まっていなかったので、大晦日ですが代わりに投稿させていただきました。

予定が被り、Node学園祭に行けない悲しみを抱えながらQiitaを眺めていたら、LINEBOT作成のハンズオン資料が上がっていました。
今回はこれをちょっといじってみて、LINEBOTの作成をしてみることにしました。

制作物&ソースコード紹介

今回作ったBOTはこれです。

IMG_1187.PNG

※スクショしたのがちょっと前なので価格が古いです。

ソースコードはGitHubにて公開しています。
見たい方はコチラ

参考にさせていただいたもの

今回、前述の通りNode学園祭2017のハンズオン資料を参考にさせていただきました。

@n0bisukeさんの1時間でLINE BOTを作るハンズオン (資料+レポート) in Node学園祭2017 #nodefestというハンズオンの資料ですが、工程の説明が丁寧でとても分かりやすかったです。

願わくば、ぜひハンズオンに参加してみたかったです……。

仕組み

LINEBOTの骨組みは完全にハンズオン資料を参考にさせていただきました。

仕組みは単純で、BitflyerとCoinCheckのAPIを叩いて価格を持ってきているだけです。
脳を殺したコピペのせいで冗長的になってしまっています。
もっといい書き方があれば、勉強にもなるのでぜひマサカリをお願いします。

今回は2パターンの方法でAPIの取得をしています。

HTTPモジュールを使う方法

server.js
const bitcoin = async(userId) => {
    http.get(URL, (res) => {
        var body = '';
        res.setEncoding('utf8');

        res.on('data', (chunk) => {
            body += chunk;
        });

        res.on('end', (res) => {
            res = JSON.parse(body);
            console.log(res);

            client.pushMessage(userId, {
                type: 'text',
                text: `今のビットコインの最終取引価格は${res.ltp}円だよ!`,
            });
        });
    });
}

requestモジュールを使う場合

server.js
const ETH = async(userId) => {
    request.get({
        url: "https://coincheck.jp/api/rate/eth_jpy",
        json: true
    }, (err, res, body) => {
        client.pushMessage(userId, {
            type: 'text',
            text: `今のイーサリアムの価格は${body.rate}円だよ!`
        });
    });
}

まとめ・感想

LINEBOTの作成は初めてでしたが、意外に簡単に作れてしまいました。
主にハンズオン資料の出来の良さのおかげです、ありがとうございます。
LINEBOT、以前見たときと仕様が変わっている気がします(気のせいかもしれませんが……)。
実用的にするなら追加時メッセージなどをいじってみるのもいいと思います。

また、NOWでのデプロイも初めてだったのですが、こちらもささっとデプロイできて感涙です。
NOWについてはあんまり聞かないのですが、もしかして僕の見識が狭いだけでしょうか。
しばらくするとインスタンスがFROZENになってしまうのですが、LINEを送ればREADYに戻ってくれるのがありがたいですね。

いつかハンズオンやもくもく会なんかにも参加してみたいです。