본문 바로가기

Node.js

[카톡봇] 카카오톡API를 이용한 자동 응답기 만들기


var express    = require('express');
var app        = express();
var cheerio = require('cheerio');  
var request = require('request');
var requestP= require('request-promise');
var phantom=require('phantom');
var bodyParser = require('body-parser');
var fs=require('fs');
var sitepage = null;
var phInstance = null;
/*
var takeScreenshot = (url)=>{
  var options={
    selector:'[class="column_bottom"]'
  }
  console.log('taking..')
  var renderStream = webshot(url, 'sc.png', selector=".column_bottom" );

}
takeScreenshot('https://www.naver.com/')
*/

 var url = 'https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EB%82%A0%EC%94%A8';
var autoWeather=async function(){
   

  var instance=await phantom.create();
  var page=await instance.createPage();
  var status=await page.open(url);
  console.log("STATUS : "+status);
  var clipRect = await page.evaluate(function () {
    return document.querySelector('[class="table_info weekly _weeklyWeather"]').getBoundingClientRect(); 
  });

  page.property('clipRect', {
    top:    clipRect.top,
    left:   clipRect.left,
    width:  clipRect.width,
    height: clipRect.height
  });
  page.render('capture.png');

  console.log(await clipRect);
}
autoWeather();
var autoSearch=async function(){
  var url="https://www.naver.com/"
    var rank_str;
      //---------------------
      //Navaer

		await requestP(url, function(error, response, html){  
		    if (error) {throw error};

		    // console.log (html);

		    var $ = cheerio.load(html);
			 rank_str="";
		    var cnt=0;

		    $('.ah_item').each(function(){
		    	if(cnt<20){
		    		var str=$(this).text();
					cnt++;
					rank_str+=cnt+" : "+str.substr(4, str.length-6)+"\n";
		    	}
		    })
		    console.log("function executed");
		});

		return new Promise((resolve, reject)=>{
      //console.log('rank : '+rank_str)
      resolve(rank_str);
    });
}

// parse application/json
app.use(bodyParser.json());
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));

//초기 상태 get
app.get('/keyboard', function(req, res){
  const menu = {
      "type": 'text',
      //"buttons": ["Naver searching rank", "메롱"]
  };

  res.set({
      'content-type': 'application/json'
  }).send(JSON.stringify(menu));

  console.log("someone in");
});

//카톡 메시지 처리
app.post('/message',async function (req, res) {

    const _obj = {
        user_key: req.body.user_key,
        type: req.body.type,
        content: req.body.content
    };
    console.log(_obj.content)


    //네이버 검색 순위
    if(_obj.content == 'Naver' ||_obj.content == '네이버' || _obj.content == 'naver')
    {

      var rank=await autoSearch();


      let massage = {
          "message": {
              "text": rank,
                "photo": {
                  //내 컴퓨터에 있는 이미지는 불가능한듯..
                  "url": "http://i.imgur.com/tvuH0ZJ.png",
                  "width": 640,
                  "height": 480
                }
          }
      
      };

      //      카톡으로 전송
      res.set({
          'content-type': 'application/json'
      }).send(JSON.stringify(massage));
    }



    else if(_obj.content == "민종" || _obj.content == "민동"|| _obj.content == "밍종"|| _obj.content == "민둉"){
      let massage = {
          "message": {
              "text": "바보다.."
          }
      
      };

      //      카톡으로 전송
      res.set({
          'content-type': 'application/json'
      }).send(JSON.stringify(massage));
    }

        else if(_obj.content == "진수" || _obj.content == "개발자"|| _obj.content == "찡수"|| _obj.content == "박진수"){
      let massage = {
          "message": {
              "text": "멋지다.."
          }
      
      };

      //      카톡으로 전송
      res.set({
          'content-type': 'application/json'
      }).send(JSON.stringify(massage));
    }

            else if(_obj.content == "은정" || _obj.content == "엄마"|| _obj.content == "쩡아"|| _obj.content == "진수엄마"){
      let massage = {
          "message": {
              "text": "이쁘고 착하당!.."
          }
      
      };

      //      카톡으로 전송
      res.set({
          'content-type': 'application/json'
      }).send(JSON.stringify(massage));
    }

            else if(_obj.content == "소현" || _obj.content == "조소현"|| _obj.content == "소현이는"|| _obj.content == "소현이"){
      let massage = {
          "message": {
              "text": "착한 친구예요~~"
          }
      
      };

      //      카톡으로 전송
      res.set({
          'content-type': 'application/json'
      }).send(JSON.stringify(massage));
    }

                else if(_obj.content == "찬희" || _obj.content == "차니"|| _obj.content == "손찬희"|| _obj.content == "찬희는"){
      let massage = {
          "message": {
              "text": "곧 군대.."
          }
      
      };

      //      카톡으로 전송
      res.set({
          'content-type': 'application/json'
      }).send(JSON.stringify(massage));
    }

    else{
	      let massage = {
          "message": {
              "text": "저는 아직 애기로봇이라 무슨 말인지 몰라요"
          }
      
      };

      //      카톡으로 전송
      res.set({
          'content-type': 'application/json'
      }).send(JSON.stringify(massage));
    }






});
app.listen(3500, function() {
});

일단은 그냥 사람들이 text 입력했을 때,

일정한 text를 입력했으면 설정된 대답을 하는 방향으로 app을 만들어봤다.

정말 딱 자동응답기능만 탑재했고, text만 답장할 수 있다.