ENGINEER BLOG

ENGINEER BLOG

スクレイピング+LINE Notifyでの自動通知をやってみた。

はじめまして、イノベーション本部の中村です。
7年目にしてエンジニアブログ初登場です。新規ビジネス企画を行っております。

身近な課題やお客様のご要望等から 『これってITを駆使したら課題を解決できないかな・・・?』
ということを日頃考えているのですが、先日チームのディスカッションにて、
「コロナの感染者数ってサイトを覗きに行ったりニュースを見たりしないと把握できないよね~」
「うんうん、しかもサマリ情報が多いし…」という話になりました。

たしかに。私は茨城県に住んでいるので、地元茨城の情報も即座に知りたい。
そこで、思い立ったが吉日。早速1日で作っちゃいました!

今回は、
LINE Notifyを活用した “新型コロナウィルス感染者数を自動通知してくれる LINE bot”
の作り方について、ご紹介したいと思います。

さあ、みていきましょう!

1.データの取得

webサイトを決めよう

まずは感染者数のデータが必要ですね。
今回は、茨城県の有志の方がつくった下記サイトを活用させて頂きました。

茨城県 新型コロナウイルス感染症対策サイト(非公式)

pic0

スクレイピングをやってみる

webサイトからデータを取ってくるにはスクレイピングという技術を活用します。
ですがなんだか難しそう・・・?そんなことはありません。
ここで便利な関数をご紹介します。

スプレッドシートの関数「IMPORTHTML」

html形式の表の場合に限り、簡単にデータを抜いてくることができる優れモノ。
今回はこちらの関数を使用して、下記のようにスプレッドシートにデータをとってきます。

※スクレイピングをする際は、webサイトの利用規約を必ずご確認の上、行ってください。

picture1

これでデータの取得は完了です。

2.LINE Notifyの設定

LINEで通知できるようにトークンを発行しよう

次に、LINE Notifyを使ってLINE通知をさせるようにします。
そもそもLINE Notifyって何?という方はこちらをご参考ください。

LINE Notify とは
GitHub,IFTTT,MackerelなどのWebサービスからの通知を、LINEで受信することが出来る便利なサービスです。

<設定手順>

  1. LINE Notifyに自分のLINE IDでログイン

  2. マイページを選択

  3. トークンの発行ボタンを押下
    pic4

  4. 通知を送信するトークルームを選択
    (新しくルームを作って通知する場合は予め準備しておきましょう)
    pic4-2

  5. トークンをコピー(あとで使います)
    pic5-1

  6. トークンができたことを確認
    pic6

  7. 設定したルームに「LINE notify」 を招待

これでLINE Notifyの設定は完了です。

3.GASでソースコード記述

LINE通知されるようにソースコードを書こう

さあネタを入手し、LINE NotifyのトークンURLもゲットしたので、
スプレッドシートで取得した情報をLINEに通知するようにします。

ここは少しだけプログラミングが必要です。Google Apps Scriptで記述していきます。

function lineNotification() {
  /*スプレッドシートから取得した情報をLINE通知する*/
  
  //シート情報取得
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('感染者数_茨城県');

  //項目設定
  var title = "茨城県の新型コロナウィルス感染者数です。";
  var content1 = "新規:";
  var content2 = "累計:";
  var kaigyou = "\n";
  var kugyou = "\n\n";
  var all_text = "";
  var term = 3;
  var url = "https://ibaraki.stopcovid19.jp/";
  
  //シートからデータ取得
  for(var i = 2; i< 2+term; i++){
    //値取得
    var date =sheet.getRange(i,1).getValue();  
    var value_hibetsu =sheet.getRange(i,2).getValue();
    var value_ruikei = sheet.getRange(i,3).getValue();
    
    //LINE通知文作成
    var text = date + kaigyou + (content1+value_hibetsu+"人") + kaigyou + (content2+value_ruikei+"人") + kugyou;
    var all_text = all_text + text;
  }
  
  //LINE通知関数呼び出し
  sendHttpPost_lineNotification(kugyou + title + kugyou + all_text + url);
  
}

さきほど発行したトークンを指定します。

// LINE通知関数
function sendHttpPost_lineNotification(content){
  /*LINEのトークンを指定してLINE通知を行う*/
  //トークン設定
  var token = ['[設定手順5.で発行されたトークン]']; 
  var options =
   {
     "method"  : "post",
     "payload" : {"message": content,
                  }, 
     "headers" : {"Authorization" : "Bearer "+ token}
 
   };
 
   UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

4.いよいよ、実行!

書き終えたら、GASの実行ボタンから該当のファンクションを選んでいざ実行。

1秒も経たないうちにLINEの通知音が!!
LINEで確認すると以下のようにちゃんと届きました!成功です。

pic7

GASの時間指定トリガーをつかえば、毎朝LINE通知が可能ですね。

まとめ

いかがでしたでしょうか。ちょっとした工夫で日頃の情報チェックが便利に!
とっても簡単なので皆さんもぜひやってみては?

それでは感染予防をしっかりして、乗り越えていきましょう。
最後までお付き合い頂き、ありがとうございました。