##東京アラートBOT
LINE BOTを利用し、新型コロナウィルスの新規陽性者数、死亡者数、検査数、東京アラートが出ているかどうかを返してくれるものを作成しました。
###東京アラートを発令する基準
作る過程で東京アラートが発令される基準を調べました。
- 新規陽性者数
- 新規陽性者における接触不明率
- 週単位の陽性者増加比
- 重症患者数
- 入院患者数
- PCR検査の陽性者数
- 受診相談窓口における相談件数
上記の7項目の状況によって検討されるようです。
重傷者が増えていないので、当面は発令されそうにありませんね。
#完成品
#構成 ##環境 - node.js v14.5.0 - @line/bot-sdk 7.0.0 - axios 0.19.2 - express 4.17.1東京アラートBOTを製作しました!最新の情報を取得してくれます。#JavaScript #protoouthttps://t.co/brsoDYN70Z pic.twitter.com/lddhU3yBrx
— Toshiki (@Hirasawa1987) August 26, 2020
LINE Messaging API
Node.jsでLINE BOTを作る方法はこちらを参考にしました。
1時間でLINE BOTを作るハンズオン (資料+レポート) in Node学園祭2017 #nodefest
##データ元
東京における新型コロナウイルスのデータは以下のサイト同じデータです。
ソースコードはMITライセンスで公開されており、誰でも自由に利用することができるそうです。 詳しくは、 GitHub リポジトリ をご確認ください。
#コード
"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: '××××××××××××××××',
channelAccessToken: '×××××××××××××'
};
const app = express();
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') {
return Promise.resolve(null);
}
if(event.message.text === 'こんにちは'){
let replyText = 'こんにちは。東京の新型コロナ情報LINEボットです。\n\n'
+ '取得ボタン:\n'
+ '新規陽性者、死亡者数、検査数を表示します\n'
+ '※最新のお知らせは19:30分ごろ更新されます。\n\n'
+ '都庁アイコン:\n'
+ '東京アラートが発令されているか教えてくれます\n';
return client.replyMessage(event.replyToken, {
type: 'text',
text: replyText
});
}
let tokyo_alert='';
let mes = '';
if(event.message.text === '東京アラート'){
const response = await axios.get('https://raw.githubusercontent.com/tokyo-metropolitan-gov/covid19/master/data/tokyo_alert.json'); console.log(response.data.alert);
const alert = response.data.alert;
if(alert === false){
tokyo_alert ="東京アラートは発令されていません。";
console.log(tokyo_alert);
} else if (alert === true){
tokyo_alert ="東京アラートが発令されました!";
console.log(tokyo_alert);
}
mes = '現在は、'+ tokyo_alert;
return client.replyMessage(event.replyToken, {
type: 'text',
text: mes,
});
}
else if(event.message.text === '最新情報'){
const res = await axios.get('https://raw.githubusercontent.com/tokyo-metropolitan-gov/covid19/master/data/news.json');
console.log(res.data.newsItems[1].text);
const tokyo_data = res.data.newsItems[1].text;
mes2 = tokyo_data;
await client.replyMessage(event.replyToken, {
type: 'text',
text: mes2,
});
}
}
app.listen(PORT);
console.log(`Server running at ${PORT}`);
感想
今回はリッチメニューを使いました、UIが簡単に作れるのでめちゃめちゃ便利です。サービスを高速で構築できそう。
東京都新型コロナウイルス感染症対策サイトのおかげで、素早く必要なデータを取得できました。
今後もLINE Messaging APIを活用しアウトプットしたいと思います。