はじめに
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(外部サイト)
- 指定した日付に関する様々な(「今日は何の日」的な)情報を取得することができます。
- 「今日の天文学写真」を取得するのに使用しました。
コード
server.js
"use strict";constexpress=require("express");constline=require("@line/bot-sdk");constaxios=require('axios');constPORT=process.env.PORT||3030;constconfig={channelSecret:'channelSecret',channelAccessToken:'channelAccessToken'};constapp=express();require('date-utils');vardt=newDate();varformatted=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));});constclient=newline.Client(config);asyncfunctionhandleEvent(event){if(event.type!=='message'||event.message.type!=='text'||event.message.type!=='location'){returnPromise.resolve(null);}letshakkou=''; letmes='';if(event.message.text==='今日は'){//「きょうは」と入力する。constres=awaitaxios.get('https://dateinfoapi.appspot.com/v1?date='+formatted);constpushText=res.data.rokuyo;if(res.data.rokuyo==='赤口'){shakkou="正午の前後を除いて凶日、午前11時ごろから午後1時ごろまでは吉です。";}elseif(res.data.rokuyo==='大安'){shakkou="何事においても吉、成功しないことはない日";}elseif(res.data.rokuyo==='先勝'){shakkou="午前は吉、午後は凶";}elseif(res.data.rokuyo==='友引'){shakkou="朝晩は吉、昼は凶";}elseif(res.data.rokuyo==='先負'){shakkou="午前は凶、午後吉";}elseif(res.data.rokuyo==='仏滅'){shakkou="大凶日";}console.log(pushText);mes='今日は「'+pushText+'」です。\n'+shakkou;returnclient.replyMessage(event.replyToken,{type:'text',text:mes,});}elseif(event.message.text==='今日の画像は'){constresponse=awaitaxios.get('https://api.nasa.gov/planetary/apod?api_key='+{APIkey});console.log(response.data.url);awaitclient.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を活用しアウトプットしたいと思います。