유영빈

컨트롤러 전체 레파지토리 커밋

{
// IntelliSense를 사용하여 가능한 특성에 대해 알아보세요.
// 기존 특성에 대한 설명을 보려면 가리킵니다.
// 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요.
"version": "0.2.0",
"configurations": [
{
"type": "pwa-node",
"request": "launch",
"name": "Launch Program",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}\\app.js"
}
]
}
\ No newline at end of file
BusTime @ 75a66710
Subproject commit 75a66710c60b7112cdbff1ba402bdf83c0b38494
const express = require("express");
var app = express();
http = require('http').createServer(app);
port = 23023;
app.use(express.static(__dirname + "/views"));
const routes = require("./routes/");
app.use(routes)
app.use((err,req,res,next) => {
const {status,message} = err
console.error(err)
res.status(status||500).json({message})
})
var server = http.listen(port, function(){
console.log(`http://localhost:${port}`);
})
\ No newline at end of file
let request = require('request');
let cheerio = require('cheerio');
const bus_url = 'http://apis.data.go.kr/6410000/busarrivalservice/getBusArrivalList';
//const stationID = '228000708'; // 사색의광장 들어오는 방향
const gateStationID = '203000125'
require('dotenv').config();
//const BusArrivalUrl = bus_url + '?servicekey=' + process.env.key + '&stationId=' + stationID;// 사색의광장 정류장 버스 도착 정보 조회용
//console.log(BusArrivalUrl);
var routeID = ['200000112', '200000115', '234000016', '200000103'];
var Bus = [];
// request(BusArrivalUrl, (err, res, body) => {
// var $ = cheerio.load(body, {decodeEntities: false});
// $('busArrivalList').each(function(idx){
// let route = $(this).find('routeId').text();
// routeID.push(route);
// })
// //console.log(routeID);
// })
const route_url = 'http://apis.data.go.kr/6410000/busrouteservice/getBusRouteInfoItem';
var index = 0;
function getBusNum(){
var BusRouteUrl = route_url + '?servicekey=' + process.env.key + '&routeId='; // 각 버스 정보 조회용
BusRouteUrl += routeID[index++];
//console.log(BusRouteUrl);
request(BusRouteUrl, (err, res, body) => {
var $ = cheerio.load(body, {decodeEntities: false});
$('busRouteInfoItem').each(function(idx){
var id = $(this).find('routeId').text(); //버스 노선 id
var num = $(this).find('routeName').text(); //버스 번호
var firsttime = $(this).find('upFirstTime').text(); //평일 기점 첫차시간
var lasttime = $(this).find('upLastTime').text(); //평일 기점 막차 시간
var mintime = $(this).find('peekAlloc').text(); //평일 최소 배차시간
var maxtime = $(this).find('nPeekAlloc').text(); //평일 최대 배차시간
//var idx = Bus.findIndex((item, idx) => { return item.routeId = id})
var newBus = new Object();
newBus.routeId = id;
newBus.BusNum = num;
newBus.FirstTime = firsttime;
newBus.LastTime = lasttime;
newBus.MinTime = mintime;
newBus.MaxTime = maxtime;
console.log(newBus);
Bus.push(newBus);
console.log(Bus);
})
})
}
for(var i=0; i<routeID.length; i++){
getBusNum();
}
const GateBusUrl = bus_url + '?servicekey=' + process.env.key + '&stationId=' + gateStationID; //국제캠 정문 정류장
let date = new Date();
let predictTime = ['-1', '-1', '-1', '-1'];
let body = new Object();
function predict(){
console.log(GateBusUrl);
request(GateBusUrl, (err, res, body) => {
var $ = cheerio.load(body, {decodeEntities: false});
$('busArrivalList').each(function(idx){
let route = $(this).find('routeId').text();
var index = Bus.findIndex(function(e, idx){ return e.routeId == route;});
if(index > -1){
//var num = $(this).find('plateNo1').text(); // 버스 차량번호 ex) 70사 1290
var time = $(this).find('predictTime1').text(); // 버스 예상 도착시간
var predictHour1 = date.getHours();
var predictMinute1 = date.getMinutes() + Bus[index].mintime - (3 - (time*1)); // 사색의 광장 -> 경희대학교 3분정도 소요
var predictHour2 = date.getHours();
var predictMinute2 = date.getMinutes() + Bus[index].maxtime - (3 - (time*1)); // time*1 : string to integer 형변환
if(predictMinute1 >= 60){
predictHour1 += 1;
predictMinute1 -= 60;
}
if(predictMinute2 >= 60){
predictHour2 += 1;
predictMinute2 -= 60;
}
Bus[index]["MinPredictTime"] = predictHour1 + ":" + predictMinute1;
Bus[index]["MaxPredictTime"] = predictHour2 + ":" + predictMinute2;
predictTime = [predictHour1 + "", predictMinute1 + "", predictHour2 + "", predictMinute2 + ""]
const dateBusDeparture = new Date(date.getFullYear(), date.getMonth(), date.getDate(), predictTime[0]*1, predictTime[1]*1, 0);
var gapSec = (dateBusDeparture.getTime() - date.getTime())/1000;
var gapHour = Math.floor(gapSec / 60 / 60);
var gapMin = Math.floor((gapSec - gapHour * 3600) / 60);
// var ans = gapHour + "시간" + gapMin + "분 이상";
// var ETD_min_H = predictTime[0];
// var ETD_min_M = predictTime[1];
// var ETD_max_H = predictTime[2];
// var ETD_max_M = predictTime[3];
//controller에 데이터 전송
module.exports.data = {};
module.exports.data.remainTime = gapHour + "시간" + gapMin + "분 이상";
module.exports.data.ETD_min_H = predictTime[0];
module.exports.data.ETD_min_M = predictTime[1];
module.exports.data.ETD_max_H = predictTime[2];
module.exports.data.ETD_max_M = predictTime[3];
}
})
})
}
function start(){
setInterval(predict, 60000);
}
setTimeout(start, 20000);
var express = require('express');
var app = express();
var fs = require('fs')
var Businfo = require("../models/BusInfo");
app.set('views',__dirname+'/views');
app.set('view engine', 'ejs');
app.engine('html',require('ejs').renderFile);
app.engine('ejs', require('ejs').renderFile);
exports.mainView = function(req, res) {
res.render("./views/ejstest.ejs", "utf8", function(err,buf){
res.end(buf); //render 함수로 ejs 파일 렌더링 할 예정. index.ejs
})
}
exports.timeTable = function(req, res) {
res.render("ejstest",{busNum:req.query.busNum, remainTime: Businfo.data.remainTime, ETD_min_H: Businfo.data.ETD_min_H,
ETD_min_m: Businfo.data.ETD_max_m, ETD_max_H: Businfo.data.ETD_max_H, ETD_max_m: Businfo.data.ETD_max_m });
}
const router = require("express").Router();
const controller = require("./controller");
router.get("/", controller.mainView); //main 페이지
router.get("/timetable", controller.timeTable); //timetable 페이지
module.exports = router;
\ No newline at end of file
<!doctype html>
<html>
<head>
<title>BUS TT</title>
<meta charset="utf-8">
<style type="text/css">
a { text-decoration:none } /* 하이퍼링크 밑줄 미적용
a { color:red; text-decoration:none} : 색깔 변화없음
*/
</style>
</head>
<body>
<h1><p style="text-align:center;">BTT</p></h1>
<br>
<h2> 사색의 광장 Bus Time Table 조회 서비스에 오신 것을 환영합니다.</h2>
<p> 이곳에는 사색의 광장에서 출발하는 모든 버스의 정보가 있습니다.</p>
<br><br>
<h2> 버스별 시간표 조회</h2>
<p> m월 d일 오늘 운행하는 버스들</p>
<ul>
<li><a href="http://localhost:23023/?busNum=5100">5100</a></li>
<li><a href="http://localhost:23023/?busNum=M5107">M5107</a></li>
<li><a href="http://localhost:23023/?busNum=9">9</a></li>
<li><a href="http://localhost:23023/?busNum=7000">7000</a></li>
<li>etc</li>
</ul>
<br>
<p>설명</p>
</body>
</html>
<!doctype html>
<html>
<head>
<title>Time Table</title>
<meta charset="utf-8">
<style type="text/css">
a { text-decoration:none }
</style>
</head>
<body>
<h1><a href="/"><p style="text-align:center;">BTT</p></a></h1>
<br> <div style="padding:0 0 0 20px;">
<h2> <%= busNum %> BUS Time Table</h2>
</div>
<div style="padding:0 0 0 20px;">
<table border="3" width="400">
<th> Index</th>
<th> 출발 예정시간</th>
<th> 남은 시간</th>
<tr align="center">
<td> text입력하기 </td>
<td> <%= ETD_min_H %>:<%= ETD_min_m %> ~ <%= ETD_max_H %>:<%= ETD_max_m %> </td>
<td> <%= remainTime %> </td>
</tr>
</table>
</div>
<br>
<br>
<p> <div style="padding:0 0 0 20px;">
버스의 평균 배차시간을 기준으로 최소 출발시간과 최대 출발시간을 제공합니다.
</div> </p>
<div style="padding:0 0 0 20px;">
<% var date = new Date(); %>
<% var yyyy = date.getFullYear(); %>
<% var mm1 = date.getMonth() + 1; %>
<% var dd = date.getDate(); %>
<% var hh = date.getHours(); %>
<% var mm2 = date.getMinutes(); %>
<% document.write(yyyy+"년 "+mm1+"월 "+dd+"일 "); %>
<% document.write(hh+"시 "+mm2+"분 기준"); %>
</div>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html>
<head>
<title>BUS TT</title>
<meta charset="utf-8">
<style type="text/css">
a { text-decoration:none }
</style>
</head>
<body>
<h1><p style="text-align:center;">BTT</p></h1>
<br>
<link rel='stylesheet' type='text/css' href='/css/style.css' />
<h2> 사색의 광장 Bus Time Table 조회 서비스에 오신 것을 환영합니다.</h2>
<p> 이곳에는 사색의 광장에서 출발하는 모든 버스의 정보가 있습니다.</p>
<br><br>
<h2> 버스별 시간표 조회</h2>
<div style="padding:0 0 0 20px;">
<% var date = new Date(); %>
<% var yyyy = date.getFullYear(); %>
<% var mm1 = date.getMonth() + 1; %>
<% var dd = date.getDate(); %>
<% var hh = date.getHours(); %>
<% var mm2 = date.getMinutes(); %>
<% document.write(yyyy+"년 "+mm1+"월 "+dd+"일 오늘 운행하는 버스들 "); %>
<% document.write("( "+hh+"시 "+mm2+"분 기준 )"); %>
</div>
<ul>
<li><a href="http://localhost:23023/timetable?busNum=5100">5100</a></li>
<li><a href="http://localhost:23023/timetable?busNum=M5107">M5107</a></li>
<li><a href="http://localhost:23023/timetable?busNum=9">9</a></li>
<li><a href="http://localhost:23023/timetable?busNum=7000">7000</a></li>
<li>etc</li>
</ul>
<br>
<p>설명</p>
</body>
</html>
\ No newline at end of file
<!-- 이 문서는 base.js에 timetableHTML로 저장되어 있음. 따라서 이 문서는 직접적으로 사용하지 않음-->
<!doctype html>
<html>
<head>
<title>Time Table</title>
<meta charset="utf-8">
<style type="text/css">
a { text-decoration:none }
</style>
</head>
<body>
<h1><a href="Index.html"><p style="text-align:center;">BTT</p></a></h1>
<br>
<h2>0000 BUS Time Table</h2>
<p> 타임테이블 출력 ~~~~ </p>
</body>
</html>