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

##東京アラートBOT

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


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

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

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

#完成品


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">東京アラートBOTを製作しました！最新の情報を取得してくれます。<a href="https://twitter.com/hashtag/JavaScript?src=hash&amp;ref_src=twsrc%5Etfw">#JavaScript</a>　<a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a><a href="https://t.co/brsoDYN70Z">https://t.co/brsoDYN70Z</a> <a href="https://t.co/lddhU3yBrx">pic.twitter.com/lddhU3yBrx</a></p>&mdash; Toshiki (@Hirasawa1987) <a href="https://twitter.com/Hirasawa1987/status/1298595572643815425?ref_src=twsrc%5Etfw">August 26, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
#構成
##環境
- 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](https://qiita.com/n0bisuke/items/ceaa09ef8898bee8369d)

##データ元

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

[東京都新型コロナウイルス感染症対策サイト](https://stopcovid19.metro.tokyo.lg.jp/)

ソースコードはMITライセンスで公開されており、誰でも自由に利用することができるそうです。 詳しくは、 [GitHub リポジトリ](https://github.com/tokyo-metropolitan-gov/covid19) をご確認ください。

#コード

```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が簡単に作れるのでめちゃめちゃ便利です。サービスを高速で構築できそう。
[東京都新型コロナウイルス感染症対策サイト](https://stopcovid19.metro.tokyo.lg.jp/)のおかげで、素早く必要なデータを取得できました。

今後もLINE Messaging APIを活用しアウトプットしたいと思います。