###はじめに
LINE BOTを利用し、六曜日とその内容を自動で返信するものを作りをました。
入力文字を替えることで、NASA(非公式)の「今日の天文学写真」を楽しむこともできます。
###目的
六曜にこだわる人は少なくなってきていると思いますが、まだ大安などの吉日を好む人は多いと思います、個人的なイベントが発生すると「今日は大安だっけ?」「友引かな?」などとたまに気にすることがあるので、「今日は」と入力する今日の六曜日を自動返信するBOTを製作しました。
別で作ったほうがいいかと思いましたが、今回は練習も兼ねてで画像も取得したいと思いましたので、「今日の画像は」と入力するとNASA(非公式)より「今日の天文学写真」を取得し自動で表示します。宇宙の美しさ広さをみて、自分の小ささを感じます。
- node.js v14.5.0
- @line/bot-sdk 7.0.0
- axios 0.19.2
- date-utils 1.2.21
- express 4.17.1
LINE Messaging API
Node.jsでLINE BOTを作る方法はこちらを参考にしました。
1時間でLINE BOTを作るハンズオン (資料+レポート) in Node学園祭2017 #nodefest
##今回使用したWEBAPI
-
旧暦や六曜など日付に関する情報を取得できるAPI(外部サイト)
- 指定した日付に関する様々な(「今日は何の日」的な)情報を取得することができます。
-
- 「今日の天文学写真」を取得するのに使用しました。
#コード
"use strict";
const express = require("express");
const line = require("@line/bot-sdk");
const axios = require('axios');
const PORT = process.env.PORT || 3030;
const config = {
channelSecret: 'channelSecret',
channelAccessToken: 'channelAccessToken'
};
const app = express();
require('date-utils');
var dt = new Date();
var formatted = dt.toFormat("YYYY-MM-DD");
console.log(formatted);
app.get("/", (req, res) => res.send("Hello LINE BOT!(GET)")); //ブラウザ確認用(無くても問題ない)
app.post("/webhook", line.middleware(config), (req, res) => {
console.log(req.body.events);
//ここのif分はdeveloper consoleの"接続確認"用なので削除して問題ないです。
if (
req.body.events[0].replyToken === "00000000000000000000000000000000" &&
req.body.events[1].replyToken === "ffffffffffffffffffffffffffffffff"
) {
res.send("Hello LINE BOT!(POST)");
console.log("疎通確認用");
return;
}
Promise.all(req.body.events.map(handleEvent)).then((result) =>
res.json(result)
);
});
const client = new line.Client(config);
async function handleEvent(event) {
if(event.type !== 'message' || event.message.type !== 'text'|| event.message.type !== 'location') {
return Promise.resolve(null);
}
let shakkou='';
let mes = '';
if(event.message.text === '今日は') {//「きょうは」と入力する。
const res = await axios.get('https://dateinfoapi.appspot.com/v1?date='+ formatted);
const pushText = res.data.rokuyo;
if(res.data.rokuyo === '赤口'){
shakkou ="正午の前後を除いて凶日、午前11時ごろから午後1時ごろまでは吉です。";
}else if(res.data.rokuyo === '大安'){
shakkou ="何事においても吉、成功しないことはない日";
}else if(res.data.rokuyo === '先勝'){
shakkou ="午前は吉、午後は凶";
}else if(res.data.rokuyo === '友引'){
shakkou ="朝晩は吉、昼は凶";
}else if(res.data.rokuyo === '先負'){
shakkou ="午前は凶、午後吉";
}else if(res.data.rokuyo === '仏滅'){
shakkou ="大凶日";
}
console.log(pushText);
mes = '今日は「'+ pushText +'」です。\n'+ shakkou;
return client.replyMessage(event.replyToken, {
type: 'text',
text: mes,
});
}else if(event.message.text === '今日の画像は'){
const response = await axios.get('https://api.nasa.gov/planetary/apod?api_key='+ {APIkey});
console.log(response.data.url);
await client.pushMessage(event.source.userId, {
type: 'image',
originalContentUrl:response.data.url,
previewImageUrl:response.data.url,
});
}
}
app.listen(PORT);
console.log(`Server running at ${PORT}`);
終わりに
LINEの国内ユーザー数は8400万人であり、SNSの中ではダントツで1位である、ちなみに2位のTwitterは4500万人(2020年6月時点)。メッセージインフラとして定着しているという利点があり。UIなども簡単にできるようなので、サービスを高速で構築できそう。
今後もLINE Messaging APIを活用しアウトプットしたいと思います。