EC2 Default User

Add Chatbot-Megabox Test

const chatbot = require("./app.js");
const request = require('request');
const cheerio = require('cheerio');
const puppeteer = require('puppeteer');
require('chromedriver');
const {Builder,until} = require('selenium-webdriver'); //모듈 불러오기
var webdriver = require('selenium-webdriver');
var By = webdriver.By;
const chrome = require('selenium-webdriver/chrome');//크롬 사용시
const async = require('async')
let express = require('express');
let app = express();
let bodyParser = require('body-parser');
const { timeout } = require('async');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
const booking_url = "https://megabox.co.kr/booking?";
exports.booking_url = booking_url;
const rate_url = "https://www.megabox.co.kr/movie";
let r =0;
let movie_data = [];
exports.movie_data = movie_data;
let location_data = [];
exports.location_data = location_data;
let index = 0;
exports.init = ()=>{async.waterfall([//for 동기적 처리
async () => {
const driver = new webdriver.Builder().forBrowser('chrome').setChromeOptions(new chrome.Options().headless()).build();//
driver.get(booking_url);
driver.switchTo().frame(0)//frameBokdMBooking 프레임 가져옴
let seoul = await driver.wait(until.elementsLocated(By.css('#mCSB_4_container>ul>li>#btn')));
let Gyeonggi = await driver.wait(until.elementsLocated(By.css('#mCSB_5_container>ul>li>#btn')));
const Incheon = await driver.wait(until.elementsLocated(By.css('#mCSB_6_container>ul>li>#btn')));
const DCS = await driver.wait(until.elementsLocated(By.css('#mCSB_7_container>ul>li>#btn')));//Daejeon Chungcheong Sejong
const BDG = await driver.wait(until.elementsLocated(By.css('#mCSB_8_container>ul>li>#btn')));//Busan Daegu Gyeongsang
const GJ= await driver.wait(until.elementsLocated(By.css('#mCSB_9_container>ul>li>#btn')));//gwangju_jeonla
const Gangwon = await driver.wait(until.elementsLocated(By.css('#mCSB_10_container>ul>li>#btn')));
const location_list = [seoul, Gyeonggi, Incheon, DCS, BDG, GJ, Gangwon]//
for(let i = 0; i < location_list.length; i++){
for (item of location_list[i]) {
location_data[index++] = {
'LocationName':await item.getAttribute("brch-nm"),
'LocationNUm' : await item.getAttribute("brch-no")
}
// let location_name = await item.getAttribute("brch-nm");
// let location_num = await item.getAttribute("brch-no");
// let obj = {};
// obj[location_name]= location_num
// location_data[index++] = obj;
}
}
let movie_list = await driver.wait(until.elementsLocated(By.css('#mCSB_1_container>ul>li>.btn')));
r = 0;
for (item of movie_list) {
//Using getAttribute to get the data
movie_data[r++] = {
'rank' : r,
'title' : await item.getAttribute("movie-nm"),
'movie_num':await item.getAttribute("movie-no"),
}
}
driver.close();
},
async () => {
r = 0;
const browser = await puppeteer.launch({
headless: true
});
const page = await browser.newPage();
await page.goto(rate_url);
const content = await page.content();
const $ = cheerio.load(content);
const $rate_lists = $("ol.list>li");
$rate_lists.each((index, list) => {
const name = $(list).find('div.tit-area > p.tit').attr('title');
const rate = $(list).find('div.rate-date > span.rate').text();
if(movie_data[r].title === name){
movie_data[r++]['rate'] = rate;
}
});
for(i of movie_data){
if(Object.keys(i).length==3){
movie_data[r++]['rate'] = '예매율 0%';
}
}
browser.close();
console.log("Comepleted!");
},
])}
const appdriver = new webdriver.Builder().forBrowser('chrome').setChromeOptions(new chrome.Options().headless()).build();
exports.using_PlayingMovieURL = async(PlayingMovieURL) => {
appdriver.get(PlayingMovieURL);
//appdriver.switchTo().frame(0)
//frameBokdMBooking 프레임 가져옴
}
exports.geting_PlayingMovie= async() => {
let movie_list = await appdriver.wait(until.elementsLocated(By.css('#mCSB_1_container>ul>li>.btn')));
let n = 0;
for (item of movie_list) {
movie_data[n++]['running'] = await item.getAttribute('form-at')
}
}
// let userData = {
// 'Date': '',
// 'location':''
// };
// // const _sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay));
// app.get('/Megabox', (req, res) => {
// res.send(movie_data);
// })
// app.post('/Megabox', (req, res) => {//사용자에게 Date와 location(영화관 장소) 받아옴
// let PlayingMovieURL;
// userData['Date'] = req.body.Date;
// for(i of location_data){
// if(i['LocationName'] == req.body.location){
// userData['location']=i['LocationNUm'];
// break;
// }
// }
// PlayingMovieURL = booking_url + '?brchNo1='+userData['location']+'&playDe='+userData['Date'];//사용자 정보 바탕으로 해당 일자 영화관 영화 상영 여부 확인
// appdriver.get(PlayingMovieURL);
// appdriver.switchTo().frame(0)//frameBokdMBooking 프레임 가져옴
// res.send(movie_data);
// })
// app.post('/Megabox', (req, res) => {//사용자에게 Date와 location(영화관 장소) 받아옴
// userData['Date'] = req.body.Date;
// for(i of location_data){
// if(i['LocationName'] == req.body.location){
// userData['location']=i['LocationNUm'];
// break;
// }
// }
// let PlayingMovieURL = booking_url + '?brchNo1='+userData['location']+'&playDe='+userData['Date'];//사용자 정보 바탕으로 해당 일자 영화관 영화 상영 여부 확인
// appdriver.get(PlayingMovieURL);
// appdriver.switchTo().frame(0)//frameBokdMBooking 프레임 가져옴
// res.send(movie_data);
// })
app.get('/Megabox/GetPlayingMovie', async(req, res, next) => {//영화 상영 여부 객체에 넣음
// let movie_list = await appdriver.wait(until.elementsLocated(By.css('#mCSB_1_container>ul>li>.btn')));
// let n = 0;
// for (item of movie_list) {
// movie_data[n++]['running'] = await item.getAttribute('form-at')
// }
using_PlayingMovieURL('https://megabox.co.kr/booking?brchNo1=4451&playDe=20220606');
geting_PlayingMovie();
res.send(PlayingMovieList);
})
app.listen(5000);
\ No newline at end of file
let megabox = require('./Megabox.js');
const async = require('async')
//let SearchingTheaterAPI = require('./SearchingTheaterAPI');
megabox.init();
const request = require('request');
var express = require('express');
const REPLY_TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
const PUSH_TARGET_URL = 'https://api.line.me/v2/bot/message/push'
const USER_ID = 'U9d630077f22259431099ace7e9a0eb4c'
const REPLY_TOKEN = 'Yq9KhnuTveSUn7SihUGL51E1YlFvpMkl/w0LwXhGyZq8lzZFWQ5naQgQ504rqwT0sVBScuXZOFHTxFvFb3F/3KXCcOVaj6NlSgwHCanXrsugF9E5KqhROLyRv4EGxvt9MleTefgt1qx5piktuYGkFwdB04t89/1O/w1cDnyilFU='
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const domain = "2021105612.osschatbot2022.ml"
const sslport = 23023;
const bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
const moment = require("moment");
let MEGA_date;
let MEGA_TheaterLocation;
let MEGA_title;
let MEGA_PlayingMovieURL;
exports.MEGA_PlayingMovieURL = MEGA_PlayingMovieURL;
let MEGA_flag = 0;
function SendMessage(eventObj, text1, text2 = "") {
request.post(
{
url: REPLY_TARGET_URL,
headers: {
'Authorization': `Bearer ${REPLY_TOKEN}`
},
json: {
"replyToken": eventObj.replyToken,
"messages": [
{
"type": "text",
"text": text1
},
{
"type": "text",
"text": text2
}
]
}
}, (error, response, body) => {
//console.log(body)
});
}
function SendSingleMessage(text1) {
request.post(
{
url: PUSH_TARGET_URL,
headers: {
'Authorization': `Bearer ${REPLY_TOKEN
}`
},
json: {
"to": `${USER_ID}`,
"messages":[
{
"type":"text",
"text": text1
}
]
}
},(error, response, body) => {
console.log(body)
});
}
app.post('/hook', function (req, res) {
var eventObj = req.body.events[0];
var source = eventObj.source;
var message = eventObj.message;
// request log
console.log('======================', new Date(), '======================');
console.log('[request]', req.body);
console.log('[request source] ', eventObj.source);
console.log('[request message]', eventObj.message);
if (eventObj.message.text == 3 && MEGA_flag === 0) {
if (megabox.location_data) {
const text1 = "영화관 위치를 입력해주세요";
const text2 = "ex1)강남, ex2)강남대로(씨티)";
SendMessage(eventObj, text1, text2);
MEGA_flag++;
}
}
if (MEGA_flag === 1) {
let count = 0;
let inputAbleLocationList = [];
for (i of megabox.location_data) {
if (i['LocationName'].includes(message.text)) {
inputAbleLocationList[count++] = i;
//MEGA_TheaterLocation = i['LocationNUm'];
//console.log(MEGA_TheaterLocation);
//MEGA_flag++;
}
}
if(count == 1){ //결과 1개 => 바로 다음 단계 넘어가기
MEGA_TheaterLocation = inputAbleLocationList[0].LocationName;
console.log(MEGA_TheaterLocation);
MEGA_flag++;
}else if (count > 1){ //결과 2개 이상 => 리스트 출력해주고 번호로 입력받아 넘어가기
console.log(inputAbleLocationList[0],inputAbleLocationList[1]);
SendSingleMessage("원하시는 상영관을 정확히 입력해주세요");
setTimeout(function () {
for(let x =0; x<count; x++){
setTimeout(function () {
SendSingleMessage(inputAbleLocationList[x].LocationName);
console.log(inputAbleLocationList[x].LocationName);
}, 100*(x+1));
}
}, 100);
//MEGA_flag= 101;
}
//console.log(count, inputAbleLocationList);
} else {
SendMessage(eventObj, "다시입력해주세요");
}
if(MEGA_flag == 101){
}
if (MEGA_flag === 2) {
const text1 = "영화를 보실 날짜를 입력해주세요.";
const text2 = "ex)20020409";
SendMessage(eventObj, text1, text2);
++MEGA_flag;
}
if (moment(eventObj.message.text, "YYYYMMDD", true).isValid() && MEGA_flag === 3) {
MEGA_date = parseInt(message.text);
console.log(MEGA_date, MEGA_TheaterLocation);
if (MEGA_date && MEGA_TheaterLocation) {
console.log("1");
MEGA_PlayingMovieURL = "https://megabox.co.kr/on/oh/ohb/SimpleBooking/simpleBookingPage.do" + '?brchNo1=' + MEGA_TheaterLocation + '&playDe=' + MEGA_date;
console.log("1", MEGA_PlayingMovieURL);
async.waterfall[
megabox.using_PlayingMovieURL(MEGA_PlayingMovieURL),
megabox.geting_PlayingMovie()
]
MEGA_flag++;
}
}
if (MEGA_flag === 4) {
console.log(megabox.movie_data);
}
res.sendStatus(200);
});
try {
const option = {
ca: fs.readFileSync('/etc/letsencrypt/live/' + domain + '/fullchain.pem'),
key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/privkey.pem'), 'utf8').toString(),
cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/cert.pem'), 'utf8').toString(),
};
HTTPS.createServer(option, app).listen(sslport, () => {
console.log(`[HTTPS] Server is started on port ${sslport}`);
});
} catch (error) {
console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
console.log(error);
}
\ No newline at end of file
This diff could not be displayed because it is too large.
{
"name": "megabox",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"async": "^3.2.3",
"body-parser": "^1.20.0",
"cheerio": "^1.0.0-rc.11",
"chromedriver": "^101.0.0",
"express": "^4.18.1",
"puppeteer": "^14.1.1",
"selenium-webdriver": "^4.1.2"
}
}
\ No newline at end of file