파비의 매일매일 공부기록

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

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

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

fabichoi 2020. 12. 25. 23:30

으어어 어..

역시 머릿속으로는 간단히 될 거 같은데

막상 해보면 품이 많이 드는구먼..

 

여하튼 Heroku에 올라간 index.js의 소스는 다음과 같다.

최근에 잠깐 공부했던 nodejs를 활용했고, API Call 부분은 Data.go.kr의 예시를 참고했다.

var express = require('express');
var app = express();
const PORT = process.env.PORT || 5000;

var request = require('request');
require('dotenv').config();

app.get('/', function(req, res) {
  res.send('hello world');
});

app.get('/weather', function(req, res) {
  var now = new Date();
  var reqDate = now.getFullYear() + "" + (now.getMonth()+1) + "" + now.getDate() + "0600";
  var url = 'http://apis.data.go.kr/1360000/MidFcstInfoService/getMidFcst';
  var queryParams = '?' + encodeURIComponent('ServiceKey') + '=' + process.env.API_SERVICE_KEY; /* Service Key*/
  queryParams += '&' + encodeURIComponent('pageNo') + '=' + encodeURIComponent('1'); /* */
  queryParams += '&' + encodeURIComponent('numOfRows') + '=' + encodeURIComponent('10'); /* */
  queryParams += '&' + encodeURIComponent('dataType') + '=' + encodeURIComponent('XML'); /* */
  queryParams += '&' + encodeURIComponent('stnId') + '=' + encodeURIComponent('108'); /* */
  queryParams += '&' + encodeURIComponent('tmFc') + '=' + encodeURIComponent(reqDate); /* */

  request({
      url: url + queryParams,
      method: 'GET'
  }, function (error, response, body) {    
      res.send(body);
  });  
});

app.listen(PORT, () => console.log(`Listening on ${ PORT }`));

API_SERVICE_KEY는 dotenv를 활용해서 숨겨놨고,

Data.go.kr에서 제공하는 API의 최대 조회 기간은 오늘 기준으로 1일 전까지로

일단 무조건 해당 날짜의 06시로 고정해서 입력해놓았다.

이런 식이면 다음날 00:00 ~ 06:00 까지는 조회가 안될 예정..이지만 뭐 당장 크게 중요한 건 아니니까.

 

생각보다 Heroku를 사용하는 게 번거로운 부분이 있다.

일반적인 서버에서의 명령어가 아니라 Heroku 자체에서 제공하는 명령어를 써야 한다.

익숙해질 때까지는 Heroku 문서를 확인하면서 하나씩 해봐야겠다.

그리고 소스 수정 후 바로바로 서버에 반영이 안 된다.

nodejs 쪽 hot module 설정을 하면 해결이 될 것으로 보이나

뭐 간단한 API 호출하는 기능이다 보니 일단 패스..!

 

다음 포스팅에서는 Heroku에 Maria DB를 붙여서

하루에 한 번만 Data.go.kr에 API Call을 수행하고

Response를 DB에 저장하도록 구현할 예정이다.

반응형
Comments