ShinSeungMin

Add KakaoAPI feature

...@@ -17,9 +17,11 @@ var app = express(); ...@@ -17,9 +17,11 @@ var app = express();
17 app.use(bodyParser.json()); 17 app.use(bodyParser.json());
18 ///////////////////////////////////////////////// 18 /////////////////////////////////////////////////
19 // commit 할때 지워야 할것들 19 // commit 할때 지워야 할것들
20 -const USER_ID = '' 20 +const USER_ID = '';
21 -const TOKEN = '' 21 +const TOKEN = '';
22 -const domain = "" 22 +const domain = '';
23 +const KAKAO_KEY = '';
24 +/////////////////////////////////////////////////
23 25
24 let MEGA_date; 26 let MEGA_date;
25 let MEGA_TheaterLocation; 27 let MEGA_TheaterLocation;
...@@ -31,6 +33,7 @@ let initFlag = false; //브랜드 선택 flag ...@@ -31,6 +33,7 @@ let initFlag = false; //브랜드 선택 flag
31 let MEGA_flag = -1; //메가박스 인지 확인하는 flag 33 let MEGA_flag = -1; //메가박스 인지 확인하는 flag
32 let MEGA_count; //메가박스에서 영화관 판단하는 count 34 let MEGA_count; //메가박스에서 영화관 판단하는 count
33 let MEGA_AbleLocationList = []; //메가박스에서 영화관 이름 매치하는 것 저장하는 list 35 let MEGA_AbleLocationList = []; //메가박스에서 영화관 이름 매치하는 것 저장하는 list
36 +let MegaboxKakaoResultTheater = [];
34 exports.MEGA_PlayingMovieURL = MEGA_PlayingMovieURL; 37 exports.MEGA_PlayingMovieURL = MEGA_PlayingMovieURL;
35 //////////////////////////////////////////////// 38 ////////////////////////////////////////////////
36 //처음 영화관을 가져오는 것까지 대략 30초가 걸림 => 30초 기다리고 메세지 전송 39 //처음 영화관을 가져오는 것까지 대략 30초가 걸림 => 30초 기다리고 메세지 전송
...@@ -213,15 +216,24 @@ app.post('/hook', asyncHandler(async (req, res, next) => { ...@@ -213,15 +216,24 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
213 const final_URL = "https://www.megabox.co.kr/booking?rpstMovieNo=" + MEGA_title + "&brchNo1=" + MEGA_TheaterLocationCode + '&playDe=' + MEGA_date; 216 const final_URL = "https://www.megabox.co.kr/booking?rpstMovieNo=" + MEGA_title + "&brchNo1=" + MEGA_TheaterLocationCode + '&playDe=' + MEGA_date;
214 console.log(final_URL); 217 console.log(final_URL);
215 PushMessage(final_URL, "링크를 누르면 예매창으로 바로 이동합니다."); 218 PushMessage(final_URL, "링크를 누르면 예매창으로 바로 이동합니다.");
219 + MEGA_PlayingMovieList = []; //영화 리스트 초기화
220 + MegaboxKakaoResultTheater = [];
221 + GetMegaboxKakaoMapURL(MEGA_TheaterLocation);
216 setTimeout(function () { 222 setTimeout(function () {
217 - MEGA_PlayingMovieList = []; 223 + console.log(MegaboxKakaoResultTheater[0]);
218 - initFlag = false; 224 + let MegaboxKakaoResultTheaterNAME = MegaboxKakaoResultTheater[0]['theater_name'];
219 - MEGA_flag = -1; 225 + let MegaboxKakaoResultTheaterURL = MegaboxKakaoResultTheater[0]['theater_url'];
220 - PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요."); 226 + console.log(MegaboxKakaoResultTheaterNAME, MegaboxKakaoResultTheaterURL);
221 - }, 1000); 227 + PushMessage(MegaboxKakaoResultTheaterURL, "카카오맵으로 검색한 " + MegaboxKakaoResultTheaterNAME+ "의 위치입니다.");
228 + setTimeout(function () {
229 + //EGA_PlayingMovieList = [];
230 + initFlag = false;
231 + MEGA_flag = -1;
232 + PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
233 + }, 1000);
234 + }, 2000);
222 } 235 }
223 } 236 }
224 -
225 res.sendStatus(200); 237 res.sendStatus(200);
226 })) 238 }))
227 //}); 239 //});
...@@ -238,6 +250,45 @@ try { ...@@ -238,6 +250,45 @@ try {
238 console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.'); 250 console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
239 console.log(error); 251 console.log(error);
240 } 252 }
253 +GetMegaboxKakaoMapURL= async(LOCATE) => {
254 + let KAKAOOPTION = {
255 + url: "https://dapi.kakao.com/v2/local/search/keyword",
256 + method: "GET",
257 + headers: {
258 + 'Authorization': `KakaoAK ${KAKAO_KEY}` // commit 할때 지워야 할것
259 + },
260 + qs: {
261 + 'query': '메가박스 ' + LOCATE, // 메가박스 영화관이름
262 + //'category_group_code' : 'CT1',
263 + 'size': 5
264 + },
265 + encoding: 'UTF-8'
266 + };
267 + let selectable_theaters = [];
268 + request(KAKAOOPTION, function (err, res, body) {
269 + info_list = JSON.parse(body).documents;
270 +
271 + if (!err && res.statusCode == 200) {
272 + info_list.forEach(info => {
273 + //console.log(info.category_name);
274 + if (info.category_name.endsWith("메가박스")) {
275 + const theater_info = {
276 + "theater_name": info.place_name,
277 + "theater_url": info.place_url
278 + };
279 + //console.log(theater_info);
280 + //return theater_info;
281 + selectable_theaters.push(theater_info);
282 + }
283 + });
284 + }
285 + console.log(selectable_theaters);
286 + MegaboxKakaoResultTheater = selectable_theaters;
287 + return;
288 + });
289 +
290 +}
291 +
241 //메세지 전송하는 function 모음 292 //메세지 전송하는 function 모음
242 function SendMessage(eventObj, text1, text2 = "") { //reply message 293 function SendMessage(eventObj, text1, text2 = "") { //reply message
243 request.post( 294 request.post(
......
This diff could not be displayed because it is too large.
...@@ -16,7 +16,9 @@ ...@@ -16,7 +16,9 @@
16 "chromedriver": "^101.0.0", 16 "chromedriver": "^101.0.0",
17 "express": "^4.18.1", 17 "express": "^4.18.1",
18 "express-async-handler": "^1.2.0", 18 "express-async-handler": "^1.2.0",
19 + "moment": "^2.29.3",
19 "puppeteer": "^14.1.1", 20 "puppeteer": "^14.1.1",
21 + "request": "^2.88.2",
20 "selenium-webdriver": "^4.1.2" 22 "selenium-webdriver": "^4.1.2"
21 } 23 }
22 } 24 }
......