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만 답장할 수 있다.
'Node.js' 카테고리의 다른 글
Socket io, nodejs를 이용한 채팅 사이트 만들기 (0) | 2018.06.10 |
---|---|
node js 웹 크롤링 예제 - request로 사진(웹툰 프리뷰) 수집하기 (0) | 2018.05.22 |
[카톡봇] openAPI와 카카오톡API를 이용한 버스 도착 정보 조회 (2) | 2018.04.26 |
[버스 API] 공공 데이터 api를 이용해 버스 도착 정보 얻는 예제 (0) | 2018.04.26 |
[카톡봇] 카카오톡 API를 이용해 사진 자동 전송하기 (0) | 2018.04.26 |