신일섭

다른 쇼핑몰에도 동일메서드 적용완료

const puppeteer = require('puppeteer');
//auction_c();
const request = require('request');
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const domain = "www.chatbotshin.tk"
const sslport = 23023;
const bodyParser = require('body-parser');
//--------------- Line messanger modules -------------------
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
const TARGET_URL_2 = 'https://api.line.me/v2/bot/message/push'
var USER_ID = ' ';
const token = require('../config/key');
const TOKEN = token.token; //사용자 토큰
//----------------------------------------------------------
// ------------ db calling modules ---------
var dbcontrol = require('../db/dbcontrol');
// -----------------------------------------
// auction Cart Crawling
async function auction_c(){
async function auction_c(user_id, a_id, a_pw){
USER_ID = user_id;
// launching headless browser
const browser = await puppeteer.launch();
// making a new page
const page = await browser.newPage();
//console input id & password
var args = process.argv;
var a_id = args[2];
var a_pw = args[3];
console.log('유저정보입력완료'); //정상입력 확인용
console.log(args[2] + " " + args[3]);
// Gmarket login page
await page.goto('https://memberssl.auction.co.kr/Authenticate/?url=http%3a%2f%2fwww.auction.co.kr%2f&return_value=0');
......@@ -26,7 +40,7 @@ async function auction_c(){
document.querySelector('#password').value = pwd;
}, a_id, a_pw);
await console.log(a_id,a_pw);
await console.log('로그인중');
// try login
await page.click('.btn_login');
......@@ -34,18 +48,21 @@ async function auction_c(){
// goto cart page
await page.goto('https://cart.auction.co.kr/ko/cart');
//await page.screenshot({ path: 'auction.png', fullPage:true });
// container which will hold crawled data [{},{}...]
let data = [];
// crawling start! (using getOne and getAll function)
data = await getAll(page);
//data.push(await getAll(page)); // data[0][n]
//logging the result
for(let index = 0; index < data.length; index++){
console.log(data[index]);
// 뽑아낸 정보 reply
await replying(data[index].prd_img, data[index].prd_name, data[index].prd_price, data[index].prd_link);
// DB에 정보 삽입
await dbcontrol.synchronization(USER_ID, data[index].prd_img, data[index].prd_name, data[index].prd_price, data[index].prd_link);
console.log(data[index]);
}
await browser.close();
......@@ -92,6 +109,41 @@ async function getOne(page, index) {
return Promise.resolve(data);
}
async function replying(img_link, msg1, msg2, msg3){ //push function
request.post(
{
url: TARGET_URL_2,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"to": `${USER_ID}`,
"messages":[
{
"type":"image",
"originalContentUrl": img_link,
"previewImageUrl": img_link
},
{
"type": "text",
"text": "상품명: " + msg1 // replying message
},
{
"type": "text",
"text": "가격: " + msg2 + " 원" // replying message
},
{
"type": "text",
"text": "링크: " + msg3 // replying message
}
]
}
},(error, response, body) => {
//console.log(body)
});
}
module.exports.auction_c = auction_c;
module.exports.getOne = getOne;
module.exports.getAll = getAll;
\ No newline at end of file
......
const puppeteer = require('puppeteer');
const request = require('request');
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const domain = "www.chatbotshin.tk"
const sslport = 23023;
const bodyParser = require('body-parser');
//--------------- Line messanger modules -------------------
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
const TARGET_URL_2 = 'https://api.line.me/v2/bot/message/push'
var USER_ID = ' ';
const token = require('../config/key');
const TOKEN = token.token; //사용자 토큰
//----------------------------------------------------------
// ------------ db calling modules ---------
var dbcontrol = require('../db/dbcontrol');
// -----------------------------------------
//coupang_c();
// coupang Cart Crawling
async function coupang_c(){
async function coupang_c(user_id, c_id, c_pw){
USER_ID = user_id;
// launching headless browser
const browser = await puppeteer.launch();
// making a new page
const page = await browser.newPage();
//console input id & password
var args = process.argv;
var c_id = args[2];
var c_pw = args[3];
console.log(args[2] + " " + args[3]);
console.log('유저정보입력완료'); //정상입력 확인용
// Gmarket login page
......@@ -28,7 +40,7 @@ async function coupang_c(){
document.querySelector('#login-password-input').value = pwd;
}, c_id, c_pw);
await console.log(c_id,c_pw);
await console.log('로그인중');
// try login
await page.click('.login__button');
......@@ -36,18 +48,21 @@ async function coupang_c(){
// goto cart page
await page.goto('https://cart.coupang.com/cartView.pang');
//await page.screenshot({ path: 'coupang.png', fullPage:true });
// container which will hold crawled data [{},{}...]
let data = [];
// crawling start! (using getOne and getAll function)
data = await getAll(page);
//data.push(await getAll(page)); // data[0][n]
//logging the result
for(let index = 0; index < data.length; index++){
console.log(data[index]);
// 뽑아낸 정보 reply
await replying(data[index].prd_img, data[index].prd_name, data[index].prd_price, data[index].prd_link);
// DB에 정보 삽입
await dbcontrol.synchronization(USER_ID, data[index].prd_img, data[index].prd_name, data[index].prd_price, data[index].prd_link);
console.log(data[index]);
}
await browser.close();
......@@ -95,6 +110,41 @@ async function getOne(page, index) {
return Promise.resolve(data);
}
async function replying(img_link, msg1, msg2, msg3){ //push function
request.post(
{
url: TARGET_URL_2,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"to": `${USER_ID}`,
"messages":[
{
"type":"image",
"originalContentUrl": img_link,
"previewImageUrl": img_link
},
{
"type": "text",
"text": "상품명: " + msg1 // replying message
},
{
"type": "text",
"text": "가격: " + msg2 + " 원" // replying message
},
{
"type": "text",
"text": "링크: " + msg3 // replying message
}
]
}
},(error, response, body) => {
//console.log(body)
});
}
module.exports.coupang_c = coupang_c;
module.exports.getOne = getOne;
module.exports.getAll = getAll;
\ No newline at end of file
......
......@@ -30,7 +30,7 @@ async function gmarket_c(user_id, g_id, g_pw){
// making a new page
const page = await browser.newPage();
console.log(g_id + " " + g_pw); //정상입력 확인용, 개인정보 보호를 위해 완성 후 삭제 예정
console.log('유저정보입력완료'); //정상입력 확인용
// Gmarket login page
await page.goto('https://signinssl.gmarket.co.kr/login/login?url=https://www.gmarket.co.kr/');
......@@ -40,7 +40,7 @@ async function gmarket_c(user_id, g_id, g_pw){
document.querySelector('#pwd').value = pwd;
}, g_id, g_pw);
await console.log(g_id,g_pw);
await console.log('로그인중');
// try login
await page.click('.button_login');
......@@ -67,8 +67,6 @@ async function gmarket_c(user_id, g_id, g_pw){
await dbcontrol.synchronization(USER_ID, data[index].prd_img, data[index].prd_name, data[index].prd_price, data[index].prd_link);
console.log(data[index]);
}
//여기에 db에 추가하는 코드 넣기
await browser.close();
......
......@@ -91,7 +91,7 @@ async function viewing(USER_ID){
console.log(datalist);
datalist.forEach(function(item, index, array){
viewall(array[index].PRD_IMG, array[index].PRD_NAME, array[index].PRD_PRICE, array[index].PRD_LINK);
viewall(USER_ID, array[index].PRD_IMG, array[index].PRD_NAME, array[index].PRD_PRICE, array[index].PRD_LINK);
});
}
catch (err) { // 파일이 없다면
......@@ -156,7 +156,7 @@ async function pushing(USER_ID, sp_message){ //push function
}
//================== 장바구니 목록 전체 출력 ===================================
async function viewall(img_link, msg1, msg2, msg3){ //push function
async function viewall(USER_ID, img_link, msg1, msg2, msg3){ //push function
request.post(
{
url: TARGET_URL_2,
......
......@@ -35,7 +35,7 @@ async function shoppingroute(user_message, user_id, replyToken){
USER_ID = user_id;
if(user_message == '/쇼핑' ){
replying(replyToken, '쇼핑을 선택하셨습니다.\n원하시는 쇼핑몰 사이트 또는 기능을 선택하세요.\n현재 제공되는 사이트는 \n\n/g마켓\n/옥션\n/쿠팡\n\n입니다.\n\n기능은 /장바구니조회\n/장바구니삭제\n\n입니다.\n\n/취소 로 해당 메뉴에서 퇴장이 가능합니다.');
replying(replyToken, '쇼핑을 선택하셨습니다.\n원하시는 쇼핑몰 사이트 또는 기능을 선택하세요.\n현재 제공되는 사이트는 \n\n/g마켓\n/옥션\n/쿠팡\n\n입니다.\n\n기능은\n/장바구니조회\n/장바구니삭제\n\n입니다.\n\n/취소 로 해당 메뉴에서 퇴장이 가능합니다.');
shopping = 1; // 다음 메세지에 선택하지 못할 경우 0으로 되돌릴 필요가있음
}
......@@ -50,9 +50,11 @@ async function shoppingroute(user_message, user_id, replyToken){
replying(replyToken, 'g마켓을 선택하셨습니다.\n원하시는 항목을 선택하세요.\n\n/장바구니동기화');
shopping = 2; shop_select = 'g마켓';
}else if(user_message == '/옥션'){
replying(replyToken, '옥션을 선택하셨습니다.\n원하시는 항목을 선택하세요.\n\n/장바구니동기화');
shopping = 2; shop_select = '옥션';
}else if(user_message == '/쿠팡'){
replying(replyToken, '쿠팡을 선택하셨습니다.\n원하시는 항목을 선택하세요.\n\n/장바구니동기화');
shopping = 2; shop_select = '쿠팡';
}else if(user_message == '/장바구니조회'){
// DB에서 USER_ID.json 을 가진 파일을 읽어들임
replying(replyToken, '장바구니조회를 선택하셨습니다.\nDB를 읽고 있습니다.');
......@@ -62,13 +64,11 @@ async function shoppingroute(user_message, user_id, replyToken){
replying(replyToken, '장바구니삭제를 선택하셨습니다.\n삭제할 링크를 입력해주세요.');
deleting_able = true; // 삭제가능상태 적용
dbcontrol.deleting(user_message);
}
}else{
replying(replyToken, 'Error: 유효하지 않은 선택입니다. 메인으로 되돌아갑니다.');
shopping = 0;
shopping = 0; // 메인메뉴로 되돌아감
}
}
// 쇼핑 -> g마켓
if(shopping == 2 || shopping == 3){
if(shop_select=='g마켓'){
if(shopping == 2 && user_message == '/장바구니동기화')
......@@ -90,11 +90,58 @@ async function shoppingroute(user_message, user_id, replyToken){
shop_select = undefined; //메인메뉴로 돌아가기 위함
}
}
}
}
}
// 쇼핑 -> 옥션
if(shopping == 2 || shopping == 3){
if(shop_select=='옥션'){
if(shopping == 2 && user_message == '/장바구니동기화')
{
replying(replyToken, '====장바구니동기화====\n\n장바구니를 동기화 하기 위해 쇼핑몰에 연결합니다.\n\n아이디와 패스워드를 입력해 주세요:');
method_action = 2;
shopping = 3;
}
else if(shopping == 3 && method_action != 0)
{
replying(replyToken, '===아이디/패스워드 입력중===');
user_info[method_action] = user_message; // 아이디 패스워드를 user_info[2], user_info[1]에 저장
method_action--;
if(method_action==0){
//장바구니 크롤링하는 함수
USER_ID = user_id; // 상대방 ID 획득
await auction.auction_c(USER_ID, user_info[2], user_info[1]);
shopping = 0;
shop_select = undefined; //메인메뉴로 돌아가기 위함
}
}
}
}
// 쇼핑 -> 쿠팡
if(shopping == 2 || shopping == 3){
if(shop_select=='쿠팡'){
if(shopping == 2 && user_message == '/장바구니동기화')
{
replying(replyToken, '====장바구니동기화====\n\n장바구니를 동기화 하기 위해 쇼핑몰에 연결합니다.\n\n아이디와 패스워드를 입력해 주세요:');
method_action = 2;
shopping = 3;
}
else if(shopping == 3 && method_action != 0)
{
replying(replyToken, '===아이디/패스워드 입력중===');
user_info[method_action] = user_message; // 아이디 패스워드를 user_info[2], user_info[1]에 저장
method_action--;
if(method_action==0){
//장바구니 크롤링하는 함수
USER_ID = user_id; // 상대방 ID 획득
await coupang.coupang_c(USER_ID, user_info[2], user_info[1]);
shopping = 0;
shop_select = undefined; //메인메뉴로 돌아가기 위함
}
}
}
}
}
// ============================ /취소 입력시 =================================
......