꽃가루 알레르기 LINE Bot의 데이터를 node.js를 사용하여 Firebase에 출입한다(꽃가루 캘린더 작성③)

개요



이비인후과의 개업 의사입니다.

이번에 이전에 작성한 LINE Bot의 데이터를 node.js를 사용하여 Firebase에 출입할 수 있도록 했습니다.

이전에 만든 LINE Bot의 기사는 이쪽
꽃가루 알레르기의 중증도를 판정하고 자신에게 맞는 시판 약을 가르쳐주는 LINE Bot의 작성

만들기



1.Firebaseno 개인 키 생성 및 준비
이쪽을 참고로 합니다.
서버에 Firebase Admin SDK 추가

기어 마크에서 프로젝트 설정을 선택합니다.


서비스 계정으로 이동하여 하단의 '새 개인 키 생성' 버튼을 누릅니다.


다음에 표시되는 「키 생성」버튼을 누릅니다.
그러면 즉시 생성되어 JSON 파일을 다운로드합니다. 이 단계에서는 긴 문자 수의 파일 이름 .json입니다.
다운로드한 JSON 파일을 serviceAccountKey.json으로 이름을 바꿉니다.

실시간 데이터베이스 페이지에서 databaseURL을 확인합니다.


Firebase 콘솔의 Realtime Database에 있는 데이터를 볼 수 있는 페이지에서 databaseURL을 확인합니다. 빨간색 프레임을 기록해 둡니다.

2. Firebase에 데이터를 기록할 수 있도록

Firebase 관련 설치
npm i firebase-admin

꽃가루 알레르기의 중증도를 판정하고 자신에게 맞는 시판 약을 가르쳐주는 LINE Bot의 작성 에서 작성한 프로그램에 추가합니다.

// Firebase /////////////////////////////////

var admin = require("firebase-admin");

// 1. サービスアカウント鍵を生成しserviceAccountKey.jsonにリネーム
var serviceAccount = require("./serviceAccountKey.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  // 2. Realtime DatabaseのページでdatabaseURLを確認して反映
  databaseURL: "https://*************.com"
});

var db = admin.database();
var ref = db.ref("protoout/studio");
var usersRef = ref.child("messageList");

// LINE /////////////////////////////////////

const express = require('express');
const line = require('@line/bot-sdk');
const axios = require('axios');
const PORT = process.env.PORT || 3000;

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; 
    }

  // Firebaseにも応答を記録 push
  usersRef.push({
    events:req.body.events
  });  

    Promise
      .all(req.body.events.map(handleEvent))
      .then((result) => res.json(result));  

});



3. Firebase에서 데이터를 수신할 수 있도록 합니다.

다음 코드를 추가합니다.
// Firebase Listからデータを受信 child added on
var refMessageList = db.ref("protoout/studio/messageList");
refMessageList.on('child_added', function (snapshot) {
    //postbackの場合
    if (snapshot.val().events[0].type == 'postback') {
      console.log('child_added', snapshot.val().events[0].postback.data)
      userpostback = snapshot.val().events[0].postback.data;
    }
    //messageの場合
    if (snapshot.val().events[0].type == 'message') {
      //message-位置情報の場合
      if (snapshot.val().events[0].message.type == 'location') {
        userlat = snapshot.val().events[0].message.latitude;
        userlong = snapshot.val().events[0].message.longitude;
        getweather();//気象情報をreturnする関数
      }     
    }    
   })

4. 데이터베이스 확인
LINE 데이터가 기록됩니다.


고찰



LINE Bot의 데이터를 Firebase에 출입할 수 있었습니다.
이번에는 Firebase 데이터를 웹 캘린더에 표시할 수 있도록 하고 싶습니다.

좋은 웹페이지 즐겨찾기