5
0

More than 3 years have passed since last update.

東京アラートBOTを作ってみた

Last updated at Posted at 2020-08-26

東京アラートBOT

LINE BOTを利用し、新型コロナウィルスの新規陽性者数、死亡者数、検査数、東京アラートが出ているかどうかを返してくれるものを作成しました。

東京アラートを発令する基準

作る過程で東京アラートが発令される基準を調べました。

  • 新規陽性者数
  • 新規陽性者における接触不明率
  • 週単位の陽性者増加比
  • 重症患者数
  • 入院患者数
  • PCR検査の陽性者数
  • 受診相談窓口における相談件数

上記の7項目の状況によって検討されるようです。
重傷者が増えていないので、当面は発令されそうにありませんね。

完成品

構成

環境

  • node.js v14.5.0
  • @line/bot-sdk 7.0.0
  • axios 0.19.2
  • express 4.17.1

LINE Messaging API

Node.jsでLINE BOTを作る方法はこちらを参考にしました。

1時間でLINE BOTを作るハンズオン (資料+レポート) in Node学園祭2017 #nodefest

データ元

東京における新型コロナウイルスのデータは以下のサイト同じデータです。

東京都新型コロナウイルス感染症対策サイト

ソースコードはMITライセンスで公開されており、誰でも自由に利用することができるそうです。 詳しくは、 GitHub リポジトリ をご確認ください。

コード

index.js
"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を活用しアウトプットしたいと思います。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0