ShinSeungMin

Delete Conflict File

1 -const chatbot = require("./app.js");
2 -const request = require('request');
3 -const cheerio = require('cheerio');
4 -const puppeteer = require('puppeteer');
5 -require('chromedriver');
6 -const {Builder,until} = require('selenium-webdriver'); //모듈 불러오기
7 -var webdriver = require('selenium-webdriver');
8 -var By = webdriver.By;
9 -const chrome = require('selenium-webdriver/chrome');//크롬 사용시
10 -const async = require('async')
11 -let express = require('express');
12 -let app = express();
13 -let bodyParser = require('body-parser');
14 -const { timeout } = require('async');
15 -app.use(bodyParser.urlencoded({ extended: false }));
16 -app.use(bodyParser.json());
17 -const booking_url = "https://megabox.co.kr/booking?";
18 -exports.booking_url = booking_url;
19 -const rate_url = "https://www.megabox.co.kr/movie";
20 -let r =0;
21 -let movie_data = [];
22 -exports.movie_data = movie_data;
23 -let location_data = [];
24 -exports.location_data = location_data;
25 -let index = 0;
26 -exports.init = ()=>{async.waterfall([//for 동기적 처리
27 - async () => {
28 - const driver = new webdriver.Builder().forBrowser('chrome').setChromeOptions(new chrome.Options().headless()).build();//
29 - driver.get(booking_url);
30 - driver.switchTo().frame(0)//frameBokdMBooking 프레임 가져옴
31 - let seoul = await driver.wait(until.elementsLocated(By.css('#mCSB_4_container>ul>li>#btn')));
32 - let Gyeonggi = await driver.wait(until.elementsLocated(By.css('#mCSB_5_container>ul>li>#btn')));
33 - const Incheon = await driver.wait(until.elementsLocated(By.css('#mCSB_6_container>ul>li>#btn')));
34 - const DCS = await driver.wait(until.elementsLocated(By.css('#mCSB_7_container>ul>li>#btn')));//Daejeon Chungcheong Sejong
35 - const BDG = await driver.wait(until.elementsLocated(By.css('#mCSB_8_container>ul>li>#btn')));//Busan Daegu Gyeongsang
36 - const GJ= await driver.wait(until.elementsLocated(By.css('#mCSB_9_container>ul>li>#btn')));//gwangju_jeonla
37 - const Gangwon = await driver.wait(until.elementsLocated(By.css('#mCSB_10_container>ul>li>#btn')));
38 - const location_list = [seoul, Gyeonggi, Incheon, DCS, BDG, GJ, Gangwon]//
39 - for(let i = 0; i < location_list.length; i++){
40 - for (item of location_list[i]) {
41 - location_data[index++] = {
42 - 'LocationName':await item.getAttribute("brch-nm"),
43 - 'LocationNum' : await item.getAttribute("brch-no")
44 - }
45 - // let location_name = await item.getAttribute("brch-nm");
46 - // let location_num = await item.getAttribute("brch-no");
47 - // let obj = {};
48 - // obj[location_name]= location_num
49 - // location_data[index++] = obj;
50 - }
51 - }
52 - let movie_list = await driver.wait(until.elementsLocated(By.css('#mCSB_1_container>ul>li>.btn')));
53 - r = 0;
54 - for (item of movie_list) {
55 - //Using getAttribute to get the data
56 - movie_data[r++] = {
57 - 'rank' : r,
58 - 'title' : await item.getAttribute("movie-nm"),
59 - 'movie_num':await item.getAttribute("movie-no"),
60 - }
61 - }
62 -
63 - driver.close();
64 -
65 - },
66 - async () => {
67 - r = 0;
68 - const browser = await puppeteer.launch({
69 - headless: true
70 - });
71 - const page = await browser.newPage();
72 - await page.goto(rate_url);
73 - const content = await page.content();
74 -
75 - const $ = cheerio.load(content);
76 - const $rate_lists = $("ol.list>li");
77 - $rate_lists.each((index, list) => {
78 - const name = $(list).find('div.tit-area > p.tit').attr('title');
79 - const rate = $(list).find('div.rate-date > span.rate').text();
80 -
81 - if(movie_data[r].title === name){
82 - movie_data[r++]['rate'] = rate;
83 - }
84 - });
85 - for(i of movie_data){
86 - if(Object.keys(i).length==3){
87 - movie_data[r++]['rate'] = '예매율 0%';
88 - }
89 - }
90 -
91 - browser.close();
92 - console.log("Comepleted!");
93 - },
94 -
95 -])}
96 -const appdriver = new webdriver.Builder().forBrowser('chrome').setChromeOptions(new chrome.Options().headless()).build();
97 -exports.using_PlayingMovieURL = async(PlayingMovieURL) => {
98 - appdriver.get(PlayingMovieURL);
99 - //appdriver.switchTo().frame(0)
100 - //frameBokdMBooking 프레임 가져옴
101 -}
102 -exports.geting_PlayingMovie= async() => {
103 - let movie_list = await appdriver.wait(until.elementsLocated(By.css('#mCSB_1_container>ul>li>.btn')));
104 - let n = 0;
105 - for (item of movie_list) {
106 - movie_data[n++]['running'] = await item.getAttribute('form-at');
107 - }
108 - console.log("Completed get Running");
109 -}
110 -// let userData = {
111 -// 'Date': '',
112 -// 'location':''
113 -// };
114 -// // const _sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay));
115 -// app.get('/Megabox', (req, res) => {
116 -// res.send(movie_data);
117 -// })
118 -// app.post('/Megabox', (req, res) => {//사용자에게 Date와 location(영화관 장소) 받아옴
119 -// let PlayingMovieURL;
120 -// userData['Date'] = req.body.Date;
121 -// for(i of location_data){
122 -// if(i['LocationName'] == req.body.location){
123 -// userData['location']=i['LocationNum'];
124 -// break;
125 -// }
126 -// }
127 -// PlayingMovieURL = booking_url + '?brchNo1='+userData['location']+'&playDe='+userData['Date'];//사용자 정보 바탕으로 해당 일자 영화관 영화 상영 여부 확인
128 -
129 -// appdriver.get(PlayingMovieURL);
130 -// appdriver.switchTo().frame(0)//frameBokdMBooking 프레임 가져옴
131 -// res.send(movie_data);
132 -// })
133 -// app.post('/Megabox', (req, res) => {//사용자에게 Date와 location(영화관 장소) 받아옴
134 -// userData['Date'] = req.body.Date;
135 -// for(i of location_data){
136 -// if(i['LocationName'] == req.body.location){
137 -// userData['location']=i['LocationNum'];
138 -// break;
139 -// }
140 -// }
141 -// let PlayingMovieURL = booking_url + '?brchNo1='+userData['location']+'&playDe='+userData['Date'];//사용자 정보 바탕으로 해당 일자 영화관 영화 상영 여부 확인
142 -
143 -// appdriver.get(PlayingMovieURL);
144 -// appdriver.switchTo().frame(0)//frameBokdMBooking 프레임 가져옴
145 -// res.send(movie_data);
146 -// })
147 -app.get('/Megabox/GetPlayingMovie', async(req, res, next) => {//영화 상영 여부 객체에 넣음
148 -
149 - // let movie_list = await appdriver.wait(until.elementsLocated(By.css('#mCSB_1_container>ul>li>.btn')));
150 - // let n = 0;
151 - // for (item of movie_list) {
152 - // movie_data[n++]['running'] = await item.getAttribute('form-at')
153 - // }
154 - using_PlayingMovieURL('https://megabox.co.kr/booking?brchNo1=4451&playDe=20220606');
155 - geting_PlayingMovie();
156 - res.send(PlayingMovieList);
157 -})
158 -app.listen(5000);
...\ No newline at end of file ...\ No newline at end of file
1 -const megabox = require('./Megabox.js');
2 -//const SearchingTheaterAPI = require('./SearchingTheaterAPI');
3 -const async = require('async');
4 -megabox.init(); //메가박스 코드 시작(영화관 리스트 가져오기)
5 -
6 -const PUSH_TARGET_URL = 'https://api.line.me/v2/bot/message/push'
7 -const REPLY_TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
8 -const asyncHandler = require('express-async-handler')
9 -const bodyParser = require('body-parser');
10 -const request = require('request');
11 -const moment = require("moment");
12 -const HTTPS = require('https');
13 -
14 -const path = require('path');
15 -const fs = require('fs');
16 -const sslport = 23023;
17 -
18 -var express = require('express');
19 -var app = express();
20 -app.use(bodyParser.json());
21 -
22 -/////////////////////////////////////////////////
23 -// commit 할때 지워야 할것들
24 -
25 -
26 -const USER_ID = '';
27 -const TOKEN = '';
28 -const domain = "";
29 -/////////////////////////////////////////////////
30 -
31 -let MEGA_date;
32 -let MEGA_TheaterLocation;
33 -let MEGA_TheaterLocationCode;
34 -let MEGA_PlayingMovieList = [];
35 -let MEGA_title;
36 -let MEGA_PlayingMovieURL;
37 -
38 -let initFlag = false; //브랜드 선택 flag
39 -let MEGA_flag = -1; //메가박스 인지 확인하는 flag
40 -
41 -let MEGA_count; //메가박스에서 영화관 판단하는 count
42 -let MEGA_AbleLocationList = []; //메가박스에서 영화관 이름 매치하는 것 저장하는 list
43 -
44 -exports.MEGA_PlayingMovieURL = MEGA_PlayingMovieURL;
45 -////////////////////////////////////////////////
46 -
47 -
48 -//처음 영화관을 가져오는 것까지 대략 30초가 걸림 => 30초 기다리고 메세지 전송
49 -setTimeout(function () {
50 - PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
51 -}, 30000);
52 -
53 -//app.post('/hook', function (req, res) {
54 -app.post('/hook', asyncHandler(async (req, res, next) => {
55 - var eventObj = req.body.events[0];
56 - var source = eventObj.source;
57 - var message = eventObj.message;
58 - // request log
59 - console.log('======================', new Date(), '======================');
60 - console.log('[request]', req.body);
61 - console.log('[request source] ', eventObj.source);
62 - console.log('[request message]', eventObj.message);
63 -
64 - //어느 순간에서든 "브랜드"를 입력해 원하는 브랜드 선택
65 - //initFlag : false ==> 브랜드 선택 전
66 - //initFlag : true ==> 브랜드 선택 됨
67 - if (eventObj.message.text == "브랜드") {
68 - initFlag = false;
69 - MEGA_flag = -1;
70 - PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
71 - }
72 -
73 - //브랜드 선택- 메가박스 인 경우 MEGA_flag를 0으로 두어 메가박스 임을 확인
74 - if (initFlag == false && eventObj.message.text == 3) {
75 - initFlag = true;
76 - MEGA_flag = 0;
77 - }
78 -
79 - //메가박스로 브랜드 선택된 경우
80 - if (initFlag == true && MEGA_flag != -1) {
81 - if (MEGA_flag == 0) {
82 - const text1 = "영화관 위치를 입력해주세요";
83 - const text2 = "ex1)강남";
84 - SendMessage(eventObj, text1, text2);
85 - MEGA_flag++;
86 - //PusbuttonhMessage("https://developers.line.biz/en/reference/messaging-api/#message-common-properties");
87 - //console.log(MEGA_flag)
88 - }else if (MEGA_flag === 1) {
89 - MEGA_count = 0; //MEGA_count 초기화
90 - MEGA_AbleLocationList.length = 0; //MEGA_AbleLocationList 초기화
91 - for (i of megabox.location_data) {
92 - if (i['LocationName'].includes(message.text)) {
93 - MEGA_AbleLocationList[MEGA_count++] = i;
94 - }
95 - }
96 -
97 - if (MEGA_count == 1) { //결과 1개 => 바로 다음 단계 넘어가기
98 - MEGA_TheaterLocation = MEGA_AbleLocationList[0].LocationName;
99 - MEGA_TheaterLocationCode = MEGA_AbleLocationList[0].LocationNum;
100 - console.log(MEGA_TheaterLocation, MEGA_TheaterLocationCode);
101 - MEGA_flag++;
102 - } else if (MEGA_count > 1) { //결과 2개 이상 => 리스트 출력해주고 번호로 입력받아 넘어가기
103 - console.log(MEGA_AbleLocationList[0], MEGA_AbleLocationList[1]);
104 - let MEGA_OutputString = "원하시는 상영관의 번호를 정확히 입력해주세요\n"; //메가박스 영화관 가능 정보 string
105 - //PushSingleMessage("원하시는 상영관의 번호를 정확히 입력해주세요");
106 -
107 - for (let x = 0; x < MEGA_count; x++) {
108 - //PushSingleMessage(String(x + 1) + ": " + MEGA_AbleLocationList[x].LocationName);
109 - MEGA_OutputString += String(x + 1) + ": " + MEGA_AbleLocationList[x].LocationName + "\n";
110 - console.log(String(x + 1), MEGA_AbleLocationList[x].LocationName);
111 - }
112 - MEGA_OutputString += String(MEGA_count + 1) + ": 다시 검색하기";
113 - PushSingleMessage(MEGA_OutputString);
114 - MEGA_flag = 101;
115 - } else {
116 - PushSingleMessage("다시 입력해주세요.");
117 - }
118 -
119 -
120 - //원본 코드
121 - //console.log(MEGA_flag);
122 - // for (i of megabox.location_data) {
123 - // if (i['LocationName'] === message.text) {
124 - // MEGA_TheaterLocationCode = i['LocationNUm'];
125 - // console.log(MEGA_TheaterLocationCode);
126 - // MEGA_flag++;
127 - // console.log(MEGA_flag)
128 - // break;
129 - // }
130 - // }
131 - } else if (MEGA_flag == 101) {
132 -
133 - // 0< input || input > MEGA_count+1 : 다시 검색
134 - let tempNum = parseInt(message.text);
135 -
136 - if (tempNum > 0 && tempNum < MEGA_count + 1) {
137 - //번호에 맞는 LocationCode 전달
138 - MEGA_TheaterLocation = MEGA_AbleLocationList[tempNum - 1].LocationName;
139 - MEGA_TheaterLocationCode = MEGA_AbleLocationList[tempNum - 1].LocationNum;
140 - console.log(MEGA_TheaterLocation, MEGA_TheaterLocationCode);
141 - MEGA_flag = 2;
142 - } else {
143 - //다시 장소 입력받기
144 - const text1 = "영화관 위치를 입력해주세요";
145 - const text2 = "ex1)강남";
146 - SendMessage(eventObj, text1, text2);
147 - MEGA_flag = 1;
148 - }
149 - }
150 - //날짜 입력 받기
151 - if (MEGA_flag == 2) {
152 - const text1 = "현재 영화관은 " + MEGA_TheaterLocation + " 입니다.\n영화를 보실 날짜를 입력해주세요.";
153 - const text2 = "ex)20020409";
154 - SendMessage(eventObj, text1, text2);
155 - MEGA_flag = 3;
156 - }
157 -
158 - //날짜 확인 및 날짜, 장소에 대해 상영중인 영화 리스트 가져오기
159 - if (moment(message.text, "YYYYMMDD", true).isValid() && MEGA_flag == 3) {
160 - MEGA_date = parseInt(message.text);
161 - //console.log(MEGA_date, MEGA_TheaterLocation);
162 - if (MEGA_date && MEGA_TheaterLocationCode) {
163 - const text1 = "현재상영작을 가져오는 중입니다.";
164 - const text2 = "잠시만 기다려주세요.";
165 - PushMessage(text1, text2);
166 - MEGA_PlayingMovieURL = "https://megabox.co.kr/on/oh/ohb/SimpleBooking/simpleBookingPage.do" + '?brchNo1=' + MEGA_TheaterLocationCode + '&playDe=' + MEGA_date;
167 - megabox.using_PlayingMovieURL(MEGA_PlayingMovieURL);
168 - await megabox.geting_PlayingMovie();
169 - console.log(MEGA_PlayingMovieURL, megabox.movie_data);
170 - MEGA_flag = 4;
171 - }
172 -
173 - //원본 코드
174 - // MEGA_date = parseInt(eventObj.message.text);
175 -
176 - // if (MEGA_date && MEGA_TheaterLocationCode) {
177 - // MEGA_PlayingMovieURL = "https://megabox.co.kr/on/oh/ohb/SimpleBooking/simpleBookingPage.do" + '?brchNo1=' + MEGA_TheaterLocationCode + '&playDe=' + MEGA_date;
178 - // console.log(MEGA_PlayingMovieURL)
179 - // async.waterfall[
180 - // megabox.using_PlayingMovieURL(MEGA_PlayingMovieURL),
181 - // megabox.geting_PlayingMovie()
182 - // ]
183 - // MEGA_flag++
184 - // console.log(MEGA_flag);
185 - // }
186 - }
187 -
188 - if (MEGA_flag == 4) {
189 - let obj = {};
190 - let n;
191 - let PlayingMovie = "-현재 상영작-\n\n";
192 - let movietitle;
193 - console.log(megabox.movie_data);
194 - for (n = 0; n < Object.keys(megabox.movie_data).length; n++) {
195 - if (megabox.movie_data[n].running == 'Y') {
196 - console.log(megabox.movie_data[n]);
197 - movietitle = megabox.movie_data[n].title;
198 - MEGA_PlayingMovieList[movietitle] = megabox.movie_data[n].movie_num;
199 - }
200 - }
201 - console.log(Object.keys(megabox.movie_data).length);
202 - if (Object.keys(megabox.movie_data).length == 0) {
203 - PushMessage("현재상영작이 없습니다.","영화관 선택 단계로 이동합니다.");
204 - setTimeout(function () {
205 - PushMessage("영화관 위치를 입력해주세요", "ex1)강남");
206 - }, 1000);
207 - MEGA_flag = 1;
208 - }else if (Object.keys(MEGA_PlayingMovieList).length == 1) {
209 - PlayingMovie += '1. ' + Object.keys(MEGA_PlayingMovieList)[0];
210 - PushMessage(PlayingMovie, "바로 링크가 보내집니다.");
211 - MEGA_title = MEGA_PlayingMovieList[Object.keys(MEGA_PlayingMovieList)[0]];
212 - setTimeout(function () {
213 - const final_URL = "https://www.megabox.co.kr/booking?rpstMovieNo=" + MEGA_title + "&brchNo1=" + MEGA_TheaterLocationCode + '&playDe=' + MEGA_date;
214 - console.log(final_URL)
215 - PushMessage(final_URL, "링크를 누르면 예매창으로 바로 이동합니다.");
216 - }, 1000);
217 -
218 - setTimeout(function () {
219 - initFlag = false;
220 - MEGA_flag = -1;
221 - PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
222 - }, 1000);
223 - } else {
224 - let index = 0;
225 - for (let playingmovie = 0; playingmovie < Object.keys(MEGA_PlayingMovieList).length; playingmovie++) {
226 - PlayingMovie += (playingmovie + 1).toString() + '. ' + Object.keys(MEGA_PlayingMovieList)[index++];
227 - PlayingMovie += "\n";
228 - }
229 - console.log(PlayingMovie);
230 - await PushMessage(PlayingMovie, "예매할 영화 번호를 입력해주세요.\n ex)1 (영화 앞 숫자만 입력)");
231 - MEGA_flag = 5;
232 - }
233 - }else if (MEGA_flag == 5) {
234 - const index = parseInt(message.text) - 1;
235 - MEGA_title = MEGA_PlayingMovieList[Object.keys(MEGA_PlayingMovieList)[index]];
236 - const final_URL = "https://www.megabox.co.kr/booking?rpstMovieNo=" + MEGA_title + "&brchNo1=" + MEGA_TheaterLocationCode + '&playDe=' + MEGA_date;
237 - console.log(final_URL);
238 - PushMessage(final_URL, "예매창으로 바로 이동합니다.");
239 - setTimeout(function () {
240 - initFlag = false;
241 - MEGA_flag = -1;
242 - PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
243 - }, 1000);
244 - }
245 - }
246 -
247 - res.sendStatus(200);
248 -}))
249 -//});
250 -
251 -try {
252 - const option = {
253 - ca: fs.readFileSync('/etc/letsencrypt/live/' + domain + '/fullchain.pem'),
254 - key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/privkey.pem'), 'utf8').toString(),
255 - cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/cert.pem'), 'utf8').toString(),
256 - };
257 -
258 - HTTPS.createServer(option, app).listen(sslport, () => {
259 - console.log(`[HTTPS] Server is started on port ${sslport}`);
260 - });
261 -} catch (error) {
262 - console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
263 - console.log(error);
264 -}
265 -
266 -
267 -//메세지 전송하는 function 모음
268 -function SendMessage(eventObj, text1, text2 = "") { //reply message
269 - request.post(
270 - {
271 - url: REPLY_TARGET_URL,
272 - headers: {
273 - 'Authorization': `Bearer ${TOKEN}`
274 - },
275 - json: {
276 - "replyToken": eventObj.replyToken,
277 - "messages": [
278 - {
279 - "type": "text",
280 - "text": text1
281 - },
282 - {
283 - "type": "text",
284 - "text": text2
285 - }
286 - ]
287 - }
288 -
289 - }, (error, response, body) => {
290 - console.log(body);
291 - });
292 -}
293 -
294 -function PushMessage(text1, text2 = "") { //push two message
295 - request.post(
296 - {
297 - url: PUSH_TARGET_URL,
298 - headers: {
299 - 'Authorization': `Bearer ${TOKEN}`
300 - },
301 - json: {
302 - "to": `${USER_ID}`,
303 - "messages": [
304 - {
305 - "type": "text",
306 - "text": text1
307 - },
308 - {
309 - "type": "text",
310 - "text": text2
311 - }
312 - ]
313 - }
314 - }, (error, response, body) => {
315 - console.log(body)
316 - });
317 -}
318 -
319 -function PushSingleMessage(text1) {//push single message
320 - request.post(
321 - {
322 - url: PUSH_TARGET_URL,
323 - headers: {
324 - 'Authorization': `Bearer ${TOKEN}`
325 - },
326 - json: {
327 - "to": `${USER_ID}`,
328 - "messages": [
329 - {
330 - "type": "text",
331 - "text": text1
332 - }
333 - ]
334 - }
335 - }, (error, response, body) => {
336 - console.log(body)
337 - });
338 -}
339 -
340 -function PusbuttonhMessage(final_URL) {
341 - request.post(
342 - {
343 - url: PUSH_TARGET_URL,
344 - headers: {
345 - 'Authorization': `Bearer ${TOKEN}`
346 - },
347 - json:
348 -
349 - {
350 - "to": `${USER_ID}`,
351 - "type": "template",
352 - "altText": "this is a carousel template",
353 - "template": {
354 - "type": "carousel",
355 - "columns": [
356 - {
357 - "thumbnailImageUrl": "https://megabox.co.kr/SharedImg/2022/05/16/WApIttC9CrStYU7j7jzFRlc2HsIXBQtY_150.jpg",
358 - "imageBackgroundColor": "#FFFFFF",
359 - "title": "this is menu",
360 - "text": "description",
361 - "defaultAction": {
362 - "type": "uri",
363 - "label": "View detail",
364 - "uri": "https://megabox.co.kr/"
365 - },
366 - "actions": [
367 - {
368 - "type": "message",
369 - "label": "Yes",
370 - "text": "Yes"
371 - },
372 - {
373 - "type": "message",
374 - "label": "Yes",
375 - "text": "Yes"
376 - },
377 - {
378 - "type": "uri",
379 - "label": "View detail",
380 - "uri": "https://megabox.co.kr/"
381 - }
382 - ]
383 - },
384 -
385 - {
386 - "thumbnailImageUrl": "https://example.com/bot/images/item2.jpg",
387 - "imageBackgroundColor": "#000000",
388 - "title": "this is menu",
389 - "text": "description",
390 - "defaultAction": {
391 - "type": "uri",
392 - "label": "View detail",
393 - "uri": "http://example.com/page/222"
394 - },
395 - "actions": [
396 - {
397 - "type": "message",
398 - "label": "Yes",
399 - "text": "Yes"
400 -
401 - },
402 - {
403 - "type": "message",
404 - "label": "Yes",
405 - "text": "Yes"
406 -
407 - },
408 - {
409 - "type": "uri",
410 - "label": "View detail",
411 - "uri": "https://megabox.co.kr/"
412 - }
413 - ]
414 - }
415 - ],
416 - "imageAspectRatio": "rectangle",
417 - "imageSize": "cover"
418 - }
419 - }
420 - // {
421 - // "type": "template",
422 - // //"altText": "This is a buttons template",
423 - // "template": {
424 - // "type": "buttons",
425 - // "thumbnailImageUrl": "https://megabox.co.kr/SharedImg/2022/05/16/WApIttC9CrStYU7j7jzFRlc2HsIXBQtY_150.jpg",
426 - // "imageAspectRatio": "rectangle",
427 - // "imageSize": "cover",
428 - // "imageBackgroundColor": "#FFFFFF",
429 - // "title": "Menu",
430 - // "text": "Please select",
431 - // "actions": [
432 - // {
433 - // "type": "message",
434 - // "label": "Yes",
435 - // "text": "yes"
436 - // },
437 - // {
438 - // "type": "uri",
439 - // "label": "View detail",
440 - // "uri": final_URL
441 - // }
442 - // ]
443 - // }
444 - //}
445 - }
446 - )
447 -}
1 -{
2 - "name": "megabox",
3 - "version": "1.0.0",
4 - "description": "",
5 - "main": "app.js",
6 - "scripts": {
7 - "test": "echo \"Error: no test specified\" && exit 1"
8 - },
9 - "keywords": [],
10 - "author": "",
11 - "license": "ISC",
12 - "dependencies": {
13 - "async": "^3.2.3",
14 - "body-parser": "^1.20.0",
15 - "cheerio": "^1.0.0-rc.11",
16 - "chromedriver": "^101.0.0",
17 - "express": "^4.18.1",
18 - "puppeteer": "^14.1.1",
19 - "express-async-handler": "^1.2.0",
20 - "selenium-webdriver": "^4.1.2"
21 - }
22 -}
...\ No newline at end of file ...\ No newline at end of file