최현영
......@@ -4,7 +4,7 @@ const bodyParser = require('body-parser');
var app = express();
var static = require('serve-static');
//const xlsx = require('xlsx');
const convert = require('xml-js');
const fs = require('fs');
const path = require('path');
......@@ -16,27 +16,24 @@ const TOKEN = 'sqNjA99TptppqvcoVFAnU7Kawsl+s7l+JgnZ7r2is97qrFQraIn0sLQ6mTsIPvXLG
const domain = "www.chyoss.tk"
const sslport = 23023;
const feebuffer = fs.readFileSync('./whereur/Expressfee.json');
const feebuffer = fs.readFileSync('Expressfee.json');
const datafeejson = feebuffer.toString();
const feedata = JSON.parse(datafeejson);
console.log("Expressfee.json 파일 읽기");
const namebuffer = fs.readFileSync('./whereur/ExpressIC.json');
const namebuffer = fs.readFileSync('ExpressIC.json');
const datanamejson = namebuffer.toString();
const namedata = JSON.parse(datanamejson);
console.log("Expressname.json 파일 열기");
app.use(bodyParser.json());
//전역변수 선언
//var count = 0;
var userroadcongest = new Object();
var userroadcongestlength = new Object();
var usercount = new Object();
//var roadnumberstringLength = 0;
var userroadcongestcount = new Object();
//var jsonForforecast;
// body-parser를 이용해 application/x-www-form-urlencoded 파싱
......@@ -50,11 +47,27 @@ app.use('/public', static(path.join(__dirname, 'public')));
var router = express.Router();
app.set('view engine', 'ejs');
router.route('/process/maprealtime').get(function(req, res){
console.log('process/mapreatime 호출됨');
res.end();
});
// router.route('/process/mapconstruction').get(function(req, res){
// console.log('proess/mapconstruction 호출됨');
// });
app.get('/construction', function(req, res){
jsonConstrunction(function(object){
var obj = object;
console.log(obj);
res.render('mapconstruction.ejs', {
construnctionjson:obj
});
})
})
function jsonforecast(callback){ //교통예보
var url2 = 'http://data.ex.co.kr/openapi/safeDriving/forecast';
......@@ -113,9 +126,25 @@ function jsonICtoICtime(startICcode, endICcode, callback){
});
}
function jsonConstrunction(callback){
var url4 = 'http://openapi.its.go.kr:8082/api/NEventIdentity';
var queryParams4 = '?' + encodeURIComponent('key') + '=1590913608992'; /* Service Key*/
queryParams4 += '&ReqType=2&MinX=127.100000&MaxX=128.890000&MinY=34.100000 &MaxY=39.100000&type=ex'
app.use('/', router);
request({
url: url4 + queryParams4,
method: 'GET'
}, function (error, response, body) {
var result = body;
var xmlToJson = convert.xml2json(result, {compact: true, spaces: 4});
xmlToJson = JSON.parse(xmlToJson);
console.log(xmlToJson);
console.log(typeof(xmlToJson));
callback(xmlToJson);
});
}
app.use('/', router);
function ishello(istext){
if(istext == '안녕'){
......@@ -142,6 +171,9 @@ function firstforecast(isforecast){
else if (isforecast == '5'){
return true;
}
else if (isforecast == '6'){
return true;
}
else {
return false;
}
......@@ -199,7 +231,6 @@ function nexttext(typetext){
}
}
function inputroadnumber(typetext){
if(typetext.indexOf("번") >= 0){
return true;
......@@ -222,6 +253,15 @@ function pushmsg(eventObj){
console.log(eventObj.source.userId);
console.log(userroadcongest[eventObj.source.userId]);
console.log(userroadcongestlength[eventObj.source.userId]);
console.log(userroadcongestcount[eventObj.source.userId]);
var isend = false;
if (userroadcongestlength[eventObj.source.userId] < userroadcongestcount[eventObj.source.userId]){
delete userroadcongest[eventObj.source.userId];
delete userroadcongestcount[eventObj.source.userId];
delete userroadcongestlength[eventObj.source.userId];
isend = true;
}
if(isend == false){
request.post(
{
url: TARGET_URL,
......@@ -233,31 +273,51 @@ function pushmsg(eventObj){
"messages":[
{
"type":"text",
"text":userroadcongest[eventObj.source.userId][(usercount[eventObj.source.userId])]
"text":userroadcongest[eventObj.source.userId][(userroadcongestcount[eventObj.source.userId])]
},
{ "type":"text",
"text":userroadcongest[eventObj.source.userId][usercount[eventObj.source.userId] + 1]
"text":userroadcongest[eventObj.source.userId][userroadcongestcount[eventObj.source.userId] + 1]
},
{
"type":"text",
"text":userroadcongest[eventObj.source.userId][usercount[eventObj.source.userId] + 2]
"text":userroadcongest[eventObj.source.userId][userroadcongestcount[eventObj.source.userId] + 2]
},
{
"type":"text",
"text":userroadcongest[eventObj.source.userId][usercount[eventObj.source.userId] + 3]
"text":userroadcongest[eventObj.source.userId][userroadcongestcount[eventObj.source.userId] + 3]
},
{
"type":"text",
"text":userroadcongest[eventObj.source.userId][usercount[eventObj.source.userId] + 4]
"text":userroadcongest[eventObj.source.userId][userroadcongestcount[eventObj.source.userId] + 4]
}
]
}
},(error, response, body) => {
console.log(body)
});
if(userroadcongestlength[eventObj.source.userId] > (usercount[eventObj.source.userId] + 5)){
usercount[eventObj.source.userId] = (usercount[eventObj.source.userId] + 5);
}
else if(isend == true){
request.post(
{
url: TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken":eventObj.replyToken,
"messages":[
{
"type":"text",
"text":"더이상의 내용은 없습니다."
}
]
}
},(error, response, body) => {
console.log(body)
});
}
if(userroadcongestlength[eventObj.source.userId] != (userroadcongestcount[eventObj.source.userId] + 5)){
userroadcongestcount[eventObj.source.userId] = (userroadcongestcount[eventObj.source.userId] + 5);
}
}
function wanttoknowfee(typetext){
......@@ -349,6 +409,10 @@ app.post('/hook', function (req, res) {
console.log("[request Order] ", message);
leadtime(eventObj);
}
else if (message.text == '6'){
console.log('[request Order', message);
viewconstruction(eventObj);
}
}
isselecttypeforecast = selecttypeforecast(message.text);
......@@ -436,7 +500,7 @@ function helloworld(eventObj){
},
{
"type":"text",
"text":"현재 교통 예보가 궁금하시다면 1번을, 실시간 교통혼잡 상황을 보실려면 2번을, 실시간 정체상황을 알고 싶다면 3번을, 교통요금이 궁금하시다면 4번을, 나들목간 통행평균시간이 궁금하시다면 5번을 눌러주세요. "
"text":"현재 교통 예보가 궁금하시다면 '1'을, 실시간 교통혼잡 상황을 보실려면 '2'을, 실시간 정체상황을 알고 싶다면 '3'을, 교통요금이 궁금하시다면 '4'을, 나들목간 통행평균시간이 궁금하시다면 '5'을, 실시간 공사 정보를 확인하고 싶으시면 '6'을 눌러주세요."
},
{
"type":"text",
......@@ -474,6 +538,7 @@ function viewhtml(eventObj){
});
}
function leadfee(eventObj){
request.post(
{
......@@ -1019,7 +1084,7 @@ function roadcongest(eventObj, msg, userid){
console.log(roadnumberstring);
userroadcongest[userid] = roadnumberstring;
userroadcongestlength[userid] = roadnumberstringLength;
usercount[userid] = 0;
userroadcongestcount[userid] = 0;
......
This diff is collapsed. Click to expand it.
......@@ -6,24 +6,18 @@
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "ssh://git@khuhub.khu.ac.kr:12959/2019102236/WhereUR.git"
},
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.19.0",
"cookie-parser": "^1.4.5",
"crypto": "^1.0.1",
"errorhandler": "^1.5.1",
"ejs": "^3.1.3",
"express": "^4.17.1",
"express-error-handler": "^1.1.0",
"express-session": "^1.17.1",
"fs": "0.0.1-security",
"http": "0.0.1-security",
"https": "^1.0.0",
"mongoose": "^5.9.16",
"path": "^0.12.7",
"request": "^2.88.2"
"request": "^2.88.2",
"serve-static": "^1.14.1",
"xml-js": "^1.6.11"
}
}
......
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>공사정보</title>
</head>
<body>
<div id="map" style="width:100%;height:350px;"></div>
<form method="get" action="/process/mapconstruction"></form>
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=3ebfae70e971821ab8f14e074d068bdc"></script>
<script>
var mapContainer = document.getElementById('map'), // 지도를 표시할 div
mapOption = {
center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
level: 3 // 지도의 확대 레벨
};
var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다
var json = <%- JSON.stringify(construnctionjson) %>;
console.log(json);
var positions = new Array();
for(var i = 0; i < json.response.data.length; i++){
var x = parseFloat(json.response.data[i].coordx._text);
var y = parseFloat(json.response.data[i].coordy._text);
console.log(x);
console.log(y);
positions[i] = {
content: json.response.data[i].eventstatusmsg._text,
latlng: new kakao.maps.LatLng(y,x)
}
}
// 마커를 표시할 위치와 내용을 가지고 있는 객체 배열입니다
for (var i = 0; i < positions.length; i ++) {
// 마커를 생성합니다
var marker = new kakao.maps.Marker({
map: map, // 마커를 표시할 지도
position: positions[i].latlng // 마커의 위치
});
// 마커에 표시할 인포윈도우를 생성합니다
var infowindow = new kakao.maps.InfoWindow({
content: positions[i].content // 인포윈도우에 표시할 내용
});
// 마커에 mouseover 이벤트와 mouseout 이벤트를 등록합니다
// 이벤트 리스너로는 클로저를 만들어 등록합니다
// for문에서 클로저를 만들어 주지 않으면 마지막 마커에만 이벤트가 등록됩니다
kakao.maps.event.addListener(marker, 'mouseover', makeOverListener(map, marker, infowindow));
kakao.maps.event.addListener(marker, 'mouseout', makeOutListener(infowindow));
}
// 인포윈도우를 표시하는 클로저를 만드는 함수입니다
function makeOverListener(map, marker, infowindow) {
return function() {
infowindow.open(map, marker);
};
}
// 인포윈도우를 닫는 클로저를 만드는 함수입니다
function makeOutListener(infowindow) {
return function() {
infowindow.close();
};
}
/* 아래와 같이도 할 수 있습니다 */
/*
for (var i = 0; i < positions.length; i ++) {
// 마커를 생성합니다
var marker = new kakao.maps.Marker({
map: map, // 마커를 표시할 지도
position: positions[i].latlng // 마커의 위치
});
// 마커에 표시할 인포윈도우를 생성합니다
var infowindow = new kakao.maps.InfoWindow({
content: positions[i].content // 인포윈도우에 표시할 내용
});
// 마커에 이벤트를 등록하는 함수 만들고 즉시 호출하여 클로저를 만듭니다
// 클로저를 만들어 주지 않으면 마지막 마커에만 이벤트가 등록됩니다
(function(marker, infowindow) {
// 마커에 mouseover 이벤트를 등록하고 마우스 오버 시 인포윈도우를 표시합니다
kakao.maps.event.addListener(marker, 'mouseover', function() {
infowindow.open(map, marker);
});
// 마커에 mouseout 이벤트를 등록하고 마우스 아웃 시 인포윈도우를 닫습니다
kakao.maps.event.addListener(marker, 'mouseout', function() {
infowindow.close();
});
})(marker, infowindow);
}
*/
</script>
</body>
</html>
\ No newline at end of file