Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9047

花粉症対策デジタル医療相談Botの開発 GASでユーザー毎に飛散予測を定時プッシュ

$
0
0

概要

現在スギ花粉症患者さん向けに医療機関を受診しなくてもLINEで市販の医療用医薬品を使い分けることが出来るサービスを開発中です。

3月4日までCAMPFIREでテスト版ユーザー募集中です。花粉症の方は是非ご参加ください!
CAMPFIREのプロジェクトページはこちら
LINEで花粉症の重症度や最適な市販薬がわかるデジタル医療相談【アレルナビ】

以前のQiita記事はこちら
花粉症対策デジタル医療相談Botの開発 ユーザーIDと位置情報をFirestoreで管理

ユーザーが特定した地点のピンポイント花粉飛散予測を定時にプッシュする機能を開発中なのでその辺りをまとめました。

作成方法

1. 気象予測API
今回のアプリではこちらの気象APIを利用しています。
Lifesocket

2. プログラムを作成
気象データを取得する関数 getweather()

asyncfunctiongetweather(userlat,userlong){constBASE_URL="***************************************";letPATH=`/location/${userlat}/${userlong}`;//緯度経度leturl=BASE_URL+PATH+"?days=7";//7日分取得の場合letres=awaitaxios.get(url,{headers:{"Content-Type":"application/json",Accept:"application/json","x-access-key":"***********************************"}});returnres.data;}

飛散予測をプッシュする関数pushpollen()

asyncfunctionpushpollen(){//Firebaseから位置情報データを受ける    letlocationsRef=db.collection('locations');letalllocations=locationsRef.get().then(snapshot=>{snapshot.forEach(asyncdoc=>{console.log(doc.id,'=>',doc.data());letlineId=doc.data().line_user_id;letuserlat=doc.data().latitude;letuserlong=doc.data().longitude;if(lineId==null){console.log("IDなし")}else{letitem2=awaitgetweather(userlat,userlong);console.log(item2);leturl2;let[date,time]=item2.Daily[1].DateTime.split("T");if(item2.Daily[1].Index===0){url2="**********";}elseif(item2.Daily[1].Index===1){url2="**********";}elseif(item2.Daily[1].Index===2){url2="**********";}elseif(item2.Daily[1].Index===3){url2="**********";}elseif(item2.Daily[1].Index===4){url2="**********";}client.pushMessage(lineId,{type:"template",altText:"This is a buttons template",template:{type:"buttons",thumbnailImageUrl:url2,imageAspectRatio:"rectangle",imageSize:"cover",imageBackgroundColor:"#FFFFFF",title:`${date}${item2.PinpointName}の花粉飛散情報`,text:item2.Daily[1].IndexCommentary,defaultAction:{type:"uri",label:"View detail",uri:"**********"},actions:[{type:"message",label:"花粉症の重症度を判定",text:"判定"}]}})}});}).catch(err=>{console.log('Error getting documents',err);});}

3. GASで定時実行
1.GASファイルを作成
Googleにアクセスしてログイン
Google App Script
新しいプロジェクトを選択
image.png

2.コード.jsに以下のように書く

functionmyFunction(){UrlFetchApp.fetch("実行させたいURL/cron");}

3.トリガーを追加
コード編集画面のメニューにある時計マークをクリック
image.png

pushしたい時間帯に設定
(何分おきや何時間おき、毎週何曜日のこの時間なども設定できます)
image.png

4. プログラムの書き換え
以下を追記して定時に飛散予測をプッシュする関数pushpollen()が実行されるようにする。

app.get("/cron",(req,res)=>{pushpollen();});

完成図

定時に花粉予測がプッシュされました。
IMG-1039.jpg

考察

非同期処理の理解が浅かったためユーザーID毎に異なる飛散情報をプッシュさせるまでにかなり苦労しました。定時実行に関してはGASを使うと無料で簡単にCronのように時間指定で任意のURLをリクエストできちゃうのでとても便利ですね。


Viewing all articles
Browse latest Browse all 9047