파비의 매일매일 공부기록

#1-9 카카오톡 날씨 챗봇 - Heroku API 서버 구축 2 본문

Side Project (완료)/카카오 채널 챗봇 (2020)

#1-9 카카오톡 날씨 챗봇 - Heroku API 서버 구축 2

fabichoi 2021. 1. 2. 23:01

지난 포스팅까지 진행된 사항

- Heroku에 API Server 구성

 

이번 포스팅에서 할 사항

- MariaDB 붙여서 Data.go.kr에서 데이터 받아와서 저장

 

일단 Heroku에서 MariaDB를 구동하는 게 우선이다.

MariaDB 사용을 위해서는 Add-on을 통해서 해야 되는데

아 근데 결제를 카드 등록을 안 하면 Add-on을 사용할 수 없어서
Account Setting > Billing에 아래와 같이 등록해야 한다.

 

설정 후에는 아래와 같이 JawsDB Maria를 눌러서

현재 구성한 Web App에 붙이면 된다.

 

 

Web App에 붙인 후에 아래의 링크를 들어가면

dashboard.jawsdb.com/maria/dashboard

Host, Username, Password, Port 등의 정보를 볼 수 있고

HeidiSQL 등의 SQL Tool로 접속할 수 있다.

 

그럼 이제 Data.go.kr에서 받아온 중기 예보 내용을

MariaDB에 넣어야 되는데

그러려면 Table을 하나 만들어야 된다.

 

생성될 Table 정보

Table 이름 : midterm_forecast

Columns :

- id ; 식별 id (PK)

- weather_desc ; 중기 예보 내용

- update_date ; 업데이트된 날짜 (PK)

CREATE TABLE `midterm_forecast` ( 
`id` INT NOT NULL AUTO_INCREMENT, 
`weather_desc` VARCHAR(50) NULL DEFAULT NULL, 
`update_date` DATE NOT NULL DEFAULT NOW(), 
PRIMARY KEY (`id`, `update_date`) 
) 
COMMENT='midterm_forecast' 
COLLATE='utf8mb4_unicode_ci' 
;

지난 소스에서 추가된 소스는 아래와 같다.

request({
    url: url + queryParams,
    method: 'GET'
  }, function (error, response, body) {
    var $ = cheerio.load(body);
    const wfSv = $("wfSv").text();

    res.send(wfSv);

    const pool = mariadb.createPool({
      host: process.env.MARIA_HOST,
      user: process.env.MARIA_USER,
      password: process.env.MARIA_PASSWORD,
      database: process.env.MARIA_DATABASE
    });

    pool.getConnection()
      .then(conn => {
        conn.query(
          'INSERT INTO `midterm_forecast` (weather_desc, update_date) VALUES(?, ?)',
          [wfSv, update_date]
        ).then(() => {
          conn.end();
        }).catch(err => {
          console.log(err);
          conn.end();
        });
      });
  });

XML 형태의 Response 데이터를

Cheerio라는 Library를 이용해서 중기 정보 TEXT만 가지고 있는 wfSV tag만 뽑아낸 뒤,

maridadb Library를 이용해서 Database에 저장하는 내용이다.

 

매우 간단쓰하게 보이는 내용인데

생각보다 막상 구현하려면 중간중간 막히는 게 있었다.

 

weather로 redirect를 하면

당일 날짜의 06시 기준의 중기정보를 가져와서

Database에 저장하도록 하는 기능은 완료되었다.

 

다음 포스팅에서는

Database에 저장된 중기예보를

REST API가 요청될 때

보내주는 부분의 기능을 작성할 예정이다.

반응형
Comments